Fix some issues with params.

This commit is contained in:
Dave Halter
2014-11-23 12:22:03 +01:00
parent c10ec4f876
commit 8adfc47297
2 changed files with 8 additions and 11 deletions
+6 -10
View File
@@ -156,10 +156,7 @@ class ExecutedParam(pr.Param):
def eval(self, evaluator): def eval(self, evaluator):
types = [] types = []
for v in self.values: for v in self.values:
if isinstance(v, (pr.Simple, pr.Leaf)): types += evaluator.eval_element(v)
types += evaluator.eval_element(v)
else:
types.append(v)
return types return types
@property @property
@@ -246,21 +243,20 @@ def get_params(evaluator, func, var_args):
if param.stars == 1: if param.stars == 1:
# *args param # *args param
array_type = pr.Array.TUPLE array_type = pr.Array.TUPLE
lst_values = [iterable.MergedNodes(va_values)] if va_values else [] lst_values = [iterable.MergedNodes(va_values)]
for key, va_values in var_arg_iterator: for key, va_values in var_arg_iterator:
# Iterate until a key argument is found. # Iterate until a key argument is found.
if key: if key:
var_arg_iterator.push_back((key, va_values)) var_arg_iterator.push_back((key, va_values))
break break
lst_values.append(iterable.MergedNodes(va_values)) lst_values.append(iterable.MergedNodes(va_values))
if lst_values: seq = iterable.FakeSequence(evaluator, lst_values, pr.Array.TUPLE)
values = [iterable.FakeSequence(evaluator, lst_values, values = [iterable.AlreadyEvaluated([seq])]
pr.Array.TUPLE)]
#values = [helpers.stmts_to_stmt(v) for v in lst_values]
elif param.stars == 2: elif param.stars == 2:
# **kwargs param # **kwargs param
array_type = pr.Array.DICT array_type = pr.Array.DICT
values = [iterable.FakeDict(evaluator, dict(non_matching_keys))] dct = iterable.FakeDict(evaluator, dict(non_matching_keys))
values = [iterable.AlreadyEvaluated([dct])]
non_matching_keys = {} non_matching_keys = {}
else: else:
# normal param # normal param
+2 -1
View File
@@ -494,7 +494,8 @@ class Function(use_metaclass(CachedMetaClass, Wrapper)):
# Create param array. # Create param array.
old_func = Function(self._evaluator, f, is_decorated=True) old_func = Function(self._evaluator, f, is_decorated=True)
wrappers = self._evaluator.execute(decorator, (old_func,)) arg = iterable.AlreadyEvaluated([old_func])
wrappers = self._evaluator.execute(decorator, (arg,))
if not len(wrappers): if not len(wrappers):
debug.warning('no wrappers found %s', self.base_func) debug.warning('no wrappers found %s', self.base_func)
return self return self