[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