[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