[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