[pypy-svn] r26604 - pypy/dist/pypy/translator/cl

sanxiyn at codespeak.net sanxiyn at codespeak.net
Sun Apr 30 16:56:04 CEST 2006


Author: sanxiyn
Date: Sun Apr 30 16:56:01 2006
New Revision: 26604

Modified:
   pypy/dist/pypy/translator/cl/gencl.py
Log:
Put asserts and fix a bug exposed


Modified: pypy/dist/pypy/translator/cl/gencl.py
==============================================================================
--- pypy/dist/pypy/translator/cl/gencl.py	(original)
+++ pypy/dist/pypy/translator/cl/gencl.py	Sun Apr 30 16:56:01 2006
@@ -3,7 +3,7 @@
 from pypy.tool.udir import udir
 from pypy.objspace.flow.model import Constant, c_last_exception
 from pypy.translator.translator import graphof
-from pypy.rpython.ootypesystem.ootype import dynamicType, oodowncast, Instance, _class, _static_meth, _meth, ROOT
+from pypy.rpython.ootypesystem.ootype import dynamicType, oodowncast, Record, Instance, _class, _static_meth, _meth, ROOT
 from pypy.rpython.ootypesystem.rclass import OBJECT
 from pypy.translator.cl.clrepr import clrepr
 from pypy.translator.cl.opformatter import OpFormatter
@@ -42,8 +42,18 @@
                 return self.declare_constant_instance(arg)
         return clrepr(arg)
 
+    def declare_any(self, cls):
+        if isinstance(cls, Record):
+            return self.declare_struct(cls)
+        if isinstance(cls, Instance):
+            if self.is_exception_instance(cls):
+                return self.declare_exception(cls)
+            else:
+                return self.declare_class(cls)
+        raise NotImplementedError("cannot declare %s" % (cls,))
+
     def declare_struct(self, cls):
-        # cls is Record
+        assert isinstance(cls, Record)
         if cls in self.declarations:
             return self.declarations[cls][0]
         name = "struct" + str(self.structcount)
@@ -55,7 +65,8 @@
         return name
 
     def declare_class(self, cls):
-        # cls is Instance
+        assert isinstance(cls, Instance)
+        assert not self.is_exception_instance(cls)
         if cls in self.declarations:
             return self.declarations[cls][0]
         name = clrepr(cls._name, symbol=True)
@@ -78,7 +89,7 @@
         return name
 
     def declare_exception(self, cls):
-        # cls is Instance
+        assert isinstance(cls, Instance)
         assert self.is_exception_instance(cls)
         if cls in self.declarations:
             return self.declarations[cls][0]
@@ -109,7 +120,7 @@
         for fieldname in fields:
             fieldvalue = getattr(inst, fieldname)
             if isinstance(fieldvalue, _class):
-                self.declare_class(fieldvalue._INSTANCE)
+                self.declare_any(fieldvalue._INSTANCE)
             fieldvaluerepr = clrepr(getattr(inst, fieldname))
             ### XXX
             const_declaration.append("(setf (slot-value %s '%s) %s)" % (clrepr(name, True),



More information about the Pypy-commit mailing list