Example #1
0
def parse_single(space, i, lines):
    line = lines[i].strip()

    #ignore byref markers in arrays/objects
    if line.startswith('&'):
        line = line[1:]

    if line.startswith('int'):
        return space.wrap(int(line[len('int('):-1])), i + 1
    elif line.startswith('bool'):
        return space.wrap(line[len('bool('):-1] == 'true'), i + 1
    if line.startswith('float'):
        return space.wrap(float(line[len('float('):-1])), i + 1
    elif line == 'NULL':
        return space.w_Null, i + 1
    elif line.startswith('array'):
        lgt = int(line[len('array') + 1:line.find(')')])
        pairs, i = parse_array(space, i + 1, lines, lgt)
        return space.new_array_from_pairs(pairs), i
    elif line.startswith('string'):
        lgt = int(line[len('string') + 1:line.find(')')])
        return space.newstr(line[line.find('"') + 1:-1]), i + 1
    elif line.startswith('object('):
        lgt = int(line[line.rfind('(') + 1:line.rfind(')')])
        clsname = line[len('object('):line.index(')')]
        pairs, i = parse_array(space, i + 1, lines, lgt)
        obj = W_InstanceObject(FakeClass(clsname), [])
        for w_name, w_value in pairs:
            obj._create_attr(space.str_w(w_name), w_value)
        return obj, i
    else:
        raise Exception("unsupported line %s" % line)
Example #2
0
 def create_instance(self, interp, storage_w):
     if self.custom_instance_class is not None:
         w_res = self.custom_instance_class(self, storage_w)
         w_res.setup(interp)
     else:
         w_res = W_InstanceObject(self, storage_w)
     return w_res
Example #3
0
def parse_single(space, i, lines):
    line = lines[i].strip()

    #ignore byref markers in arrays/objects
    if line.startswith('&'):
        line = line[1:]

    if line.startswith('int'):
        return space.wrap(int(line[len('int('):-1])), i + 1
    elif line.startswith('bool'):
        return space.wrap(line[len('bool('):-1] == 'true'), i + 1
    if line.startswith('float'):
        return space.wrap(float(line[len('float('):-1])), i + 1
    elif line == 'NULL':
        return space.w_Null, i + 1
    elif line.startswith('array'):
        lgt = int(line[len('array') + 1:line.find(')')])
        return parse_array(space, i + 1, lines, lgt)
    elif line.startswith('string'):
        lgt = int(line[len('string') + 1:line.find(')')])
        return space.newstr(line[line.find('"') + 1:-1]), i + 1
    elif line.startswith('object('):
        lgt = int(line[line.rfind('(') + 1:line.rfind(')')])
        clsname = line[len('object('):line.index(')')]
        array, i = parse_array(space, i + 1, lines, lgt)
        obj = W_InstanceObject(FakeClass(clsname), array.as_rdict())
        return obj, i
    else:
        raise Exception("unsupported line %s" % line)