コード例 #1
0
ファイル: test_call.py プロジェクト: mozillazg/pypy
def test_guess_call_kind_and_calls_from_graphs():
    class portal_runner_obj:
        graph = object()

    class FakeJitDriverSD:
        portal_runner_ptr = portal_runner_obj

    g = object()
    g1 = object()
    cc = CallControl(jitdrivers_sd=[FakeJitDriverSD()])
    cc.candidate_graphs = [g, g1]

    op = SpaceOperation("direct_call", [Constant(portal_runner_obj)], Variable())
    assert cc.guess_call_kind(op) == "recursive"

    class fakeresidual:
        _obj = object()

    op = SpaceOperation("direct_call", [Constant(fakeresidual)], Variable())
    assert cc.guess_call_kind(op) == "residual"

    class funcptr:
        class _obj:
            class graph:
                class func:
                    oopspec = "spec"

    op = SpaceOperation("direct_call", [Constant(funcptr)], Variable())
    assert cc.guess_call_kind(op) == "builtin"

    class funcptr:
        class _obj:
            graph = g

    op = SpaceOperation("direct_call", [Constant(funcptr)], Variable())
    res = cc.graphs_from(op)
    assert res == [g]
    assert cc.guess_call_kind(op) == "regular"

    class funcptr:
        class _obj:
            graph = object()

    op = SpaceOperation("direct_call", [Constant(funcptr)], Variable())
    res = cc.graphs_from(op)
    assert res is None
    assert cc.guess_call_kind(op) == "residual"

    h = object()
    op = SpaceOperation("indirect_call", [Variable(), Constant([g, g1, h])], Variable())
    res = cc.graphs_from(op)
    assert res == [g, g1]
    assert cc.guess_call_kind(op) == "regular"

    op = SpaceOperation("indirect_call", [Variable(), Constant([h])], Variable())
    res = cc.graphs_from(op)
    assert res is None
    assert cc.guess_call_kind(op) == "residual"
コード例 #2
0
ファイル: test_call.py プロジェクト: zielmicha/pypy
def test_guess_call_kind_and_calls_from_graphs():
    class portal_runner_obj:
        graph = object()

    class FakeJitDriverSD:
        portal_runner_ptr = portal_runner_obj

    g = object()
    g1 = object()
    cc = CallControl(jitdrivers_sd=[FakeJitDriverSD()])
    cc.candidate_graphs = [g, g1]

    op = SpaceOperation('direct_call', [Constant(portal_runner_obj)],
                        Variable())
    assert cc.guess_call_kind(op) == 'recursive'

    class fakeresidual:
        _obj = object()

    op = SpaceOperation('direct_call', [Constant(fakeresidual)], Variable())
    assert cc.guess_call_kind(op) == 'residual'

    class funcptr:
        class _obj:
            class graph:
                class func:
                    oopspec = "spec"

    op = SpaceOperation('direct_call', [Constant(funcptr)], Variable())
    assert cc.guess_call_kind(op) == 'builtin'

    class funcptr:
        class _obj:
            graph = g

    op = SpaceOperation('direct_call', [Constant(funcptr)], Variable())
    res = cc.graphs_from(op)
    assert res == [g]
    assert cc.guess_call_kind(op) == 'regular'

    class funcptr:
        class _obj:
            graph = object()

    op = SpaceOperation('direct_call', [Constant(funcptr)], Variable())
    res = cc.graphs_from(op)
    assert res is None
    assert cc.guess_call_kind(op) == 'residual'

    h = object()
    op = SpaceOperation('indirect_call',
                        [Variable(), Constant([g, g1, h])], Variable())
    res = cc.graphs_from(op)
    assert res == [g, g1]
    assert cc.guess_call_kind(op) == 'regular'

    op = SpaceOperation('indirect_call',
                        [Variable(), Constant([h])], Variable())
    res = cc.graphs_from(op)
    assert res is None
    assert cc.guess_call_kind(op) == 'residual'