[pypy-svn] r28897 - pypy/dist/pypy/translator/cli

antocuni at codespeak.net antocuni at codespeak.net
Fri Jun 16 20:45:47 CEST 2006


Author: antocuni
Date: Fri Jun 16 20:45:34 2006
New Revision: 28897

Modified:
   pypy/dist/pypy/translator/cli/metavm.py
   pypy/dist/pypy/translator/cli/opcodes.py
Log:
Don't longer ignore oodowncast, but execute a real cast instead.



Modified: pypy/dist/pypy/translator/cli/metavm.py
==============================================================================
--- pypy/dist/pypy/translator/cli/metavm.py	(original)
+++ pypy/dist/pypy/translator/cli/metavm.py	Fri Jun 16 20:45:34 2006
@@ -90,6 +90,13 @@
         generator.load(op.args[1])
         generator.call_signature('string [pypylib]pypy.runtime.Utils::OOString(%s, int32)' % argtype)
 
+class _DownCast(MicroInstruction):
+    def render(self, generator, op):
+        RESULTTYPE = op.result.concretetype
+        resulttype = generator.cts.lltype_to_cts(RESULTTYPE)
+        generator.load(op.args[0])
+        generator.ilasm.opcode('castclass', resulttype)
+
 Call = _Call()
 CallMethod = _CallMethod()
 IndirectCall = _IndirectCall()
@@ -98,3 +105,4 @@
 SetField = _SetField()
 CastTo = _CastTo()
 OOString = _OOString()
+DownCast = _DownCast()

Modified: pypy/dist/pypy/translator/cli/opcodes.py
==============================================================================
--- pypy/dist/pypy/translator/cli/opcodes.py	(original)
+++ pypy/dist/pypy/translator/cli/opcodes.py	Fri Jun 16 20:45:34 2006
@@ -1,5 +1,5 @@
 from pypy.translator.cli.metavm import  Call, CallMethod, RuntimeNew, \
-     IndirectCall, GetField, SetField, CastTo, OOString
+     IndirectCall, GetField, SetField, CastTo, OOString, DownCast
 from pypy.translator.oosupport.metavm import PushArg, PushAllArgs, StoreResult, InstructionList,\
     New
 
@@ -45,7 +45,7 @@
     'oogetfield':               [GetField],
     'oosend':                   [CallMethod],
     'ooupcast':                 DoNothing,
-    'oodowncast':               DoNothing, # TODO: is it really safe?
+    'oodowncast':               [DownCast],
     'oois':                     'ceq',
     'oononnull':                [PushAllArgs, 'ldnull', 'ceq']+Not,
     'instanceof':               [CastTo, 'ldnull', 'cgt.un'],



More information about the Pypy-commit mailing list