[pypy-svn] r64473 - pypy/branch/pyjitpl5-simplify/pypy/jit/metainterp

antocuni at codespeak.net antocuni at codespeak.net
Mon Apr 20 19:06:01 CEST 2009


Author: antocuni
Date: Mon Apr 20 19:06:01 2009
New Revision: 64473

Modified:
   pypy/branch/pyjitpl5-simplify/pypy/jit/metainterp/codewriter.py
Log:
use the same method for lltype and ootype (oo)getfield


Modified: pypy/branch/pyjitpl5-simplify/pypy/jit/metainterp/codewriter.py
==============================================================================
--- pypy/branch/pyjitpl5-simplify/pypy/jit/metainterp/codewriter.py	(original)
+++ pypy/branch/pyjitpl5-simplify/pypy/jit/metainterp/codewriter.py	Mon Apr 20 19:06:01 2009
@@ -10,6 +10,7 @@
 from pypy.jit.metainterp import heaptracker, support, history
 from pypy.tool.udir import udir
 from pypy.translator.simplify import get_funcobj, get_functype
+from pypy.jit.metainterp.typesystem import deref
 
 import py, sys
 from pypy.tool.ansi_print import ansi_log
@@ -605,40 +606,26 @@
         if self.is_typeptr_getset(op):
             self.handle_getfield_typeptr(op)
             return
-        # check for deepfrozen structures that force constant-folding
-        #pure = self.codewriter.is_green_var(op.result)
-        if op.args[0].concretetype.TO._hints.get('immutable'):
-            pure = '_pure'
-        else:
-            pure = ''
         # turn the flow graph 'getfield' operation into our own version
         [v_inst, c_fieldname] = op.args
         RESULT = op.result.concretetype
         if RESULT is lltype.Void:
             return
-        argname = v_inst.concretetype.TO._gckind
+        # check for deepfrozen structures that force constant-folding
+        if deref(v_inst.concretetype)._hints.get('immutable'):
+            pure = '_pure'
+        else:
+            pure = ''
+        argname = getattr(deref(v_inst.concretetype), '_gckind', 'gc')
         self.emit('getfield_%s%s' % (argname, pure))
         self.emit(self.var_position(v_inst))
-        offset = self.cpu.fielddescrof(v_inst.concretetype.TO,
+        descr = self.cpu.fielddescrof(deref(v_inst.concretetype),
                                        c_fieldname.value)
-        self.emit(self.get_position(offset))
+        self.emit(self.get_position(descr))
         self.register_var(op.result)
         #self._eventualy_builtin(op.result)
 
-    def serialize_op_oogetfield(self, op):
-        [v_inst, c_fieldname] = op.args
-        RESULT = op.result.concretetype
-        if RESULT is lltype.Void:
-            return
-        if v_inst.concretetype._hints.get('immutable'):
-            self.emit('getfield_gc_pure')            
-        else:
-            self.emit('getfield_gc')
-        self.emit(self.var_position(v_inst))
-        descr = self.cpu.fielddescrof(v_inst.concretetype,
-                                       c_fieldname.value)
-        self.emit(self.get_position(descr))
-        self.register_var(op.result)
+    serialize_op_oogetfield = serialize_op_getfield
 
     def serialize_op_setfield(self, op):
         if self.is_typeptr_getset(op):



More information about the Pypy-commit mailing list