[pypy-svn] r53340 - in pypy/branch/less-meta-instances/pypy/rpython: ootypesystem test

arigo at codespeak.net arigo at codespeak.net
Fri Apr 4 18:55:43 CEST 2008


Author: arigo
Date: Fri Apr  4 18:55:41 2008
New Revision: 53340

Modified:
   pypy/branch/less-meta-instances/pypy/rpython/ootypesystem/rbuiltin.py
   pypy/branch/less-meta-instances/pypy/rpython/test/test_normalizecalls.py
   pypy/branch/less-meta-instances/pypy/rpython/test/test_rbuiltin.py
Log:
Fix instantiate().  Fix some other tests.


Modified: pypy/branch/less-meta-instances/pypy/rpython/ootypesystem/rbuiltin.py
==============================================================================
--- pypy/branch/less-meta-instances/pypy/rpython/ootypesystem/rbuiltin.py	(original)
+++ pypy/branch/less-meta-instances/pypy/rpython/ootypesystem/rbuiltin.py	Fri Apr  4 18:55:41 2008
@@ -98,17 +98,12 @@
     else:
         r_instance = hop.s_result.rtyper_makerepr(hop.rtyper)
         INSTANCE = r_instance.lowleveltype
-        c_instance = hop.inputconst(ootype.Void, INSTANCE)
-        v_cls = hop.inputarg(hop.args_r[0], arg=0)
-        v_obj = hop.gendirectcall(ll_instantiate, c_instance, v_cls)
+        class_repr = rclass.get_type_repr(hop.rtyper)
+        v_cls = hop.inputarg(class_repr, arg=0)
+        v_obj = hop.genop('runtimenew', [v_cls], resulttype=ootype.ROOT)
         v_instance = hop.genop('oodowncast', [v_obj], resulttype=hop.r_result.lowleveltype)
-        c_meta = hop.inputconst(ootype.Void, "meta")
-        hop.genop("oosetfield", [v_instance, c_meta, v_cls], resulttype=ootype.Void)
         return v_instance
 
-def ll_instantiate(INST, C):
-    return ootype.runtimenew(C.class_)
-
 BUILTIN_TYPER = {}
 BUILTIN_TYPER[ootype.new] = rtype_new
 BUILTIN_TYPER[ootype.oonewarray] = rtype_oonewarray

Modified: pypy/branch/less-meta-instances/pypy/rpython/test/test_normalizecalls.py
==============================================================================
--- pypy/branch/less-meta-instances/pypy/rpython/test/test_normalizecalls.py	(original)
+++ pypy/branch/less-meta-instances/pypy/rpython/test/test_normalizecalls.py	Fri Apr  4 18:55:41 2008
@@ -219,6 +219,7 @@
     def test_add_more_subclasses(self):
         from pypy.rpython import rclass
         from pypy.rpython.lltypesystem.rclass import ll_issubclass
+        from pypy.rpython.lltypesystem.rclass import CLASSTYPE
         class Sub3(PBase):
             def newmethod(self):
                 return 3
@@ -232,9 +233,9 @@
             bk = translator.annotator.bookkeeper
             rtyper = translator.rtyper
             base_classdef = bk.getuniqueclassdef(PBase)
-            base_vtable = rclass.getclassrepr(rtyper, base_classdef).getruntime()
+            base_vtable = rclass.getclassrepr(rtyper, base_classdef).getruntime(CLASSTYPE)
             sub3_classdef = bk.getuniqueclassdef(Sub3)
-            sub3_vtable = rclass.getclassrepr(rtyper, sub3_classdef).getruntime()
+            sub3_vtable = rclass.getclassrepr(rtyper, sub3_classdef).getruntime(CLASSTYPE)
             assert ll_issubclass(sub3_vtable, base_vtable)
             assert not ll_issubclass(base_vtable, sub3_vtable)
 

Modified: pypy/branch/less-meta-instances/pypy/rpython/test/test_rbuiltin.py
==============================================================================
--- pypy/branch/less-meta-instances/pypy/rpython/test/test_rbuiltin.py	(original)
+++ pypy/branch/less-meta-instances/pypy/rpython/test/test_rbuiltin.py	Fri Apr  4 18:55:41 2008
@@ -530,24 +530,19 @@
         
 class TestOOtype(BaseTestRbuiltin, OORtypeMixin):
 
-    def test_instantiate_meta(self):
-        class A:
-            pass
-        def f():
-            return instantiate(A)
-        res = self.interpret(f, [])
-        assert res.meta # check that it's not null
-
     def test_instantiate_multiple_meta(self):
         class A:
-            pass
+            x = 2
         class B(A):
-            pass
+            x = 3
+        def do_stuff(cls):
+            return cls.x
         def f(i):
             if i == 1:
                 cls = A
             else:
                 cls = B
+            do_stuff(cls)
             return instantiate(cls)
         res = self.interpret(f, [1])
-        assert res.meta # check that it's not null
+        assert res.getmeta() # check that it exists



More information about the Pypy-commit mailing list