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)