[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