[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