[pypy-svn] r28936 - pypy/dist/pypy/rpython/ootypesystem

fijal at codespeak.net fijal at codespeak.net
Mon Jun 19 10:38:19 CEST 2006


Author: fijal
Date: Mon Jun 19 10:38:17 2006
New Revision: 28936

Modified:
   pypy/dist/pypy/rpython/ootypesystem/bltregistry.py
Log:
Fixed automatic flowing of SomePBC arguments when passed to a method of SomeExternalBuiltin.


Modified: pypy/dist/pypy/rpython/ootypesystem/bltregistry.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/bltregistry.py	(original)
+++ pypy/dist/pypy/rpython/ootypesystem/bltregistry.py	Mon Jun 19 10:38:17 2006
@@ -35,9 +35,13 @@
     def __call__(self, *args):
         #for i in xrange(len(args)):
         #    assert getbookkeeper().valueoftype(self.args[i]).contains(args[i])
-        if self.retval is None:
-            return None
-        return getbookkeeper().valueoftype(self.retval)
+        #if self.retval is None:
+        #    return None
+        for i in args:
+            if isinstance(i, annmodel.SomePBC):
+                bookkeeper = getbookkeeper()
+                bookkeeper.pbc_call(i, bookkeeper.build_args("simple_call", ()))
+        return getbookkeeper().immutablevalue(self.retval)
 
 class ExternalType(ootype.OOType):
     class_dict = {}
@@ -59,7 +63,7 @@
     
     def update_fields(self, _fields):
         for i, val in _fields.iteritems():
-            self._fields[i] = getbookkeeper().valueoftype(val)
+            self._fields[i] = getbookkeeper().immutablevbalue(val)
     
     def _is_compatible(type2):
         return type(type2) is ExternalType
@@ -69,11 +73,8 @@
     def update_methods(self, _methods):
         _signs = {}
         for i, val in _methods.iteritems():
-            if val[1] is None:
-                retval = None
-            else:
-                retval = getbookkeeper().valueoftype(val[1])
-            _signs[i] = tuple([getbookkeeper().valueoftype(j) for j in val[0]]), retval
+            retval = getbookkeeper().immutablevalue(val[1])
+            _signs[i] = tuple([getbookkeeper().immutablevalue(j) for j in val[0]]), retval
             next = annmodel.SomeBuiltin(Analyzer(i, val), s_self = annmodel.SomeExternalBuiltin(self), methodname = i)
             next.const = True
             self._fields[i] = next



More information about the Pypy-commit mailing list