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

antocuni at codespeak.net antocuni at codespeak.net
Wed Jun 7 17:26:59 CEST 2006


Author: antocuni
Date: Wed Jun  7 17:26:58 2006
New Revision: 28466

Modified:
   pypy/dist/pypy/translator/cli/database.py
   pypy/dist/pypy/translator/cli/metavm.py
   pypy/dist/pypy/translator/cli/opcodes.py
Log:
Fixed a bug related to class fields with Void type.

For doing that I needed to move _GetField from oosupport to gencli:
need to be refactored.



Modified: pypy/dist/pypy/translator/cli/database.py
==============================================================================
--- pypy/dist/pypy/translator/cli/database.py	(original)
+++ pypy/dist/pypy/translator/cli/database.py	Wed Jun  7 17:26:58 2006
@@ -378,6 +378,8 @@
         ilasm.new('instance void class %s::.ctor()' % classdef._name)
         while classdef is not None:
             for name, (TYPE, default) in classdef._fields.iteritems():
+                if TYPE is ootype.Void:
+                    continue
                 value = getattr(self.obj, name)
                 type_ = self.cts.lltype_to_cts(TYPE)
                 ilasm.opcode('dup')

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 17:26:58 2006
@@ -1,4 +1,5 @@
 from pypy.translator.cli import oopspec
+from pypy.rpython.ootypesystem import ootype
 from pypy.translator.oosupport.metavm import Generator, InstructionList, MicroInstruction
 
 class _Call(MicroInstruction):
@@ -40,7 +41,16 @@
         generator.call_signature('object [pypylib]pypy.runtime.Utils::RuntimeNew(class [mscorlib]System.Type)')
         generator.cast_to(op.result.concretetype)
 
+class _GetField(MicroInstruction):
+    def render(self, generator, op):
+        if op.result.concretetype is ootype.Void:
+            return
+        this, field = op.args
+        generator.load(this)
+        generator.get_field(this.concretetype, field.value)
+
 Call = _Call()
 CallMethod = _CallMethod()
 IndirectCall = _IndirectCall()
 RuntimeNew = _RuntimeNew()
+GetField = _GetField()

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 17:26:58 2006
@@ -1,7 +1,6 @@
-from pypy.translator.cli.metavm import  Call, CallMethod, RuntimeNew, IndirectCall
-
+from pypy.translator.cli.metavm import  Call, CallMethod, RuntimeNew, IndirectCall, GetField
 from pypy.translator.oosupport.metavm import PushArg, PushAllArgs, StoreResult, InstructionList,\
-    SetField, GetField, New
+    SetField, New
 
 # some useful instruction patterns
 Not = ['ldc.i4.0', 'ceq']



More information about the Pypy-commit mailing list