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()
Esempio n. 2
0
def callparse(rtyper, graph, hop, opname, r_self=None):
    """Parse the arguments of 'hop' when calling the given 'graph'.
    """
    rinputs = getrinputs(rtyper, graph)
    space = RPythonCallsSpace()

    def args_h(start):
        return [VarHolder(i, hop.args_s[i]) for i in range(start, hop.nb_args)]

    if r_self is None:
        start = 1
    else:
        start = 0
        rinputs[0] = r_self
    if opname == "simple_call":
        arguments = Arguments(space, args_h(start))
    elif opname == "call_args":
        arguments = Arguments.fromshape(
            space,
            hop.args_s[start].const,  # shape
            args_h(start + 1))
    # parse the arguments according to the function we are calling
    signature = graph.signature
    defs_h = []
    if graph.defaults:
        for x in graph.defaults:
            defs_h.append(ConstHolder(x))
    try:
        holders = arguments.match_signature(signature, defs_h)
    except ArgErr, e:
        raise TyperError, "signature mismatch: %s" % e.getmsg(graph.name)
Esempio n. 3
0
def callparse(rtyper, graph, hop, opname, r_self=None):
    """Parse the arguments of 'hop' when calling the given 'graph'.
    """
    rinputs = getrinputs(rtyper, graph)
    space = RPythonCallsSpace()

    def args_h(start):
        return [VarHolder(i, hop.args_s[i]) for i in range(start, hop.nb_args)]

    if r_self is None:
        start = 1
    else:
        start = 0
        rinputs[0] = r_self
    if opname == "simple_call":
        arguments = Arguments(space, args_h(start))
    elif opname == "call_args":
        arguments = Arguments.fromshape(space, hop.args_s[start].const, args_h(start + 1))  # shape
    # parse the arguments according to the function we are calling
    signature = graph.signature
    defs_h = []
    if graph.defaults:
        for x in graph.defaults:
            defs_h.append(ConstHolder(x))
    try:
        holders = arguments.match_signature(signature, defs_h)
    except ArgErr, e:
        raise TyperError, "signature mismatch: %s" % e.getmsg(graph.name)
Esempio n. 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()