Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r70554:0d99c4a82b27
Date: 2014-04-11 16:34 +0200
http://bitbucket.org/pypy/pypy/changeset/0d99c4a82b27/

Log:    Fix the test in 43da018e7015: consistently call new methods on the
        metainterp from both the opimpl_xxx and from resume.py

diff --git a/rpython/jit/metainterp/pyjitpl.py 
b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -387,24 +387,17 @@
 
     @arguments("descr")
     def opimpl_new(self, sizedescr):
-        resbox = self.execute_with_descr(rop.NEW, sizedescr)
-        self.metainterp.heapcache.new(resbox)
-        return resbox
+        return self.metainterp.execute_new(sizedescr)
 
     @arguments("descr")
     def opimpl_new_with_vtable(self, sizedescr):
         cpu = self.metainterp.cpu
         cls = heaptracker.descr2vtable(cpu, sizedescr)
-        resbox = self.execute(rop.NEW_WITH_VTABLE, ConstInt(cls))
-        self.metainterp.heapcache.new(resbox)
-        self.metainterp.heapcache.class_now_known(resbox)
-        return resbox
+        return self.metainterp.execute_new_with_vtable(ConstInt(cls))
 
     @arguments("box", "descr")
     def opimpl_new_array(self, lengthbox, itemsizedescr):
-        resbox = self.execute_with_descr(rop.NEW_ARRAY, itemsizedescr, 
lengthbox)
-        self.metainterp.heapcache.new_array(resbox, lengthbox)
-        return resbox
+        return self.metainterp.execute_new_array(itemsizedescr, lengthbox)
 
     @specialize.arg(1)
     def _do_getarrayitem_gc_any(self, op, arraybox, indexbox, arraydescr):
@@ -467,10 +460,8 @@
     @arguments("box", "box", "box", "descr")
     def _opimpl_setarrayitem_gc_any(self, arraybox, indexbox, itembox,
                                     arraydescr):
-        self.execute_with_descr(rop.SETARRAYITEM_GC, arraydescr, arraybox,
-                                indexbox, itembox)
-        self.metainterp.heapcache.setarrayitem(
-                arraybox, indexbox, itembox, arraydescr)
+        self.metainterp.execute_setarrayitem_gc(arraydescr, arraybox,
+                                                indexbox, itembox)
 
     opimpl_setarrayitem_gc_i = _opimpl_setarrayitem_gc_any
     opimpl_setarrayitem_gc_r = _opimpl_setarrayitem_gc_any
@@ -623,21 +614,22 @@
         tobox = self.metainterp.heapcache.getfield(box, fielddescr)
         if tobox is valuebox:
             return
-        # The following test is disabled because buggy.  It is supposed
+        self.metainterp.execute_setfield_gc(fielddescr, box, valuebox)
+        # The following logic is disabled because buggy.  It is supposed
         # to be: not(we're writing null into a freshly allocated object)
         # but the bug is that is_unescaped() can be True even after the
         # field cache is cleared --- see test_ajit:test_unescaped_write_zero
-        if 1:  # tobox is not None or not 
self.metainterp.heapcache.is_unescaped(box) or not isinstance(valuebox, Const) 
or valuebox.nonnull():
-            self.execute_with_descr(rop.SETFIELD_GC, fielddescr, box, valuebox)
-        self.metainterp.heapcache.setfield(box, valuebox, fielddescr)
+        #
+        # if tobox is not None or not 
self.metainterp.heapcache.is_unescaped(box) or not isinstance(valuebox, Const) 
or valuebox.nonnull():
+        #   self.execute_with_descr(rop.SETFIELD_GC, fielddescr, box, valuebox)
+        # self.metainterp.heapcache.setfield(box, valuebox, fielddescr)
     opimpl_setfield_gc_i = _opimpl_setfield_gc_any
     opimpl_setfield_gc_r = _opimpl_setfield_gc_any
     opimpl_setfield_gc_f = _opimpl_setfield_gc_any
 
     @arguments("box", "box", "box", "descr")
     def _opimpl_setinteriorfield_gc_any(self, array, index, value, descr):
-        self.execute_with_descr(rop.SETINTERIORFIELD_GC, descr,
-                                array, index, value)
+        self.metainterp.execute_setinteriorfield_gc(descr, array, index, value)
     opimpl_setinteriorfield_gc_i = _opimpl_setinteriorfield_gc_any
     opimpl_setinteriorfield_gc_f = _opimpl_setinteriorfield_gc_any
     opimpl_setinteriorfield_gc_r = _opimpl_setinteriorfield_gc_any
@@ -664,8 +656,8 @@
 
     @arguments("box", "box", "box", "descr")
     def _opimpl_raw_store(self, addrbox, offsetbox, valuebox, arraydescr):
-        self.execute_with_descr(rop.RAW_STORE, arraydescr,
-                                addrbox, offsetbox, valuebox)
+        self.metainterp.execute_raw_store(arraydescr,
+                                          addrbox, offsetbox, valuebox)
     opimpl_raw_store_i = _opimpl_raw_store
     opimpl_raw_store_f = _opimpl_raw_store
 
@@ -1891,6 +1883,41 @@
         self.attach_debug_info(op)
         return resbox
 
+    def execute_new_with_vtable(self, known_class):
+        resbox = self.execute_and_record(rop.NEW_WITH_VTABLE, None,
+                                         known_class)
+        self.heapcache.new(resbox)
+        self.heapcache.class_now_known(resbox)
+        return resbox
+
+    def execute_new(self, typedescr):
+        resbox = self.execute_and_record(rop.NEW, typedescr)
+        self.heapcache.new(resbox)
+        return resbox
+
+    def execute_new_array(self, itemsizedescr, lengthbox):
+        resbox = self.execute_and_record(rop.NEW_ARRAY, itemsizedescr,
+                                         lengthbox)
+        self.heapcache.new_array(resbox, lengthbox)
+        return resbox
+
+    def execute_setfield_gc(self, fielddescr, box, valuebox):
+        self.execute_and_record(rop.SETFIELD_GC, fielddescr, box, valuebox)
+        self.heapcache.setfield(box, valuebox, fielddescr)
+
+    def execute_setarrayitem_gc(self, arraydescr, arraybox, indexbox, itembox):
+        self.execute_and_record(rop.SETARRAYITEM_GC, arraydescr,
+                                arraybox, indexbox, itembox)
+        self.heapcache.setarrayitem(arraybox, indexbox, itembox, arraydescr)
+
+    def execute_setinteriorfield_gc(self, descr, array, index, value):
+        self.execute_and_record(rop.SETINTERIORFIELD_GC, descr,
+                                array, index, value)
+
+    def execute_raw_store(self, arraydescr, addrbox, offsetbox, valuebox):
+        self.execute_and_record(rop.RAW_STORE, arraydescr,
+                                addrbox, offsetbox, valuebox)
+
 
     def attach_debug_info(self, op):
         if (not we_are_translated() and op is not None
diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py
--- a/rpython/jit/metainterp/resume.py
+++ b/rpython/jit/metainterp/resume.py
@@ -954,15 +954,14 @@
         return virtualizable_boxes, virtualref_boxes
 
     def allocate_with_vtable(self, known_class):
-        return self.metainterp.execute_and_record(rop.NEW_WITH_VTABLE,
-                                                  None, known_class)
+        return self.metainterp.execute_new_with_vtable(known_class)
 
     def allocate_struct(self, typedescr):
-        return self.metainterp.execute_and_record(rop.NEW, typedescr)
+        return self.metainterp.execute_new(typedescr)
 
     def allocate_array(self, length, arraydescr):
-        return self.metainterp.execute_and_record(rop.NEW_ARRAY,
-                                                  arraydescr, ConstInt(length))
+        lengthbox = ConstInt(length)
+        return self.metainterp.execute_new_array(arraydescr, lengthbox)
 
     def allocate_raw_buffer(self, size):
         cic = self.metainterp.staticdata.callinfocollection
@@ -1034,8 +1033,7 @@
         else:
             kind = INT
         fieldbox = self.decode_box(fieldnum, kind)
-        self.metainterp.execute_and_record(rop.SETFIELD_GC, descr,
-                                           structbox, fieldbox)
+        self.metainterp.execute_setfield_gc(descr, structbox, fieldbox)
 
     def setinteriorfield(self, index, array, fieldnum, descr):
         if descr.is_pointer_field():
@@ -1045,8 +1043,8 @@
         else:
             kind = INT
         fieldbox = self.decode_box(fieldnum, kind)
-        self.metainterp.execute_and_record(rop.SETINTERIORFIELD_GC, descr,
-                                           array, ConstInt(index), fieldbox)
+        self.metainterp.execute_setinteriorfield_gc(descr, array,
+                                                    ConstInt(index), fieldbox)
 
     def setarrayitem_int(self, arraybox, index, fieldnum, arraydescr):
         self._setarrayitem(arraybox, index, fieldnum, arraydescr, INT)
@@ -1059,9 +1057,8 @@
 
     def _setarrayitem(self, arraybox, index, fieldnum, arraydescr, kind):
         itembox = self.decode_box(fieldnum, kind)
-        self.metainterp.execute_and_record(rop.SETARRAYITEM_GC,
-                                           arraydescr, arraybox,
-                                           ConstInt(index), itembox)
+        self.metainterp.execute_setarrayitem_gc(arraydescr, arraybox,
+                                                ConstInt(index), itembox)
 
     def setrawbuffer_item(self, bufferbox, fieldnum, offset, arraydescr):
         if arraydescr.is_array_of_pointers():
@@ -1071,8 +1068,8 @@
         else:
             kind = INT
         itembox = self.decode_box(fieldnum, kind)
-        return self.metainterp.execute_and_record(rop.RAW_STORE, arraydescr, 
bufferbox,
-                                                  ConstInt(offset), itembox)
+        self.metainterp.execute_raw_store(arraydescr, bufferbox,
+                                          ConstInt(offset), itembox)
 
     def decode_int(self, tagged):
         return self.decode_box(tagged, INT)
diff --git a/rpython/jit/metainterp/test/test_resume.py 
b/rpython/jit/metainterp/test/test_resume.py
--- a/rpython/jit/metainterp/test/test_resume.py
+++ b/rpython/jit/metainterp/test/test_resume.py
@@ -93,6 +93,32 @@
             self.resboxes.append(resbox)
         return resbox
 
+    def execute_new_with_vtable(self, known_class):
+        return self.execute_and_record(rop.NEW_WITH_VTABLE, None,
+                                       known_class)
+
+    def execute_new(self, typedescr):
+        return self.execute_and_record(rop.NEW, typedescr)
+
+    def execute_new_array(self, itemsizedescr, lengthbox):
+        return self.execute_and_record(rop.NEW_ARRAY, itemsizedescr,
+                                       lengthbox)
+
+    def execute_setfield_gc(self, fielddescr, box, valuebox):
+        self.execute_and_record(rop.SETFIELD_GC, fielddescr, box, valuebox)
+
+    def execute_setarrayitem_gc(self, arraydescr, arraybox, indexbox, itembox):
+        self.execute_and_record(rop.SETARRAYITEM_GC, arraydescr,
+                                arraybox, indexbox, itembox)
+
+    def execute_setinteriorfield_gc(self, descr, array, index, value):
+        self.execute_and_record(rop.SETINTERIORFIELD_GC, descr,
+                                array, index, value)
+
+    def execute_raw_store(self, arraydescr, addrbox, offsetbox, valuebox):
+        self.execute_and_record(rop.RAW_STORE, arraydescr,
+                                addrbox, offsetbox, valuebox)
+
 S = lltype.GcStruct('S')
 gcref1 = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(S))
 gcref2 = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(S))
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to