# 需要導入模塊: import ast [as 別名]
# 或者: from ast import Continue [as 別名]
def visit_Return(self, node):
if isinstance(node.value, ast.Call) and isinstance(node.value.func, ast.Name):
if node.value.func.id == self.target_func.name:
self.__class__.optimized = True
tmp_result = []
result = []
default_values = [] + self.target_func.args.defaults
for arg in self.target_func.args.args:
arg_name = ast.Name(id=arg.arg,
ctx=ast.Store(),
lineno=0,
col_offset=0)
try:
arg_value = node.value.args.pop(0)
except IndexError:
arg_value = default_values.pop(0)
tmp_arg_sym = get_temp_name()
tmp_arg_name = ast.Name(id=tmp_arg_sym.name,
ctx=ast.Store(),
lineno=0,
col_offset=0)
arg_value_assign = ast.Assign(targets=[tmp_arg_name],
value=arg_value,
lineno=0,
col_offset=0)
tmp_result.append(arg_value_assign)
arg_value_ref = translator.translate_ref(tmp_arg_sym)[1]
arg_re_assign = ast.Assign(targets=[arg_name],
value=arg_value_ref,
lineno=0,
col_offset=0)
arg_re_assign.re_assign = True
result.append(arg_re_assign)
if self.target_func.args.vararg is not None:
vararg = self.target_func.args.vararg
arg_name = ast.Name(id=vararg.arg if GE_PYTHON_34 else vararg,
ctx=ast.Store(),
lineno=0,
col_offset=0)
arg_value = ast.Tuple(elts=node.value.args,
lineno=0,
col_offset=0,
ctx=ast.Load())
arg_re_assign = ast.Assign(targets=[arg_name],
value=arg_value,
lineno=0,
col_offset=0)
arg_re_assign.re_assign = True
result.append(arg_re_assign)
result.append(ast.Continue(lineno=0, col_offset=0))
return tmp_result + result
return node