[pypy-svn] r23053 - in pypy/dist/pypy/rpython: . test

pedronis at codespeak.net pedronis at codespeak.net
Sun Feb 5 21:44:58 CET 2006


Author: pedronis
Date: Sun Feb  5 21:44:57 2006
New Revision: 23053

Modified:
   pypy/dist/pypy/rpython/rgenop.py
   pypy/dist/pypy/rpython/test/test_rgenop.py
Log:
rtype void constant construction as it is spelled right now.




Modified: pypy/dist/pypy/rpython/rgenop.py
==============================================================================
--- pypy/dist/pypy/rpython/rgenop.py	(original)
+++ pypy/dist/pypy/rpython/rgenop.py	Sun Feb  5 21:44:57 2006
@@ -218,12 +218,17 @@
 
 # annotations
 from pypy.annotation import model as annmodel
+
+s_ConstOrVar = annmodel.SomeExternalObject(flowmodel.Variable)
+s_Link = annmodel.SomeExternalObject(flowmodel.Link)
+s_LinkPair = annmodel.SomePtr(lltype.Ptr(LINKPAIR))
+
 setannotation(initblock, None)
-setannotation(geninputarg, annmodel.SomeExternalObject(flowmodel.Variable))
-setannotation(genop, annmodel.SomeExternalObject(flowmodel.Variable))
-setannotation(genconst, annmodel.SomeExternalObject(flowmodel.Variable))
-setannotation(closeblock1, annmodel.SomeExternalObject(flowmodel.Link))
-setannotation(closeblock2, annmodel.SomePtr(lltype.Ptr(LINKPAIR)))
+setannotation(geninputarg, s_ConstOrVar)
+setannotation(genop, s_ConstOrVar)
+setannotation(genconst, s_ConstOrVar)
+setannotation(closeblock1, s_Link)
+setannotation(closeblock2, s_LinkPair)
 setannotation(closelink, None)
 setannotation(closereturnlink, None)
 
@@ -236,3 +241,19 @@
 setspecialize(closeblock2)
 setspecialize(closelink)
 setspecialize(closereturnlink)
+
+# XXX(for now) void constant constructors
+setannotation(constFieldName, s_ConstOrVar)
+setannotation(constTYPE, s_ConstOrVar)
+setannotation(placeholder, s_ConstOrVar)
+
+def set_specialize_void_constant_constructor(func):
+    # for now
+    def specialize_as_constant(hop):
+        llvalue = func(hop.args_s[0].const)
+        return hop.inputconst(lltype.typeOf(llvalue), llvalue)
+    func.specialize = specialize_as_constant
+
+set_specialize_void_constant_constructor(placeholder)
+set_specialize_void_constant_constructor(constFieldName)
+set_specialize_void_constant_constructor(constTYPE)

Modified: pypy/dist/pypy/rpython/test/test_rgenop.py
==============================================================================
--- pypy/dist/pypy/rpython/test/test_rgenop.py	(original)
+++ pypy/dist/pypy/rpython/test/test_rgenop.py	Sun Feb  5 21:44:57 2006
@@ -118,4 +118,28 @@
     assert res == 1
     res = runblock(blockcontainer, [7])
     assert res == 5040
-    
+
+def test_rtype_void_constant_construction():
+    def fieldname_foo():
+        return constFieldName("foo")
+    res = interpret(fieldname_foo, [])
+    c = from_opaque_object(res)
+    assert isinstance(c, flowmodel.Constant)
+    assert c.concretetype == lltype.Void
+    assert c.value == "foo"
+
+    def type_Signed():
+        return constTYPE(lltype.Signed)
+    res = interpret(type_Signed, [])
+    c = from_opaque_object(res)
+    assert isinstance(c, flowmodel.Constant)
+    assert c.concretetype == lltype.Void
+    assert c.value == lltype.Signed
+
+    def dummy():
+        return placeholder(None)
+    res = interpret(dummy, [])
+    c = from_opaque_object(res)
+    assert isinstance(c, flowmodel.Constant)
+    assert c.concretetype == lltype.Void
+    assert c.value == None



More information about the Pypy-commit mailing list