Edgewall Software

Ticket #42: eval-fix-star-and-dstar-expr.patch

File eval-fix-star-and-dstar-expr.patch, 1.7 KB (added by davidf@…, 9 years ago)

patch to fix eval of *args and kwargs, with tests

  • tests/eval.py

     
    200200        self.assertEqual(42, Expression("foo(x=bar)").evaluate({'foo': lambda x: x,
    201201                                                                'bar': 42}))
    202202
     203    def test_call_star_args(self):
     204        self.assertEqual(42, Expression("foo(*bar)").evaluate({'foo': lambda x: x,
     205                                                               'bar': [42]}))
     206
     207    def test_call_dstar_args(self):
     208        def foo(x):
     209            return x
     210        self.assertEqual(42, Expression("foo(**bar)").evaluate({'foo': foo,
     211                                                                'bar': {"x": 42}}))
     212
    203213    def test_call_function_without_params(self):
    204214        self.assertEqual(42, Expression("foo").evaluate({'foo': lambda: 42}))
    205215        data = {'foo': 'bar'}
  • eval.py

     
    243243        node.node = self.visit(node.node, *args, **kwargs)
    244244        node.args = map(lambda x: self.visit(x, *args, **kwargs), node.args)
    245245        if node.star_args:
    246             node.star_args = map(lambda x: self.visit(x, *args, **kwargs),
    247                                  node.star_args)
     246            node.star_args = self.visit(node.star_args, *args, **kwargs)
    248247        if node.dstar_args:
    249             node.dstart_args = map(lambda x: self.visit(x, *args, **kwargs),
    250                                    node.dstar_args)
     248            node.dstar_args = self.visit(node.dstar_args, *args, **kwargs)
    251249        return node
    252250
    253251    def visitLambda(self, node, *args, **kwargs):