generators in *args and illegal *args like *1

This commit is contained in:
David Halter
2013-07-23 00:07:17 +02:00
parent 6a2afa7e94
commit 471f492f12
3 changed files with 27 additions and 2 deletions

View File

@@ -635,9 +635,14 @@ class Execution(Executable):
if commands[0] == '*':
arrays = evaluate.follow_call_list(commands[1:])
# *args must be some sort of an array, otherwise -> ignore
for array in arrays:
if isinstance(array, Array):
for field_stmt in array: # yield from plz!
yield None, field_stmt
elif isinstance(array, Generator):
for field_stmt in array.iter_content():
yield None, helpers.FakeStatement(field_stmt)
# **kwargs
elif commands[0] == '**':
arrays = evaluate.follow_call_list(commands[1:])

View File

@@ -125,3 +125,13 @@ def search_function_definition(stmt, pos):
arr.parent.execution = None
return call, index, False
return None, 0, False
class FakeStatement(pr.Statement):
class SubModule():
line_offset = 0
def __init__(self, content):
cls = type(self)
p = 0, 0
super(cls, self).__init__(cls.SubModule, [], [], [content], p, p)

View File

@@ -166,6 +166,16 @@ exe[1]
# illegal args (TypeError)
#?
args_func(*1)[0]
# iterator
#? int()
args_func(*iter([1]))[0]
# different types
e = args_func(*[1+"", {}])
#? int() str()
e[0]
#? dict()
e[1]
_list = [1,""]
exe2 = args_func(_list)[0]