Ejemplo n.º 1
0
 def CALL_FUNCTION(decompiler, argc, star=None, star2=None):
     pop = decompiler.stack.pop
     kwarg, posarg = divmod(argc, 256)
     args = []
     for i in xrange(kwarg):
         arg = pop()
         key = pop().value
         args.append(ast.Keyword(key, arg))
     for i in xrange(posarg): args.append(pop())
     args.reverse()
     return decompiler._call_function(args, star, star2)
Ejemplo n.º 2
0
 def CALL_FUNCTION_KW(decompiler, argc):
     if sys.version_info < (3, 6):
         return decompiler.CALL_FUNCTION(argc, star2=decompiler.stack.pop())
     keys = decompiler.stack.pop()
     assert isinstance(keys, ast.Const)
     keys = keys.value
     values = decompiler.pop_items(argc)
     assert len(keys) <= len(values)
     args = values[:-len(keys)]
     for key, value in izip(keys, values[-len(keys):]):
         args.append(ast.Keyword(key, value))
     return decompiler._call_function(args)
Ejemplo n.º 3
0
 def CALL_METHOD(decompiler, argc):
     pop = decompiler.stack.pop
     args = []
     if argc >= 256:
         kwargc = argc // 256
         argc = argc % 256
         for i in range(kwargc):
             v = pop()
             k = pop()
             assert isinstance(k, ast.Const)
             k = k.value # ast.Name(k.value)
             args.append(ast.Keyword(k, v))
     for i in range(argc):
         args.append(pop())
     args.reverse()
     method = pop()
     return ast.CallFunc(method, args)
Ejemplo n.º 4
0
 def CALL_FUNCTION(decompiler, argc, star=None, star2=None):
     pop = decompiler.stack.pop
     kwarg, posarg = divmod(argc, 256)
     args = []
     for i in xrange(kwarg):
         arg = pop()
         key = pop().value
         args.append(ast.Keyword(key, arg))
     for i in xrange(posarg): args.append(pop())
     args.reverse()
     tos = pop()
     if isinstance(tos, ast.GenExpr):
         assert len(args) == 1 and star is None and star2 is None
         genexpr = tos
         qual = genexpr.code.quals[0]
         assert isinstance(qual.iter, ast.Name)
         assert qual.iter.name in ('.0', '[outmost-iterable]')
         qual.iter = args[0]
         return genexpr
     else: return ast.CallFunc(tos, args, star, star2)