def test_known_classes(): cls = FakeClass() box1 = InputArgRef() box1.set_forwarded(InstancePtrInfo(known_class=cls)) box2 = InputArgRef() box3 = InputArgRef() optimizer = FakeOptimizer() numb_state = NumberingState(4) numb_state.append_int(1) # size of resume block liveboxes = [InputArgInt(), box2, box1, box3] serialize_optimizer_knowledge(optimizer, numb_state, liveboxes, {}, None) assert unpack_numbering( numb_state.create_numbering()) == [1, 0b010000, 0, 0, 0] rbox1 = InputArgRef() rbox2 = InputArgRef() rbox3 = InputArgRef() after_optimizer = FakeOptimizer(cpu=FakeCPU({rbox1: cls})) deserialize_optimizer_knowledge(after_optimizer, FakeStorage(numb_state.create_numbering()), [InputArgInt(), rbox2, rbox1, rbox3], liveboxes) assert box1 in after_optimizer.constant_classes assert box2 not in after_optimizer.constant_classes assert box3 not in after_optimizer.constant_classes
def test_virtual(self): loop = """ [p1, p2, i3] p0 = new_with_vtable(descr=simpledescr) setfield_gc(p0, i3, descr=simplevalue) jump(p0, p0, i3) """ es, loop, preamble = self.optimize(loop) vs = es.virtual_state assert vs.state[0] is vs.state[1] assert isinstance(vs.state[0], VirtualStateInfo) assert isinstance(vs.state[0].fieldstate[0], NotVirtualStateInfo) assert vs.state[0].fieldstate[0].level == LEVEL_UNKNOWN assert vs.numnotvirtuals == 1 p = InputArgRef() i = InputArgInt() ptrinfo = info.StructPtrInfo(self.nodesize, is_virtual=True) ptrinfo._fields = [i] p.set_forwarded(ptrinfo) vs.make_inputargs([p, p, i], FakeOptimizer())