[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