Fix some issues with array arguments.

This commit is contained in:
Dave Halter
2014-11-14 15:19:47 +01:00
parent 278bc9d705
commit e64c78503e
2 changed files with 6 additions and 4 deletions

View File

@@ -16,7 +16,8 @@ class Arguments(pr.Base):
def __init__(self, evaluator, argument_node, trailer=None): def __init__(self, evaluator, argument_node, trailer=None):
""" """
The argument_node is either a parser node or a list of evaluated The argument_node is either a parser node or a list of evaluated
objects. objects. Those evaluated objects may be lists of evaluated objects
themselves (one list for the first argument, one for the second, etc).
""" """
self.argument_node = argument_node self.argument_node = argument_node
self._evaluator = evaluator self._evaluator = evaluator
@@ -68,6 +69,8 @@ class Arguments(pr.Base):
else: else:
if pr.is_node(el, 'argument'): if pr.is_node(el, 'argument'):
named_args.append((el.children[0].value, (el.children[2],))) named_args.append((el.children[0].value, (el.children[2],)))
elif isinstance(el, (list, tuple)):
yield None, el
else: else:
yield None, (el,) yield None, (el,)

View File

@@ -199,7 +199,7 @@ class Instance(use_metaclass(CachedMetaClass, Executed)):
yield self, [get_instance_el(self._evaluator, self, var, True) yield self, [get_instance_el(self._evaluator, self, var, True)
for var in names] for var in names]
def get_index_types(self, index_array): def get_index_types(self, evaluator, index_array):
indexes = iterable.create_indexes_or_slices(self._evaluator, index_array) indexes = iterable.create_indexes_or_slices(self._evaluator, index_array)
if any([isinstance(i, iterable.Slice) for i in indexes]): if any([isinstance(i, iterable.Slice) for i in indexes]):
@@ -208,9 +208,8 @@ class Instance(use_metaclass(CachedMetaClass, Executed)):
# TODO support slices in a more general way. # TODO support slices in a more general way.
indexes = [] indexes = []
index = helpers.FakeStatement(indexes, parent=compiled.builtin)
try: try:
return self.execute_subscope_by_name('__getitem__', [index]) return self.execute_subscope_by_name('__getitem__', [indexes])
except KeyError: except KeyError:
debug.warning('No __getitem__, cannot access the array.') debug.warning('No __getitem__, cannot access the array.')
return [] return []