[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