Exemplo n.º 1
0
    def test_quasiimmut_seen_consts(self):
        h = HeapCache()
        box1 = ConstPtr(rffi.cast(llmemory.GCREF, 1))
        box2 = ConstPtr(rffi.cast(llmemory.GCREF, 1))
        box3 = ConstPtr(rffi.cast(llmemory.GCREF, 1))
        box4 = ConstPtr(rffi.cast(llmemory.GCREF, 1))
        assert not h.is_quasi_immut_known(descr1, box1)
        assert not h.is_quasi_immut_known(descr1, box2)
        assert not h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
        h.quasi_immut_now_known(descr1, box1)
        assert h.is_quasi_immut_known(descr1, box1)
        assert h.is_quasi_immut_known(descr1, box2)
        assert not h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
        h.quasi_immut_now_known(descr2, box3)
        assert h.is_quasi_immut_known(descr1, box1)
        assert h.is_quasi_immut_known(descr1, box2)
        assert h.is_quasi_immut_known(descr2, box3)
        assert h.is_quasi_immut_known(descr2, box4)

        # invalidate the descr1 cache

        vbox1 = RefFrontendOp(1)
        vbox2 = RefFrontendOp(2)
        h.setfield(vbox1, vbox2, descr1)
        assert not h.is_quasi_immut_known(descr1, box1)
        assert not h.is_quasi_immut_known(descr1, box2)

        # a call invalidates everything
        h.invalidate_caches(rop.CALL_N,
                            FakeCallDescr(FakeEffectinfo.EF_CAN_RAISE), [])
        assert not h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
Exemplo n.º 2
0
    def test_unescaped_array(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        lengthbox1 = IntFrontendOp(11)
        lengthbox2 = IntFrontendOp(12)
        h.new_array(box1, lengthbox1)
        assert h.is_unescaped(box1)
        h.invalidate_caches(rop.SETARRAYITEM_GC, None, [box1, index1, box2])
        assert h.is_unescaped(box1)
        h.invalidate_caches(rop.SETARRAYITEM_GC, None, [box2, index1, box1])
        assert not h.is_unescaped(box1)

        h = HeapCache()
        h.new_array(box1, lengthbox1)
        h.new(box2)
        assert h.is_unescaped(box1)
        assert h.is_unescaped(box2)
        h.invalidate_caches(rop.SETARRAYITEM_GC, None,
                            [box1, lengthbox2, box2])
        assert h.is_unescaped(box1)
        assert h.is_unescaped(box2)
        h.invalidate_caches(rop.CALL_N,
                            FakeCallDescr(FakeEffectinfo.EF_RANDOM_EFFECTS),
                            [box1])
        assert not h.is_unescaped(box1)
        assert not h.is_unescaped(box2)
Exemplo n.º 3
0
    def test_heapcache_fields(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box3 = RefFrontendOp(3)
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is None
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is None
        h.setfield(box1, box3, descr2)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is box3
        h.setfield(box1, box3, descr1)
        assert h.getfield(box1, descr1) is box3
        assert h.getfield(box1, descr2) is box3
        h.setfield(box3, box1, descr1)
        assert h.getfield(box3, descr1) is box1
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is box3

        h.reset()
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is None
        assert h.getfield(box3, descr1) is None
Exemplo n.º 4
0
    def test_bug_heap_cache_is_cleared_but_not_is_unescaped_2(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        h.new(box1)
        h.new(box2)
        h.setfield(box1, box2, descr1)
        h.invalidate_caches(rop.SETFIELD_GC, None, [box1, box2])
        assert h.getfield(box1, descr1) is box2
        descr = BasicFailDescr()

        class XTra:
            oopspecindex = 0
            OS_ARRAYCOPY = 42
            extraeffect = 5
            EF_LOOPINVARIANT = 1
            EF_ELIDABLE_CANNOT_RAISE = 2
            EF_ELIDABLE_OR_MEMORYERROR = 3
            EF_ELIDABLE_CAN_RAISE = 4

        descr.get_extra_info = XTra
        h.invalidate_caches(rop.CALL_N, descr, [])
        assert h.is_unescaped(box1)
        assert h.is_unescaped(box2)
        assert h.getfield(box1, descr1) is box2
Exemplo n.º 5
0
    def test_ll_arraycopy(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box3 = RefFrontendOp(3)
        box4 = RefFrontendOp(4)
        box5 = RefFrontendOp(5)
        lengthbox1 = IntFrontendOp(11)
        lengthbox2 = IntFrontendOp(12)
        h.new_array(box1, lengthbox1)
        h.setarrayitem(box1, index1, box2, descr1)
        h.new_array(box2, lengthbox1)
        # Just need the destination box for this call
        h.invalidate_caches(rop.CALL_N, arraycopydescr1,
                            [None, box5, box2, index1, index1, index1])
        assert h.getarrayitem(box1, index1, descr1) is box2
        h.invalidate_caches(rop.CALL_N, arraycopydescr1,
                            [None, box5, box3, index1, index1, index1])
        assert h.getarrayitem(box1, index1, descr1) is box2

        h.setarrayitem(box4, index1, box2, descr1)
        assert h.getarrayitem(box4, index1, descr1) is box2
        h.invalidate_caches(rop.CALL_N, arraycopydescr1,
                            [None, box3, box5, index1, index1, index2])
        assert h.getarrayitem(box4, index1, descr1) is None
Exemplo n.º 6
0
 def test_ll_arraycopy_result_propogated(self):
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     box3 = RefFrontendOp(3)
     h.setarrayitem(box1, index1, box2, descr1)
     h.invalidate_caches(rop.CALL_N, arraycopydescr1,
                         [None, box1, box3, index1, index1, index2])
     assert h.getarrayitem(box3, index1, descr1) is box2
Exemplo n.º 7
0
 def test_call_doesnt_invalidate_unescaped_boxes(self):
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     h.new(box1)
     assert h.is_unescaped(box1)
     h.setfield(box1, box2, descr1)
     h.invalidate_caches(rop.CALL_N,
                         FakeCallDescr(FakeEffectinfo.EF_CAN_RAISE), [])
     assert h.getfield(box1, descr1) is box2
Exemplo n.º 8
0
 def test_circular_virtuals(self):
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     box3 = RefFrontendOp(3)
     h.new(box1)
     h.new(box2)
     h.invalidate_caches(rop.SETFIELD_GC, None, [box1, box2])
     h.invalidate_caches(rop.SETFIELD_GC, None, [box2, box1])
     h.invalidate_caches(rop.SETFIELD_GC, None, [box3, box1]) # does not crash
Exemplo n.º 9
0
 def test_ll_arraycopy_dest_new(self):
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     box3 = RefFrontendOp(3)
     box4 = RefFrontendOp(4)
     lengthbox1 = IntFrontendOp(11)
     h.new_array(box1, lengthbox1)
     h.setarrayitem(box3, index1, box4, descr1)
     h.invalidate_caches(rop.CALL_N, arraycopydescr1,
                         [None, box2, box1, index1, index1, index2])
Exemplo n.º 10
0
 def test_ll_arraycopy_differing_descrs_nonconst_index(self):
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     box3 = RefFrontendOp(3)
     h.setarrayitem(box1, index1, box2, descr2)
     assert h.getarrayitem(box1, index1, descr2) is box2
     h.invalidate_caches(rop.CALL_N, arraycopydescr1,
                         [None, box3, box2, index1, index1,
                          InputArgInt()])
     assert h.getarrayitem(box1, index1, descr2) is box2
Exemplo n.º 11
0
 def test_unescaped(self):
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     assert not h.is_unescaped(box1)
     h.new(box2)
     assert h.is_unescaped(box2)
     h.invalidate_caches(rop.SETFIELD_GC, None, [box2, box1])
     assert h.is_unescaped(box2)
     h.invalidate_caches(rop.SETFIELD_GC, None, [box1, box2])
     assert not h.is_unescaped(box2)
Exemplo n.º 12
0
 def test_call_doesnt_invalidate_unescaped_array_boxes(self):
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box3 = RefFrontendOp(3)
     lengthbox1 = IntFrontendOp(11)
     h.new_array(box1, lengthbox1)
     assert h.is_unescaped(box1)
     h.setarrayitem(box1, index1, box3, descr1)
     h.invalidate_caches(rop.CALL_N,
                         FakeCallDescr(FakeEffectinfo.EF_CAN_RAISE), [])
     assert h.getarrayitem(box1, index1, descr1) is box3
Exemplo n.º 13
0
 def test_ll_arraycopy_differing_descrs(self):
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     box3 = RefFrontendOp(3)
     lengthbox2 = IntFrontendOp(12)
     h.setarrayitem(box1, index1, box2, descr2)
     assert h.getarrayitem(box1, index1, descr2) is box2
     h.new_array(box2, lengthbox2)
     h.invalidate_caches(rop.CALL_N, arraycopydescr1,
                         [None, box3, box2, index1, index1, index2])
     assert h.getarrayitem(box1, index1, descr2) is box2
Exemplo n.º 14
0
    def test_length_cache(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        lengthbox1 = IntFrontendOp(11)
        lengthbox2 = IntFrontendOp(12)
        h.new_array(box1, lengthbox1)
        assert h.arraylen(box1) is lengthbox1

        assert h.arraylen(box2) is None
        h.arraylen_now_known(box2, lengthbox2)
        assert h.arraylen(box2) is lengthbox2
Exemplo n.º 15
0
    def test_known_nullity_more_cases(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        h.class_now_known(box1)
        assert h.is_nullity_known(box1)

        h.new(box2)
        assert h.is_nullity_known(box2)

        h.reset()
        assert not h.is_nullity_known(box1)
        assert not h.is_nullity_known(box2)
Exemplo n.º 16
0
    def test_nonstandard_virtualizable(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        assert not h.is_known_nonstandard_virtualizable(box1)
        assert not h.is_known_nonstandard_virtualizable(box2)
        h.nonstandard_virtualizables_now_known(box1)
        assert h.is_known_nonstandard_virtualizable(box1)
        assert not h.is_known_nonstandard_virtualizable(box2)

        h.reset()
        assert not h.is_known_nonstandard_virtualizable(box1)
        assert not h.is_known_nonstandard_virtualizable(box2)
Exemplo n.º 17
0
    def test_known_nullity(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        assert not h.is_nullity_known(box1)
        assert not h.is_nullity_known(box2)
        h.nullity_now_known(box1)
        assert h.is_nullity_known(box1)
        assert not h.is_nullity_known(box2)

        h.reset()
        assert not h.is_nullity_known(box1)
        assert not h.is_nullity_known(box2)
Exemplo n.º 18
0
    def test_known_class_box(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        assert not h.is_class_known(box1)
        assert not h.is_class_known(box2)
        h.class_now_known(box1)
        assert h.is_class_known(box1)
        assert not h.is_class_known(box2)

        h.reset()
        assert not h.is_class_known(box1)
        assert not h.is_class_known(box2)
Exemplo n.º 19
0
 def test_heapcache_array_nonconst_index(self):
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     box3 = RefFrontendOp(3)
     box4 = RefFrontendOp(4)
     h.setarrayitem(box1, index1, box2, descr1)
     h.setarrayitem(box1, index2, box4, descr1)
     assert h.getarrayitem(box1, index1, descr1) is box2
     assert h.getarrayitem(box1, index2, descr1) is box4
     h.setarrayitem(box1, box2, box3, descr1)
     assert h.getarrayitem(box1, index1, descr1) is None
     assert h.getarrayitem(box1, index2, descr1) is None
Exemplo n.º 20
0
 def test_replace_box_with_const(self):
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     box3 = RefFrontendOp(3)
     c_box3 = ConstPtr(ConstPtr.value)
     h.setfield(box1, box2, descr1)
     h.setfield(box1, box3, descr2)
     h.setfield(box2, box3, descr3)
     h.replace_box(box3, c_box3)
     assert h.getfield(box1, descr1) is box2
     assert c_box3.same_constant(h.getfield(box1, descr2))
     assert c_box3.same_constant(h.getfield(box2, descr3))
Exemplo n.º 21
0
def test_virtual_adder_make_vstruct():
    b2s, b4s = [RefFrontendOp(0), RefFrontendOp(0)]
    c1s = ConstInt(111)
    storage = Storage()
    memo = ResumeDataLoopMemo(FakeMetaInterpStaticData())
    modifier = ResumeDataVirtualAdder(FakeOptimizer(), storage, storage, None,
                                      memo)
    modifier.liveboxes_from_env = {}
    modifier.liveboxes = {}
    modifier.vfieldboxes = {}
    v2 = info.StructPtrInfo(LLtypeMixin.ssize, is_virtual=True)
    b2s.set_forwarded(v2)
    v2.setfield(LLtypeMixin.adescr, b2s, c1s)
    v2.setfield(LLtypeMixin.abisdescr, b2s, c1s)
    v2.setfield(LLtypeMixin.bdescr, b2s, b4s)
    modifier.register_virtual_fields(b2s, [c1s, c1s, b4s])
    liveboxes = []
    modifier._number_virtuals(liveboxes, 0)
    dump_storage(storage, liveboxes)
    storage.rd_consts = memo.consts[:]
    storage.rd_numb = Numbering([0])
    b4t = RefFrontendOp(0)
    newboxes = _resume_remap(
        liveboxes,
        [  #b2s -- virtual
            b4s
        ],
        b4t)
    #
    NULL = ConstPtr.value
    metainterp = MyMetaInterp()
    reader = ResumeDataFakeReader(storage, newboxes, metainterp)
    assert len(reader.virtuals_cache.virtuals_ptr_cache) == 1
    b2t = reader.decode_ref(tag(0, TAGVIRTUAL))

    trace = metainterp.trace
    expected = [
        (rop.NEW, [], b2t.getref_base(), LLtypeMixin.ssize),
        (rop.SETFIELD_GC, [b2t, c1s], None, LLtypeMixin.adescr),
        (rop.SETFIELD_GC, [b2t, c1s], None, LLtypeMixin.abisdescr),
        (rop.SETFIELD_GC, [b2t, b4t], None, LLtypeMixin.bdescr),
    ]
    with CompareableConsts():
        for x, y in zip(expected, trace):
            assert x == y
    #
    ptr = b2t.getref_base()._obj.container._as_ptr()
    assert lltype.typeOf(ptr) == lltype.Ptr(LLtypeMixin.S)
    assert ptr.a == 111
    assert ptr.b == lltype.nullptr(LLtypeMixin.NODE)
Exemplo n.º 22
0
 def test_ops_dont_escape(self):
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     h.new(box1)
     h.new(box2)
     assert h.is_unescaped(box1)
     assert h.is_unescaped(box2)
     h.invalidate_caches(rop.INSTANCE_PTR_EQ, None, [box1, box2])
     assert h.is_unescaped(box1)
     assert h.is_unescaped(box2)
     h.invalidate_caches(rop.INSTANCE_PTR_NE, None, [box1, box2])
     assert h.is_unescaped(box1)
     assert h.is_unescaped(box2)
Exemplo n.º 23
0
def test_register_virtual_fields():
    b1, b2 = IntFrontendOp(0), IntFrontendOp(1)
    vbox = RefFrontendOp(2)
    modifier = ResumeDataVirtualAdder(FakeOptimizer(), None, None, None, None)
    modifier.liveboxes_from_env = {}
    modifier.liveboxes = {}
    modifier.vfieldboxes = {}
    modifier.register_virtual_fields(vbox, [b1, b2])
    assert modifier.liveboxes == {
        vbox: UNASSIGNEDVIRTUAL,
        b1: UNASSIGNED,
        b2: UNASSIGNED
    }
    assert modifier.vfieldboxes == {vbox: [b1, b2]}

    modifier = ResumeDataVirtualAdder(FakeOptimizer(), None, None, None, None)
    modifier.liveboxes_from_env = {vbox: tag(0, TAGVIRTUAL)}
    modifier.liveboxes = {}
    modifier.vfieldboxes = {}
    modifier.register_virtual_fields(vbox, [b1, b2, vbox])
    assert modifier.liveboxes == {
        b1: UNASSIGNED,
        b2: UNASSIGNED,
        vbox: tag(0, TAGVIRTUAL)
    }
    assert modifier.vfieldboxes == {vbox: [b1, b2, vbox]}
Exemplo n.º 24
0
 def test_replace_box_with_box(self):
     py.test.skip("replacing a box with another box: not supported any more")
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     box3 = RefFrontendOp(3)
     box4 = RefFrontendOp(4)
     h.setfield(box1, box2, descr1)
     h.setfield(box1, box3, descr2)
     h.setfield(box2, box3, descr3)
     h.replace_box(box1, box4)
     assert h.getfield(box4, descr1) is box2
     assert h.getfield(box4, descr2) is box3
     assert h.getfield(box2, descr3) is box3
     h.setfield(box4, box3, descr1)
     assert h.getfield(box4, descr1) is box3
Exemplo n.º 25
0
 def test_bug_missing_ignored_operations(self):
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     h.new(box1)
     h.new(box2)
     h.setfield(box1, box2, descr1)
     assert h.getfield(box1, descr1) is box2
     h.invalidate_caches(rop.STRSETITEM, None, [])
     h.invalidate_caches(rop.UNICODESETITEM, None, [])
     h.invalidate_caches(rop.SETFIELD_RAW, None, [])
     h.invalidate_caches(rop.SETARRAYITEM_RAW, None, [])
     h.invalidate_caches(rop.SETINTERIORFIELD_RAW, None, [])
     h.invalidate_caches(rop.RAW_STORE, None, [])
     assert h.is_unescaped(box1)
     assert h.is_unescaped(box2)
     assert h.getfield(box1, descr1) is box2
Exemplo n.º 26
0
 def test_ll_arraycopy_doesnt_escape_arrays(self):
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     lengthbox1 = IntFrontendOp(11)
     lengthbox2 = IntFrontendOp(12)
     h.new_array(box1, lengthbox1)
     h.new_array(box2, lengthbox2)
     h.invalidate_caches(rop.CALL_N, arraycopydescr1,
                         [None, box2, box1, index1, index1, index2])
     assert h.is_unescaped(box1)
     assert h.is_unescaped(box2)
     h.invalidate_caches(rop.CALL_N, arraycopydescr1,
                         [None, box2, box1, index1, index1,
                          InputArgInt()])
     assert not h.is_unescaped(box1)
     assert not h.is_unescaped(box2)
Exemplo n.º 27
0
    def test_heapcache_arrays(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box3 = RefFrontendOp(3)
        box4 = RefFrontendOp(4)
        assert h.getarrayitem(box1, index1, descr1) is None
        assert h.getarrayitem(box1, index1, descr2) is None
        assert h.getarrayitem(box1, index2, descr1) is None
        assert h.getarrayitem(box1, index2, descr2) is None

        h.setarrayitem(box1, index1, box2, descr1)
        assert h.getarrayitem(box1, index1, descr1) is box2
        assert h.getarrayitem(box1, index1, descr2) is None
        assert h.getarrayitem(box1, index2, descr1) is None
        assert h.getarrayitem(box1, index2, descr2) is None
        h.setarrayitem(box1, index2, box4, descr1)
        assert h.getarrayitem(box1, index1, descr1) is box2
        assert h.getarrayitem(box1, index1, descr2) is None
        assert h.getarrayitem(box1, index2, descr1) is box4
        assert h.getarrayitem(box1, index2, descr2) is None

        h.setarrayitem(box1, index1, box3, descr2)
        assert h.getarrayitem(box1, index1, descr1) is box2
        assert h.getarrayitem(box1, index1, descr2) is box3
        assert h.getarrayitem(box1, index2, descr1) is box4
        assert h.getarrayitem(box1, index2, descr2) is None

        h.setarrayitem(box1, index1, box3, descr1)
        assert h.getarrayitem(box1, index1, descr1) is box3
        assert h.getarrayitem(box1, index1, descr2) is box3
        assert h.getarrayitem(box1, index2, descr1) is box4
        assert h.getarrayitem(box1, index2, descr2) is None

        h.setarrayitem(box3, index1, box1, descr1)
        assert h.getarrayitem(box3, index1, descr1) is box1
        assert h.getarrayitem(box1, index1, descr1) is None
        assert h.getarrayitem(box1, index1, descr2) is box3
        assert h.getarrayitem(box1, index2, descr1) is box4
        assert h.getarrayitem(box1, index2, descr2) is None

        h.reset()
        assert h.getarrayitem(box1, index1, descr1) is None
        assert h.getarrayitem(box1, index1, descr2) is None
        assert h.getarrayitem(box3, index1, descr1) is None
Exemplo n.º 28
0
    def test_heapcache_read_fields_multiple_array(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box3 = RefFrontendOp(3)
        box4 = RefFrontendOp(4)
        h.getarrayitem_now_known(box1, index1, box2, descr1)
        h.getarrayitem_now_known(box3, index1, box4, descr1)
        assert h.getarrayitem(box1, index1, descr1) is box2
        assert h.getarrayitem(box1, index1, descr2) is None
        assert h.getarrayitem(box3, index1, descr1) is box4
        assert h.getarrayitem(box3, index1, descr2) is None

        h.reset()
        assert h.getarrayitem(box1, index1, descr1) is None
        assert h.getarrayitem(box1, index1, descr2) is None
        assert h.getarrayitem(box3, index1, descr1) is None
        assert h.getarrayitem(box3, index1, descr2) is None
Exemplo n.º 29
0
    def test_heapcache_read_fields_multiple(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box3 = RefFrontendOp(3)
        box4 = RefFrontendOp(4)
        h.getfield_now_known(box1, descr1, box2)
        h.getfield_now_known(box3, descr1, box4)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is None
        assert h.getfield(box3, descr1) is box4
        assert h.getfield(box3, descr2) is None

        h.reset()
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is None
        assert h.getfield(box3, descr1) is None
        assert h.getfield(box3, descr2) is None
Exemplo n.º 30
0
    def test_nonstandard_virtualizable_allocation(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        h.new(box1)
        # we've seen the allocation, so it's not the virtualizable
        assert h.is_known_nonstandard_virtualizable(box1)

        h.reset()
        assert not h.is_known_nonstandard_virtualizable(box1)
Exemplo n.º 31
0
 def InputArgRef(a):
     i = RefFrontendOp(0)
     i.setref_base(a)
     return i