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)
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
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)