[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