Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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