[pypy-svn] r37512 - in pypy/dist/pypy/translator/cli: . test
antocuni at codespeak.net
antocuni at codespeak.net
Mon Jan 29 11:44:38 CET 2007
Author: antocuni
Date: Mon Jan 29 11:44:37 2007
New Revision: 37512
Modified:
pypy/dist/pypy/translator/cli/dotnet.py
pypy/dist/pypy/translator/cli/opcodes.py
pypy/dist/pypy/translator/cli/test/test_dotnet.py
Log:
support for len() of native .NET arrays
Modified: pypy/dist/pypy/translator/cli/dotnet.py
==============================================================================
--- pypy/dist/pypy/translator/cli/dotnet.py (original)
+++ pypy/dist/pypy/translator/cli/dotnet.py Mon Jan 29 11:44:37 2007
@@ -120,6 +120,15 @@
return hop.genop('cli_setelem', vlist, hop.r_result.lowleveltype)
+class __extend__(OOInstanceRepr):
+
+ def rtype_len(self, hop):
+ if not self.lowleveltype._isArray:
+ raise TypeError("len() on a non-array instance")
+ vlist = hop.inputargs(*hop.args_r)
+ hop.exception_cannot_occur()
+ return hop.genop('cli_arraylength', vlist, hop.r_result.lowleveltype)
+
## OOType model
class OverloadingResolver(ootype.OverloadingResolver):
Modified: pypy/dist/pypy/translator/cli/opcodes.py
==============================================================================
--- pypy/dist/pypy/translator/cli/opcodes.py (original)
+++ pypy/dist/pypy/translator/cli/opcodes.py Mon Jan 29 11:44:37 2007
@@ -41,6 +41,7 @@
'cli_getelem': [GetArrayElem],
'cli_setelem': [SetArrayElem],
'cli_typeof': [TypeOf],
+ 'cli_arraylength': 'ldlen',
'oois': 'ceq',
'oononnull': [PushAllArgs, 'ldnull', 'ceq']+Not,
'instanceof': [CastTo, 'ldnull', 'cgt.un'],
Modified: pypy/dist/pypy/translator/cli/test/test_dotnet.py
==============================================================================
--- pypy/dist/pypy/translator/cli/test/test_dotnet.py (original)
+++ pypy/dist/pypy/translator/cli/test/test_dotnet.py Mon Jan 29 11:44:37 2007
@@ -221,6 +221,12 @@
return unbox(x[0], ootype.Signed) + unbox(x[1], ootype.Signed)
assert self.interpret(fn, []) == 42+43
+ def test_array_length(self):
+ def fn():
+ x = init_array(System.Object, box(42), box(43))
+ return len(x)
+ assert self.interpret(fn, []) == 2
+
def test_null(self):
def fn():
return System.Object.Equals(None, None)
More information about the Pypy-commit
mailing list