[pypy-svn] r56764 - in pypy/branch/oo-jit/pypy/translator/cli: . test
antocuni at codespeak.net
antocuni at codespeak.net
Thu Jul 24 11:36:01 CEST 2008
Author: antocuni
Date: Thu Jul 24 11:35:59 2008
New Revision: 56764
Modified:
pypy/branch/oo-jit/pypy/translator/cli/dotnet.py
pypy/branch/oo-jit/pypy/translator/cli/test/test_dotnet.py
Log:
add a new operation cliupcast
Modified: pypy/branch/oo-jit/pypy/translator/cli/dotnet.py
==============================================================================
--- pypy/branch/oo-jit/pypy/translator/cli/dotnet.py (original)
+++ pypy/branch/oo-jit/pypy/translator/cli/dotnet.py Thu Jul 24 11:35:59 2008
@@ -648,6 +648,27 @@
return hop.genop('oodowncast', [v_inst], resulttype = hop.r_result.lowleveltype)
+def cliupcast(obj, TYPE):
+ return obj
+
+class Entry(ExtRegistryEntry):
+ _about_ = cliupcast
+
+ def compute_result_annotation(self, s_value, s_type):
+ if isinstance(s_type.const, ootype.OOType):
+ TYPE = s_type.const
+ else:
+ cliClass = s_type.const
+ TYPE = cliClass._INSTANCE
+ assert ootype.isSubclass(s_value.ootype, TYPE)
+ return SomeOOInstance(TYPE)
+
+ def specialize_call(self, hop):
+ assert isinstance(hop.args_s[0], annmodel.SomeOOInstance)
+ v_inst = hop.inputarg(hop.args_r[0], arg=0)
+ return hop.genop('ooupcast', [v_inst], resulttype = hop.r_result.lowleveltype)
+
+
def cast_to_native_object(obj):
raise TypeError, "cast_to_native_object is meant to be rtyped and not called direclty"
Modified: pypy/branch/oo-jit/pypy/translator/cli/test/test_dotnet.py
==============================================================================
--- pypy/branch/oo-jit/pypy/translator/cli/test/test_dotnet.py (original)
+++ pypy/branch/oo-jit/pypy/translator/cli/test/test_dotnet.py Thu Jul 24 11:35:59 2008
@@ -8,7 +8,7 @@
from pypy.translator.cli.dotnet import SomeCliClass, SomeCliStaticMethod,\
NativeInstance, CLR, box, unbox, OverloadingResolver, NativeException,\
native_exc, new_array, init_array, typeof, eventhandler, clidowncast,\
- classof, cast_to_native_object, cast_from_native_object
+ cliupcast, classof, cast_to_native_object, cast_from_native_object
System = CLR.System
ArrayList = CLR.System.Collections.ArrayList
@@ -407,6 +407,19 @@
res = self.interpret(fn, [])
assert res is None
+ def test_cliupcast(self):
+ def fn(flag):
+ a = ArrayList()
+ a.Add(None)
+ if flag:
+ obj = cliupcast(a, System.Object)
+ else:
+ obj = box(42)
+ b = clidowncast(obj, ArrayList)
+ return b.get_Item(0)
+ res = self.interpret(fn, [True])
+ assert res is None
+
def test_mix_None_and_instance(self):
def g(x):
return x
More information about the Pypy-commit
mailing list