[pypy-svn] r26401 - in pypy/dist/pypy/translator/cl: . test
sanxiyn at codespeak.net
sanxiyn at codespeak.net
Thu Apr 27 08:25:17 CEST 2006
Author: sanxiyn
Date: Thu Apr 27 08:25:13 2006
New Revision: 26401
Modified:
pypy/dist/pypy/translator/cl/gencl.py
pypy/dist/pypy/translator/cl/test/test_cltrans_oo.py
Log:
(nik, dialtone, sanxiyn)
Add a failing test, implement runtimenew, declare class before
representing it as symbol, and...
Modified: pypy/dist/pypy/translator/cl/gencl.py
==============================================================================
--- pypy/dist/pypy/translator/cl/gencl.py (original)
+++ pypy/dist/pypy/translator/cl/gencl.py Thu Apr 27 08:25:13 2006
@@ -3,7 +3,7 @@
from pypy.tool.udir import udir
from pypy.objspace.flow.model import Constant
from pypy.translator.translator import graphof
-from pypy.rpython.ootypesystem.ootype import dynamicType, oodowncast, List, Record, Instance, _static_meth, _meth, ROOT
+from pypy.rpython.ootypesystem.ootype import dynamicType, oodowncast, List, Record, Instance, _class, _static_meth, _meth, ROOT
from pypy.rpython.ootypesystem.rclass import OBJECT
from pypy.translator.cl.clrepr import repr_arg, repr_var, repr_const, repr_fun_name, repr_class_name
@@ -86,6 +86,9 @@
else:
raise NotImplementedError()
+ def op_runtimenew(self, result, arg):
+ yield "(setf %s (make-instance %s))" % (result, arg)
+
def op_instanceof(self, result, arg, clsname):
yield "(setf %s (typep %s %s))" % (result, arg, clsname)
@@ -199,8 +202,11 @@
const_declaration.append("(setf %s (make-instance %s))" % (name, cls))
fields = INST._allfields()
for fieldname in fields:
- fieldvalue = repr_const(getattr(inst, fieldname))
- const_declaration.append("(setf (slot-value %s '%s) %s)" % (name, fieldname, fieldvalue))
+ fieldvalue = getattr(inst, fieldname)
+ if isinstance(fieldvalue, _class):
+ self.declare_class(fieldvalue._INSTANCE)
+ fieldvaluerepr = repr_const(getattr(inst, fieldname))
+ const_declaration.append("(setf (slot-value %s '%s) %s)" % (name, fieldname, fieldvaluerepr))
const_declaration = "\n".join(const_declaration)
self.declarations.append(const_declaration)
self.constcount += 1
Modified: pypy/dist/pypy/translator/cl/test/test_cltrans_oo.py
==============================================================================
--- pypy/dist/pypy/translator/cl/test/test_cltrans_oo.py (original)
+++ pypy/dist/pypy/translator/cl/test/test_cltrans_oo.py Thu Apr 27 08:25:13 2006
@@ -76,6 +76,27 @@
assert cl_dynamic_class(True) == 1
assert cl_dynamic_class(False) == 2
+def test_instance():
+ py.test.skip("TODO")
+ class Foo:
+ value = 0
+ class Bar(Foo):
+ value = 1
+ class Baz(Foo):
+ value = 2
+ def pick_class(flag):
+ if flag:
+ return Bar
+ else:
+ return Baz
+ def dynamic_instance(flag):
+ cls = pick_class(flag)
+ obj = cls()
+ return obj.value
+ cl_dynamic_instance = make_cl_func(dynamic_instance, [bool])
+ assert cl_dynamic_instance(True) == 1
+ assert cl_dynamic_instance(False) == 2
+
def test_list_length():
def list_length_one(number):
lst = [number]
More information about the Pypy-commit
mailing list