[pypy-svn] r66575 - in pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp: . test

arigo at codespeak.net arigo at codespeak.net
Fri Jul 24 13:34:05 CEST 2009


Author: arigo
Date: Fri Jul 24 13:34:05 2009
New Revision: 66575

Added:
   pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_specnode.py   (contents, props changed)
Modified:
   pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/specnode.py
Log:
Add the method 'extract_runtime_data' to VirtualInstanceSpecNode,
and write tests for specnode.py.


Modified: pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/specnode.py
==============================================================================
--- pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/specnode.py	(original)
+++ pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/specnode.py	Fri Jul 24 13:34:05 2009
@@ -5,9 +5,6 @@
     __metaclass__ = extendabletype     # extended in optimizefindnode.py
     __slots__ = ()
 
-    def extract_runtime_data(self, cpu, valuebox, resultlist):
-        resultlist.append(valuebox)
-
 
 class NotSpecNode(SpecNode):
     __slots__ = ()
@@ -15,6 +12,9 @@
     def equals(self, other):
         return isinstance(other, NotSpecNode)
 
+    def extract_runtime_data(self, cpu, valuebox, resultlist):
+        resultlist.append(valuebox)
+
 
 prebuiltNotSpecNode = NotSpecNode()
 
@@ -36,6 +36,14 @@
                 return False
         return True
 
+    def extract_runtime_data(self, cpu, valuebox, resultlist):
+        from pypy.jit.metainterp import executor, history, resoperation
+        for ofs, subspecnode in self.fields:
+            assert isinstance(ofs, history.AbstractDescr)
+            fieldbox = executor.execute(cpu, resoperation.rop.GETFIELD_GC,
+                                        [valuebox], ofs)
+            subspecnode.extract_runtime_data(cpu, fieldbox, resultlist)
+
 
 def equals_specnodes(specnodes1, specnodes2):
     assert len(specnodes1) == len(specnodes2)

Added: pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_specnode.py
==============================================================================
--- (empty file)
+++ pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_specnode.py	Fri Jul 24 13:34:05 2009
@@ -0,0 +1,39 @@
+from pypy.rpython.lltypesystem import lltype, llmemory
+from pypy.jit.metainterp.history import AbstractDescr, BoxPtr, ConstInt
+from pypy.jit.metainterp.specnode import prebuiltNotSpecNode
+from pypy.jit.metainterp.specnode import VirtualInstanceSpecNode
+from pypy.jit.metainterp.specnode import equals_specnodes
+from pypy.jit.metainterp.test.test_optimizefindnode import LLtypeMixin
+
+def _get_vspecnode(classnum=123):
+    return VirtualInstanceSpecNode(ConstInt(classnum),
+                         [(LLtypeMixin.valuedescr, prebuiltNotSpecNode),
+                          (LLtypeMixin.nextdescr,  prebuiltNotSpecNode)])
+
+def test_equals_specnodes():
+    assert equals_specnodes([prebuiltNotSpecNode, prebuiltNotSpecNode],
+                            [prebuiltNotSpecNode, prebuiltNotSpecNode])
+    vspecnode1 = _get_vspecnode(1)
+    vspecnode2 = _get_vspecnode(2)
+    assert equals_specnodes([vspecnode1], [vspecnode1])
+    assert not equals_specnodes([vspecnode1], [vspecnode2])
+    assert not equals_specnodes([vspecnode1], [prebuiltNotSpecNode])
+    assert not equals_specnodes([prebuiltNotSpecNode], [vspecnode2])
+
+def test_extract_runtime_data_1():
+    res = []
+    prebuiltNotSpecNode.extract_runtime_data("cpu", "box1", res)
+    prebuiltNotSpecNode.extract_runtime_data("cpu", "box2", res)
+    assert res == ["box1", "box2"]
+
+def test_extract_runtime_data_2():
+    structure = lltype.malloc(LLtypeMixin.NODE)
+    structure.value = 515
+    structure.next = lltype.malloc(LLtypeMixin.NODE)
+    structbox = BoxPtr(lltype.cast_opaque_ptr(llmemory.GCREF, structure))
+    vspecnode = _get_vspecnode()
+    res = []
+    vspecnode.extract_runtime_data(LLtypeMixin.cpu, structbox, res)
+    assert len(res) == 2
+    assert res[0].value == structure.value
+    assert res[1].value._obj.container._as_ptr() == structure.next



More information about the Pypy-commit mailing list