[pypy-svn] r38377 - pypy/dist/pypy/translator/cli

antocuni at codespeak.net antocuni at codespeak.net
Sat Feb 10 14:21:25 CET 2007


Author: antocuni
Date: Sat Feb 10 14:21:25 2007
New Revision: 38377

Modified:
   pypy/dist/pypy/translator/cli/dotnet.py
   pypy/dist/pypy/translator/cli/metavm.py
Log:
Don't crash when setting an array item to None.



Modified: pypy/dist/pypy/translator/cli/dotnet.py
==============================================================================
--- pypy/dist/pypy/translator/cli/dotnet.py	(original)
+++ pypy/dist/pypy/translator/cli/dotnet.py	Sat Feb 10 14:21:25 2007
@@ -4,6 +4,7 @@
 from pypy.annotation.model import SomeObject, SomeInstance, SomeOOInstance, SomeInteger, s_None,\
      s_ImpossibleValue, lltype_to_annotation, annotation_to_lltype, SomeChar, SomeString, SomePBC
 from pypy.annotation.binaryop import _make_none_union
+from pypy.annotation import model as annmodel
 from pypy.rlib.rarithmetic import r_uint, r_longlong, r_ulonglong
 from pypy.rpython.error import TyperError
 from pypy.rpython.extregistry import ExtRegistryEntry
@@ -56,6 +57,8 @@
 
     def setitem((ooinst, index), s_value):
         if ooinst.ootype._isArray:
+            if s_value is annmodel.s_None:
+                return s_None
             ELEMENT = ooinst.ootype._ELEMENT
             VALUE = s_value.ootype
             assert ootype.isSubclass(VALUE, ELEMENT)
@@ -114,7 +117,7 @@
 
     def rtype_setitem((r_inst, r_int), hop):
         if not r_inst.lowleveltype._isArray:
-            raise TyperError("setitem() on a non-array instance")        
+            raise TyperError("setitem() on a non-array instance")
         vlist = hop.inputargs(*hop.args_r)
         hop.exception_is_here()
         return hop.genop('cli_setelem', vlist, hop.r_result.lowleveltype)
@@ -446,7 +449,7 @@
 
 def init_array(type, *args):
     # PythonNet doesn't provide a straightforward way to create arrays... fake it with a list
-    return args
+    return list(args)
 
 class Entry(ExtRegistryEntry):
     _about_ = new_array

Modified: pypy/dist/pypy/translator/cli/metavm.py
==============================================================================
--- pypy/dist/pypy/translator/cli/metavm.py	(original)
+++ pypy/dist/pypy/translator/cli/metavm.py	Sat Feb 10 14:21:25 2007
@@ -235,7 +235,10 @@
         v_array, v_index, v_elem = op.args
         generator.load(v_array)
         generator.load(v_index)
-        generator.load(v_elem)
+        if v_elem.concretetype is ootype.Void and v_elem.value is None:
+            generator.ilasm.opcode('ldnull')
+        else:
+            generator.load(v_elem)
         elemtype = generator.cts.lltype_to_cts(v_array.concretetype)
         generator.ilasm.opcode('stelem', elemtype)
 



More information about the Pypy-commit mailing list