[pypy-svn] r51511 - in pypy/dist/pypy/translator/cli: . test

antocuni at codespeak.net antocuni at codespeak.net
Fri Feb 15 10:39:21 CET 2008


Author: antocuni
Date: Fri Feb 15 10:39:20 2008
New Revision: 51511

Modified:
   pypy/dist/pypy/translator/cli/dotnet.py
   pypy/dist/pypy/translator/cli/test/test_dotnet.py
Log:
use unbox() instead of clidowncast() to convert delegates to
StaticMethods; now box/unbox are used to (almost) consistently convert
from the OOType hierarchy to the CLI hierarchy and back.



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 15 10:39:20 2008
@@ -386,7 +386,7 @@
         else:
             return None
 
-    if isinstance(TYPE, ootype.OOType) and TYPE is not ootype.String:
+    if isinstance(TYPE, ootype.OOType) and TYPE is not ootype.String and not isinstance(TYPE, ootype.StaticMethod):
         try:
             return ootype.enforce(TYPE, x)
         except TypeError:
@@ -428,7 +428,7 @@
 
     def compute_result_annotation(self, x_s, type_s):
         assert isinstance(x_s, SomeOOInstance)
-        assert x_s.ootype == CLR.System.Object._INSTANCE
+        assert isinstance(x_s.ootype, NativeInstance)
         assert type_s.is_constant()
         TYPE = type_s.const
         if isinstance(TYPE, (type, types.ClassType)):
@@ -436,6 +436,8 @@
             # can_be_None == True because it can always return None, if it fails
             classdef = self.bookkeeper.getuniqueclassdef(TYPE)
             return SomeInstance(classdef, can_be_None=True)
+        elif isinstance(TYPE, ootype.StaticMethod):
+            return SomeOOStaticMeth(TYPE)
         elif isinstance(TYPE, ootype.OOType):
             return SomeOOInstance(TYPE)
         else:
@@ -596,12 +598,8 @@
         else:
             cliClass = s_type.const
             TYPE = cliClass._INSTANCE
-        if isinstance(TYPE, ootype.StaticMethod):
-            assert ootype.isSubclass(s_value.ootype, CLR.System.Object._INSTANCE)
-            return SomeOOStaticMeth(TYPE)
-        else:
-            assert ootype.isSubclass(TYPE, s_value.ootype)
-            return SomeOOInstance(TYPE)
+        assert ootype.isSubclass(TYPE, s_value.ootype)
+        return SomeOOInstance(TYPE)
 
     def specialize_call(self, hop):
         assert isinstance(hop.args_s[0], annmodel.SomeOOInstance)

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 15 10:39:20 2008
@@ -538,7 +538,7 @@
             return myfunc
         
         def fn():
-            myfunc = clidowncast(build_fn(), FUNCTYPE)
+            myfunc = unbox(build_fn(), FUNCTYPE)
             return myfunc(30, 12)
         res = self.interpret(fn, [])
         assert res == 42
@@ -559,7 +559,7 @@
             return myfunc
 
         def fn():
-            myfunc = clidowncast(build_fn(), FUNCTYPE)
+            myfunc = unbox(build_fn(), FUNCTYPE)
             return myfunc(30, 12)
         res = self.interpret(fn, [])
         assert res == 42



More information about the Pypy-commit mailing list