[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