[pypy-svn] r32248 - pypy/branch/more-gckinds/pypy/translator/c

mwh at codespeak.net mwh at codespeak.net
Wed Sep 13 11:41:35 CEST 2006


Author: mwh
Date: Wed Sep 13 11:41:33 2006
New Revision: 32248

Modified:
   pypy/branch/more-gckinds/pypy/translator/c/funcgen.py
Log:
genc support for len(interior-fixed-size-array)
i think the four remaining failing tests do things that are not allowed in the
new world.


Modified: pypy/branch/more-gckinds/pypy/translator/c/funcgen.py
==============================================================================
--- pypy/branch/more-gckinds/pypy/translator/c/funcgen.py	(original)
+++ pypy/branch/more-gckinds/pypy/translator/c/funcgen.py	Wed Sep 13 11:41:33 2006
@@ -474,7 +474,7 @@
         return self.generic_set(op, '%s[%s]' % (items,
                                                 self.expr(op.args[1])))
 
-    def interior_expr(self, args):
+    def interior_expr(self, args, rettype=False):
         TYPE = args[0].concretetype.TO
         expr = '(*(' + self.expr(args[0]) + '))'
         for arg in args[1:]:
@@ -489,7 +489,10 @@
                 else:
                     expr = '(%s)[%s]'%(expr, self.expr(arg))
                 TYPE = TYPE.OF
-        return expr
+        if rettype:
+            return expr, TYPE
+        else:
+            return expr
 
     def OP_GETINTERIORFIELD(self, op):
         return self.generic_get(op, self.interior_expr(op.args))
@@ -498,8 +501,12 @@
         return self.generic_set(op, self.interior_expr(op.args[:-1]))
 
     def OP_GETINTERIORARRAYSIZE(self, op):
-        expr = self.interior_expr(op.args)
-        return '%s = %s.length;'%(self.expr(op.result), expr)
+        expr, ARRAY = self.interior_expr(op.args, True)
+        if isinstance(ARRAY, FixedSizeArray):
+            return '%s = %d;'%(self.expr(op.result), ARRAY.length)
+        else:
+            assert isinstance(ARRAY, Array)
+            return '%s = %s.length;'%(self.expr(op.result), expr)
 
     #OP_SETINTERIORFIELD = OP_BARE_SETINTERIORFIELD
 



More information about the Pypy-commit mailing list