[pypy-svn] r28472 - pypy/dist/pypy/translator/cli
antocuni at codespeak.net
antocuni at codespeak.net
Wed Jun 7 18:35:00 CEST 2006
Author: antocuni
Date: Wed Jun 7 18:34:59 2006
New Revision: 28472
Modified:
pypy/dist/pypy/translator/cli/function.py
pypy/dist/pypy/translator/cli/metavm.py
pypy/dist/pypy/translator/cli/opcodes.py
Log:
Added support for 'instanceof'.
Modified: pypy/dist/pypy/translator/cli/function.py
==============================================================================
--- pypy/dist/pypy/translator/cli/function.py (original)
+++ pypy/dist/pypy/translator/cli/function.py Wed Jun 7 18:34:59 2006
@@ -307,3 +307,6 @@
self.ilasm.opcode('stloc', repr(v.name))
else:
assert False
+
+ def isinstance(self, class_name):
+ self.ilasm.opcode('isinst', class_name)
Modified: pypy/dist/pypy/translator/cli/metavm.py
==============================================================================
--- pypy/dist/pypy/translator/cli/metavm.py (original)
+++ pypy/dist/pypy/translator/cli/metavm.py Wed Jun 7 18:34:59 2006
@@ -49,8 +49,14 @@
generator.load(this)
generator.get_field(this.concretetype, field.value)
+class _CastTo(MicroInstruction):
+ def render(self, generator, op):
+ generator.load(op.args[0])
+ generator.isinstance(op.args[1].value._name)
+
Call = _Call()
CallMethod = _CallMethod()
IndirectCall = _IndirectCall()
RuntimeNew = _RuntimeNew()
GetField = _GetField()
+CastTo = _CastTo()
Modified: pypy/dist/pypy/translator/cli/opcodes.py
==============================================================================
--- pypy/dist/pypy/translator/cli/opcodes.py (original)
+++ pypy/dist/pypy/translator/cli/opcodes.py Wed Jun 7 18:34:59 2006
@@ -1,4 +1,4 @@
-from pypy.translator.cli.metavm import Call, CallMethod, RuntimeNew, IndirectCall, GetField
+from pypy.translator.cli.metavm import Call, CallMethod, RuntimeNew, IndirectCall, GetField, CastTo
from pypy.translator.oosupport.metavm import PushArg, PushAllArgs, StoreResult, InstructionList,\
SetField, New
@@ -47,6 +47,7 @@
'oodowncast': DoNothing, # TODO: is it really safe?
'oois': 'ceq',
'oononnull': [PushAllArgs, 'ldnull', 'ceq']+Not,
+ 'instanceof': [CastTo, 'ldnull', 'cgt.un'],
'same_as': DoNothing, # TODO: does same_as really do nothing else than renaming?
'direct_call': [Call],
More information about the Pypy-commit
mailing list