def test_unmatch_signature(self):
        space = DummySpace()
        args = Arguments(space, [1, 2, 3])
        sig = (["a", "b", "c"], None, None)
        data = args.match_signature(sig, [])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [1])
        sig = (["a", "b", "c"], None, None)
        data = args.match_signature(sig, [2, 3])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [1, 2, 3, 4, 5])
        sig = (["a", "b", "c"], "r", None)
        data = args.match_signature(sig, [])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [1], {"c": 3, "b": 2})
        sig = (["a", "b", "c"], None, None)
        data = args.match_signature(sig, [])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [1], {"c": 5})
        sig = (["a", "b", "c"], None, None)
        data = args.match_signature(sig, [2, 3])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [1], {"c": 5, "d": 7})
        sig = (["a", "b", "c"], None, "kw")
        data = args.match_signature(sig, [2, 3])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [1, 2, 3, 4, 5], {"e": 5, "d": 7})
        sig = (["a", "b", "c"], "r", "kw")
        data = args.match_signature(sig, [2, 3])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [], {}, w_stararg=[1], w_starstararg={"c": 5, "d": 7})
        sig = (["a", "b", "c"], None, "kw")
        data = args.match_signature(sig, [2, 3])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [1, 2], {"g": 9}, w_stararg=[3, 4, 5], w_starstararg={"e": 5, "d": 7})
        sig = (["a", "b", "c"], "r", "kw")
        data = args.match_signature(sig, [2, 3])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()
示例#2
0
文件: gateway.py 项目: griels/pypy-sc
 def appcaller(space, *args_w):
     if not isinstance(space, ObjSpace): 
         raise TypeError("first argument must be a space instance.")
     # redirect if the space handles this specially
     # XXX can this be factored a bit less flow space dependently?
     if hasattr(space, 'specialcases'):
         sc = space.specialcases
         if ApplevelClass in sc:
             ret_w = sc[ApplevelClass](space, self, name, args_w)
             if ret_w is not None: # it was RPython
                 return ret_w
     # the last argument can be an Arguments
     if not args_w:
         args = Arguments(space, [])
     else:
         args = args_w[-1]
         assert args is not None
         if not isinstance(args, AbstractArguments):
             args = Arguments(space, list(args_w))
         else:
             # ...which is merged with the previous arguments, if any
             if len(args_w) > 1:
                 more_args_w, more_kwds_w = args.unpack()
                 args = Arguments(space,
                                  list(args_w[:-1]) + more_args_w,
                                  more_kwds_w)
     w_func = self.wget(space, name) 
     return space.call_args(w_func, args)
示例#3
0
 def appcaller(space, *args_w):
     if not isinstance(space, ObjSpace): 
         raise TypeError("first argument must be a space instance.")
     # redirect if the space handles this specially
     # XXX can this be factored a bit less flow space dependently?
     if hasattr(space, 'specialcases'):
         sc = space.specialcases
         if ApplevelClass in sc:
             ret_w = sc[ApplevelClass](space, self, name, args_w)
             if ret_w is not None: # it was RPython
                 return ret_w
     # the last argument can be an Arguments
     if not args_w:
         args = Arguments(space, [])
     else:
         args = args_w[-1]
         assert args is not None
         if not isinstance(args, AbstractArguments):
             args = Arguments(space, list(args_w))
         else:
             # ...which is merged with the previous arguments, if any
             if len(args_w) > 1:
                 more_args_w, more_kwds_w = args.unpack()
                 args = Arguments(space,
                                  list(args_w[:-1]) + more_args_w,
                                  more_kwds_w)
     w_func = self.wget(space, name) 
     return space.call_args(w_func, args)
示例#4
0
    def test_unmatch_signature(self):
        space = DummySpace()
        args = Arguments(space, [1, 2, 3])
        sig = (['a', 'b', 'c'], None, None)
        data = args.match_signature(sig, [])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [1])
        sig = (['a', 'b', 'c'], None, None)
        data = args.match_signature(sig, [2, 3])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [1, 2, 3, 4, 5])
        sig = (['a', 'b', 'c'], 'r', None)
        data = args.match_signature(sig, [])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [1], {'c': 3, 'b': 2})
        sig = (['a', 'b', 'c'], None, None)
        data = args.match_signature(sig, [])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [1], {'c': 5})
        sig = (['a', 'b', 'c'], None, None)
        data = args.match_signature(sig, [2, 3])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [1], {'c': 5, 'd': 7})
        sig = (['a', 'b', 'c'], None, 'kw')
        data = args.match_signature(sig, [2, 3])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [1, 2, 3, 4, 5], {'e': 5, 'd': 7})
        sig = (['a', 'b', 'c'], 'r', 'kw')
        data = args.match_signature(sig, [2, 3])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [], {},
                         w_stararg=[1],
                         w_starstararg={
                             'c': 5,
                             'd': 7
                         })
        sig = (['a', 'b', 'c'], None, 'kw')
        data = args.match_signature(sig, [2, 3])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()

        args = Arguments(space, [1, 2], {'g': 9},
                         w_stararg=[3, 4, 5],
                         w_starstararg={
                             'e': 5,
                             'd': 7
                         })
        sig = (['a', 'b', 'c'], 'r', 'kw')
        data = args.match_signature(sig, [2, 3])
        new_args = args.unmatch_signature(sig, data)
        assert args.unpack() == new_args.unpack()