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@…, 8 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):