def build_assign(reporter, frame, space, n, v, evals): if isinstance(n, ast.AssName) or isinstance(n, ast.Name): space[n.name].bind(v) elif isinstance(n, ast.AssTuple) or isinstance(n, ast.AssList): tup = TupleUnpack(ExecutionFrame(frame, n), n, v, len(n.nodes)) for (i,c) in enumerate(n.nodes): build_assign(reporter, frame, space, c, tup.get_nth(i), evals) elif isinstance(n, (ast.AssAttr, ast.Getattr)): obj = build_expr(reporter, frame, space, n.expr, evals) AttrAssign(ExecutionFrame(frame, n), n, obj, n.attrname, v) elif isinstance(n, ast.Subscript): obj = build_expr(reporter, frame, space, n.expr, evals) subs = [ build_expr(reporter, frame, space, expr, evals) for expr in n.subs ] if len(subs) == 1: SubAssign(ExecutionFrame(frame, n), n, obj, subs[0], v) else: SliceAssign(ExecutionFrame(frame, n), n, obj, subs, v) elif isinstance(n, ast.Slice): obj = build_expr(reporter, frame, space, n.expr, evals) lower = upper = None if n.lower: lower = build_expr(reporter, frame, space, n.lower, evals) if n.upper: upper = build_expr(reporter, frame, space, n.upper, evals) SliceAssign(ExecutionFrame(frame, n), n, obj, [lower, upper], v) else: raise SyntaxError('unsupported syntax: %r (%s:%r)' % (n, n._module.get_path(), n.lineno)) return
def assign_arg(frame, anchor, var1, arg1): from pyntch.expression import TupleUnpack assert not isinstance(var1, list), var1 assert not isinstance(arg1, list), arg1 if isinstance(var1, tuple): tup = TupleUnpack(frame, anchor, arg1, len(var1)) for (i, v) in enumerate(var1): assign_arg(frame, anchor, v, tup.get_nth(i)) else: var1.bind(arg1) return
def assign_arg(frame, anchor, var1, arg1): from pyntch.expression import TupleUnpack assert not isinstance(var1, list), var1 assert not isinstance(arg1, list), arg1 if isinstance(var1, tuple): tup = TupleUnpack(frame, anchor, arg1, len(var1)) for (i,v) in enumerate(var1): assign_arg(frame, anchor, v, tup.get_nth(i)) else: var1.bind(arg1) return