[pypy-svn] r51182 - in pypy/dist/pypy/translator/cli: . test
antocuni at codespeak.net
antocuni at codespeak.net
Fri Feb 1 15:15:54 CET 2008
Author: antocuni
Date: Fri Feb 1 15:15:52 2008
New Revision: 51182
Modified:
pypy/dist/pypy/translator/cli/dotnet.py
pypy/dist/pypy/translator/cli/test/test_dotnet.py
Log:
add an helper to allow downcasts of cli objects
Modified: pypy/dist/pypy/translator/cli/dotnet.py
==============================================================================
--- pypy/dist/pypy/translator/cli/dotnet.py (original)
+++ pypy/dist/pypy/translator/cli/dotnet.py Fri Feb 1 15:15:52 2008
@@ -528,6 +528,26 @@
c_methodname = hop.inputconst(ootype.Void, methodname)
return hop.genop('cli_eventhandler', [v_obj, c_methodname], hop.r_result.lowleveltype)
+
+def clidowncast(cliClass, obj):
+ return obj
+
+class Entry(ExtRegistryEntry):
+ _about_ = clidowncast
+
+ def compute_result_annotation(self, s_type, s_value):
+ assert s_type.is_constant()
+ cliClass = s_type.const
+ TYPE = cliClass._INSTANCE
+ assert ootype.isSubclass(TYPE, s_value.ootype)
+ return SomeOOInstance(TYPE)
+
+ def specialize_call(self, hop):
+ assert isinstance(hop.args_s[0].const, CliClass)
+ assert isinstance(hop.args_s[1], annmodel.SomeOOInstance)
+ v_inst = hop.inputarg(hop.args_r[1], arg=1)
+ return hop.genop('oodowncast', [v_inst], resulttype = hop.r_result.lowleveltype)
+
from pypy.translator.cli.query import CliNamespace
CLR = CliNamespace(None)
CLR._buildtree()
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 Fri Feb 1 15:15:52 2008
@@ -7,7 +7,7 @@
from pypy.translator.cli.test.runtest import CliTest
from pypy.translator.cli.dotnet import SomeCliClass, SomeCliStaticMethod,\
NativeInstance, CLR, box, unbox, OverloadingResolver, NativeException,\
- native_exc, new_array, init_array, typeof, eventhandler
+ native_exc, new_array, init_array, typeof, eventhandler, clidowncast
System = CLR.System
ArrayList = CLR.System.Collections.ArrayList
@@ -362,6 +362,18 @@
res = self.interpret(fn, [])
assert res is True
+ def test_clidowncast(self):
+ def fn():
+ a = ArrayList()
+ b = ArrayList()
+ a.Add(b)
+ c = a.get_Item(0) # type of c is Object
+ c = clidowncast(ArrayList, c)
+ c.Add(None)
+ return c.get_Item(0)
+ res = self.interpret(fn, [])
+ assert res is None
+
def test_mix_None_and_instance(self):
def g(x):
return x
More information about the Pypy-commit
mailing list