[pypy-svn] r77145 - in pypy/branch/resoperation-refactoring/pypy/jit: backend/cli backend/llgraph backend/llsupport/test backend/llvm backend/test backend/x86 backend/x86/test metainterp metainterp/optimizeopt metainterp/test

antocuni at codespeak.net antocuni at codespeak.net
Fri Sep 17 15:34:07 CEST 2010


Author: antocuni
Date: Fri Sep 17 15:34:04 2010
New Revision: 77145

Modified:
   pypy/branch/resoperation-refactoring/pypy/jit/backend/cli/method.py
   pypy/branch/resoperation-refactoring/pypy/jit/backend/cli/runner.py
   pypy/branch/resoperation-refactoring/pypy/jit/backend/llgraph/runner.py
   pypy/branch/resoperation-refactoring/pypy/jit/backend/llsupport/test/test_gc.py
   pypy/branch/resoperation-refactoring/pypy/jit/backend/llvm/compile.py
   pypy/branch/resoperation-refactoring/pypy/jit/backend/test/runner_test.py
   pypy/branch/resoperation-refactoring/pypy/jit/backend/test/test_random.py
   pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/assembler.py
   pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/regalloc.py
   pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/test/test_recompilation.py
   pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/test/test_regalloc.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/compile.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/graphpage.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/history.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/logger.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimize.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizefindnode.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/heap.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/optimizer.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/rewrite.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/virtualize.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/resoperation.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/simple_optimize.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_oparser.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_optimizeopt.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_recursive.py
   pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_virtualref.py
Log:
(david, antocuni): use the official API for getting and setting descrs



Modified: pypy/branch/resoperation-refactoring/pypy/jit/backend/cli/method.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/backend/cli/method.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/backend/cli/method.py	Fri Sep 17 15:34:04 2010
@@ -209,7 +209,7 @@
         for op in operations:
             if op.getopnum() in (rop.GETFIELD_GC, rop.SETFIELD_GC):
                 box = op.args[0]
-                descr = op.descr
+                descr = op.getdescr()
                 assert isinstance(descr, runner.FieldDescr)
                 box2classes.setdefault(box, []).append(descr.selfclass)
             if op in self.cliloop.guard2ops:
@@ -544,7 +544,7 @@
         self.emit_guard_overflow_impl(op, OpCodes.Brfalse)
 
     def emit_op_jump(self, op):
-        target_token = op.descr
+        target_token = op.getdescr()
         assert isinstance(target_token, LoopToken)
         if target_token.cliloop is self.cliloop:
             # jump to the beginning of the loop
@@ -586,7 +586,7 @@
         self.store_result(op)
 
     def emit_op_instanceof(self, op):
-        descr = op.descr
+        descr = op.getdescr()
         assert isinstance(descr, runner.TypeDescr)
         clitype = descr.get_clitype()
         op.args[0].load(self)
@@ -604,7 +604,7 @@
         self.store_result(op)
 
     def emit_op_call_impl(self, op):
-        descr = op.descr
+        descr = op.getdescr()
         assert isinstance(descr, runner.StaticMethDescr)
         delegate_type = descr.get_delegate_clitype()
         meth_invoke = descr.get_meth_info()
@@ -619,7 +619,7 @@
     emit_op_call_pure = emit_op_call
 
     def emit_op_oosend(self, op):
-        descr = op.descr
+        descr = op.getdescr()
         assert isinstance(descr, runner.MethDescr)
         clitype = descr.get_self_clitype()
         methinfo = descr.get_meth_info()
@@ -639,7 +639,7 @@
             self.store_result(op)
 
     def emit_op_getfield_gc(self, op):
-        descr = op.descr
+        descr = op.getdescr()
         assert isinstance(descr, runner.FieldDescr)
         clitype = descr.get_self_clitype()
         fieldinfo = descr.get_field_info()
@@ -653,7 +653,7 @@
     emit_op_getfield_gc_pure = emit_op_getfield_gc
 
     def emit_op_setfield_gc(self, op):
-        descr = op.descr
+        descr = op.getdescr()
         assert isinstance(descr, runner.FieldDescr)
         clitype = descr.get_self_clitype()
         fieldinfo = descr.get_field_info()
@@ -665,7 +665,7 @@
         self.il.Emit(OpCodes.Stfld, fieldinfo)
 
     def emit_op_getarrayitem_gc(self, op):
-        descr = op.descr
+        descr = op.getdescr()
         assert isinstance(descr, runner.TypeDescr)
         clitype = descr.get_array_clitype()
         itemtype = descr.get_clitype()
@@ -678,7 +678,7 @@
     emit_op_getarrayitem_gc_pure = emit_op_getarrayitem_gc
 
     def emit_op_setarrayitem_gc(self, op):
-        descr = op.descr
+        descr = op.getdescr()
         assert isinstance(descr, runner.TypeDescr)
         clitype = descr.get_array_clitype()
         itemtype = descr.get_clitype()
@@ -689,7 +689,7 @@
         self.il.Emit(OpCodes.Stelem, itemtype)
 
     def emit_op_arraylen_gc(self, op):
-        descr = op.descr
+        descr = op.getdescr()
         assert isinstance(descr, runner.TypeDescr)
         clitype = descr.get_array_clitype()
         op.args[0].load(self)
@@ -698,7 +698,7 @@
         self.store_result(op)
 
     def emit_op_new_array(self, op):
-        descr = op.descr
+        descr = op.getdescr()
         assert isinstance(descr, runner.TypeDescr)
         item_clitype = descr.get_clitype()
         if item_clitype is None:

Modified: pypy/branch/resoperation-refactoring/pypy/jit/backend/cli/runner.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/backend/cli/runner.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/backend/cli/runner.py	Fri Sep 17 15:34:04 2010
@@ -105,7 +105,7 @@
     def _attach_token_to_faildescrs(self, token, operations):
         for op in operations:
             if op.is_guard():
-                descr = op.descr
+                descr = op.getdescr()
                 assert isinstance(descr, AbstractFailDescr)
                 descr._loop_token = token
                 descr._guard_op = op
@@ -136,7 +136,7 @@
         func = cliloop.funcbox.holder.GetFunc()
         func(self.get_inputargs())
         op = self.failing_ops[self.inputargs.get_failed_op()]
-        return op.descr
+        return op.getdescr()
         
     def set_future_value_int(self, index, intvalue):
         self.get_inputargs().set_int(index, intvalue)

Modified: pypy/branch/resoperation-refactoring/pypy/jit/backend/llgraph/runner.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/backend/llgraph/runner.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/backend/llgraph/runner.py	Fri Sep 17 15:34:04 2010
@@ -152,14 +152,14 @@
     def _compile_operations(self, c, operations, var2index):
         for op in operations:
             llimpl.compile_add(c, op.getopnum())
-            descr = op.descr
+            descr = op.getdescr()
             if isinstance(descr, Descr):
                 llimpl.compile_add_descr(c, descr.ofs, descr.typeinfo)
             if isinstance(descr, history.LoopToken) and op.getopnum() != rop.JUMP:
                 llimpl.compile_add_loop_token(c, descr)
             if self.is_oo and isinstance(descr, (OODescr, MethDescr)):
                 # hack hack, not rpython
-                c._obj.externalobj.operations[-1].descr = descr
+                c._obj.externalobj.operations[-1].setdescr(descr)
             for i in range(op.numargs()):
                 x = op.getarg(i)
                 if isinstance(x, history.Box):
@@ -174,7 +174,7 @@
                     raise Exception("'%s' args contain: %r" % (op.getopname(),
                                                                x))
             if op.is_guard():
-                faildescr = op.descr
+                faildescr = op.getdescr()
                 assert isinstance(faildescr, history.AbstractFailDescr)
                 faildescr._fail_args_types = []
                 for box in op.fail_args:
@@ -205,12 +205,12 @@
         op = operations[-1]
         assert op.is_final()
         if op.getopnum() == rop.JUMP:
-            targettoken = op.descr
+            targettoken = op.getdescr()
             assert isinstance(targettoken, history.LoopToken)
             compiled_version = targettoken._llgraph_compiled_version
             llimpl.compile_add_jump_target(c, compiled_version)
         elif op.getopnum() == rop.FINISH:
-            faildescr = op.descr
+            faildescr = op.getdescr()
             index = self.get_fail_descr_number(faildescr)
             llimpl.compile_add_fail(c, index)
         else:

Modified: pypy/branch/resoperation-refactoring/pypy/jit/backend/llsupport/test/test_gc.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/backend/llsupport/test/test_gc.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/backend/llsupport/test/test_gc.py	Fri Sep 17 15:34:04 2010
@@ -262,7 +262,7 @@
         assert newops[0].getarg(0) == v_base
         assert newops[0].getarg(1) == v_value
         assert newops[0].result is None
-        wbdescr = newops[0].descr
+        wbdescr = newops[0].getdescr()
         assert isinstance(wbdescr.jit_wb_if_flag, int)
         assert isinstance(wbdescr.jit_wb_if_flag_byteofs, int)
         assert isinstance(wbdescr.jit_wb_if_flag_singlebyte, int)
@@ -300,7 +300,7 @@
         assert len(operations) == 2
         assert operations[0].getopnum() == rop.GETFIELD_RAW
         assert operations[0].getarg(0) == ConstInt(43)
-        assert operations[0].descr == gc_ll_descr.single_gcref_descr
+        assert operations[0].getdescr() == gc_ll_descr.single_gcref_descr
         v_box = operations[0].result
         assert isinstance(v_box, BoxPtr)
         assert operations[1].getopnum() == rop.PTR_EQ
@@ -366,7 +366,7 @@
         assert operations[1].getopnum() == rop.SETFIELD_RAW
         assert operations[1].getarg(0) == v_base
         assert operations[1].getarg(1) == v_value
-        assert operations[1].descr == field_descr
+        assert operations[1].getdescr() == field_descr
 
     def test_rewrite_assembler_3(self):
         # check write barriers before SETARRAYITEM_GC
@@ -391,4 +391,4 @@
         assert operations[1].getarg(0) == v_base
         assert operations[1].getarg(1) == v_index
         assert operations[1].getarg(2) == v_value
-        assert operations[1].descr == array_descr
+        assert operations[1].getdescr() == array_descr

Modified: pypy/branch/resoperation-refactoring/pypy/jit/backend/llvm/compile.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/backend/llvm/compile.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/backend/llvm/compile.py	Fri Sep 17 15:34:04 2010
@@ -475,7 +475,7 @@
         return location
 
     def generate_GETFIELD_GC(self, op):
-        loc = self._generate_field_gep(op.args[0], op.descr)
+        loc = self._generate_field_gep(op.args[0], op.getdescr())
         self.vars[op.result] = llvm_rffi.LLVMBuildLoad(self.builder, loc, "")
 
     generate_GETFIELD_GC_PURE  = generate_GETFIELD_GC
@@ -483,7 +483,7 @@
     generate_GETFIELD_RAW_PURE = generate_GETFIELD_GC
 
     def generate_SETFIELD_GC(self, op):
-        fielddescr = op.descr
+        fielddescr = op.getdescr()
         loc = self._generate_field_gep(op.args[0], fielddescr)
         assert isinstance(fielddescr, FieldDescr)
         getarg = self.cpu.getarg_by_index[fielddescr.size_index]
@@ -491,7 +491,7 @@
         llvm_rffi.LLVMBuildStore(self.builder, value_ref, loc, "")
 
     def generate_CALL(self, op):
-        calldescr = op.descr
+        calldescr = op.getdescr()
         assert isinstance(calldescr, CallDescr)
         ty_function_ptr = self.cpu.get_calldescr_ty_function_ptr(calldescr)
         v = op.args[0]
@@ -579,7 +579,7 @@
         self.vars[op.result] = llvm_rffi.LLVMBuildLoad(self.builder, loc, "")
 
     def generate_ARRAYLEN_GC(self, op):
-        arraydescr = op.descr
+        arraydescr = op.getdescr()
         assert isinstance(arraydescr, ArrayDescr)
         self._generate_len(op, arraydescr.ty_array_ptr,
                            self.cpu.const_array_index_length)
@@ -598,7 +598,7 @@
         return location
 
     def _generate_array_gep(self, op):
-        arraydescr = op.descr
+        arraydescr = op.getdescr()
         assert isinstance(arraydescr, ArrayDescr)
         location = self._generate_gep(op, arraydescr.ty_array_ptr,
                                       self.cpu.const_array_index_array)
@@ -612,7 +612,7 @@
 
     def generate_SETARRAYITEM_GC(self, op):
         loc = self._generate_array_gep(op)
-        arraydescr = op.descr
+        arraydescr = op.getdescr()
         assert isinstance(arraydescr, ArrayDescr)
         getarg = self.cpu.getarg_by_index[arraydescr.itemsize_index]
         value_ref = getarg(self, op.args[2])
@@ -660,7 +660,7 @@
         return res
 
     def generate_NEW(self, op):
-        sizedescr = op.descr
+        sizedescr = op.getdescr()
         assert isinstance(sizedescr, SizeDescr)
         res = self._generate_new(self.cpu._make_const_int(sizedescr.size))
         self.vars[op.result] = res
@@ -695,7 +695,7 @@
         self.vars[op.result] = res
 
     def generate_NEW_ARRAY(self, op):
-        arraydescr = op.descr
+        arraydescr = op.getdescr()
         assert isinstance(arraydescr, ArrayDescr)
         self._generate_new_array(op, arraydescr.ty_array_ptr,
                                  self.cpu._make_const_int(arraydescr.itemsize),

Modified: pypy/branch/resoperation-refactoring/pypy/jit/backend/test/runner_test.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/backend/test/runner_test.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/backend/test/runner_test.py	Fri Sep 17 15:34:04 2010
@@ -1,5 +1,6 @@
 import py, sys, random, os, struct, operator
 from pypy.jit.metainterp.history import (AbstractFailDescr,
+                                         AbstractDescr,
                                          BasicFailDescr,
                                          BoxInt, Box, BoxPtr,
                                          LoopToken,
@@ -39,7 +40,7 @@
             else:
                 raise NotImplementedError(box)
         res = self.cpu.execute_token(looptoken)
-        if res is operations[-1].descr:
+        if res is operations[-1].getdescr():
             self.guard_failed = False
         else:
             self.guard_failed = True
@@ -77,7 +78,7 @@
             operations[0].fail_args = []
             if not descr:
                 descr = BasicFailDescr(1)
-        operations[0].descr = descr
+        operations[0].setdescr(descr)
         inputargs = []
         for box in valueboxes:
             if isinstance(box, Box) and box not in inputargs:
@@ -910,7 +911,7 @@
                 ResOperation(rop.JUMP, jumpargs, None, descr=looptoken),
                 ]
             operations[2].fail_args = inputargs[:]
-            operations[2].descr = faildescr
+            operations[2].setdescr(faildescr)
             #
             self.cpu.compile_loop(inputargs, operations, looptoken)
             #
@@ -1412,7 +1413,7 @@
         FUNC = self.FuncType([lltype.Ptr(S), lltype.Signed], lltype.Void)
         func_ptr = llhelper(lltype.Ptr(FUNC), func_void)
         funcbox = self.get_funcbox(self.cpu, func_ptr)
-        class WriteBarrierDescr:
+        class WriteBarrierDescr(AbstractDescr):
             jit_wb_if_flag = 4096
             jit_wb_if_flag_byteofs = struct.pack("i", 4096).index('\x10')
             jit_wb_if_flag_singlebyte = 0x10
@@ -1824,7 +1825,7 @@
         f2 = float_add(f0, f1)
         finish(f2)'''
         loop = parse(ops)
-        done_number = self.cpu.get_fail_descr_number(loop.operations[-1].descr)
+        done_number = self.cpu.get_fail_descr_number(loop.operations[-1].getdescr())
         looptoken = LoopToken()
         looptoken.outermost_jitdriver_sd = FakeJitDriverSD()
         self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)

Modified: pypy/branch/resoperation-refactoring/pypy/jit/backend/test/test_random.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/backend/test/test_random.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/backend/test/test_random.py	Fri Sep 17 15:34:04 2010
@@ -105,11 +105,11 @@
                 args.append('ConstInt(%d)' % v.value)
             else:
                 raise NotImplementedError(v)
-        if op.descr is None:
+        if op.getdescr() is None:
             descrstr = ''
         else:
             try:
-                descrstr = ', ' + op.descr._random_info
+                descrstr = ', ' + op.getdescr()._random_info
             except AttributeError:
                 descrstr = ', descr=...'
         print >>s, '        ResOperation(rop.%s, [%s], %s%s),' % (
@@ -284,7 +284,7 @@
             builder.intvars[:] = original_intvars
         else:
             op = ResOperation(rop.GUARD_NO_OVERFLOW, [], None)
-        op.descr = BasicFailDescr()
+        op.setdescr(BasicFailDescr())
         op.fail_args = fail_subset
         builder.loop.operations.append(op)
 
@@ -345,7 +345,7 @@
     def produce_into(self, builder, r):
         op, passing = self.gen_guard(builder, r)
         builder.loop.operations.append(op)
-        op.descr = BasicFailDescr()
+        op.setdescr(BasicFailDescr())
         op.fail_args = builder.subset_of_intvars(r)
         if not passing:
             builder.should_fail_by = op
@@ -606,7 +606,7 @@
             else:
                 raise NotImplementedError(box)
         fail = cpu.execute_token(self.loop.token)
-        assert fail is self.should_fail_by.descr
+        assert fail is self.should_fail_by.getdescr()
         for i, v in enumerate(self.get_fail_args()):
             if isinstance(v, (BoxFloat, ConstFloat)):
                 value = cpu.get_latest_value_float(i)
@@ -633,7 +633,7 @@
             else:
                 op = ResOperation(rop.GUARD_EXCEPTION, [guard_op._exc_box],
                                   BoxPtr())
-            op.descr = BasicFailDescr()
+            op.setdescr(BasicFailDescr())
             op.fail_args = []
             return op
 
@@ -642,7 +642,7 @@
         r = self.r
         guard_op = self.guard_op
         fail_args = guard_op.fail_args
-        fail_descr = guard_op.descr
+        fail_descr = guard_op.getdescr()
         op = self.should_fail_by
         if not op.fail_args:
             return False

Modified: pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/assembler.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/assembler.py	Fri Sep 17 15:34:04 2010
@@ -688,7 +688,7 @@
 
     def regalloc_perform_with_guard(self, op, guard_op, faillocs,
                                     arglocs, resloc, current_depths):
-        faildescr = guard_op.descr
+        faildescr = guard_op.getdescr()
         assert isinstance(faildescr, AbstractFailDescr)
         faildescr._x86_current_depths = current_depths
         failargs = guard_op.fail_args
@@ -1656,7 +1656,7 @@
     
     def genop_guard_call_may_force(self, op, guard_op, guard_token,
                                    arglocs, result_loc):
-        faildescr = guard_op.descr
+        faildescr = guard_op.getdescr()
         fail_index = self.cpu.get_fail_descr_number(faildescr)
         self.mc.MOV_bi(FORCE_INDEX_OFS, fail_index)
         self.genop_call(op, arglocs, result_loc)
@@ -1665,10 +1665,10 @@
 
     def genop_guard_call_assembler(self, op, guard_op, guard_token,
                                    arglocs, result_loc):
-        faildescr = guard_op.descr
+        faildescr = guard_op.getdescr()
         fail_index = self.cpu.get_fail_descr_number(faildescr)
         self.mc.MOV_bi(FORCE_INDEX_OFS, fail_index)
-        descr = op.descr
+        descr = op.getdescr()
         assert isinstance(descr, LoopToken)
         assert len(arglocs) - 2 == len(descr._x86_arglocs[0])
         #
@@ -1753,7 +1753,7 @@
     def genop_discard_cond_call_gc_wb(self, op, arglocs):
         # use 'mc._mc' directly instead of 'mc', to avoid
         # bad surprizes if the code buffer is mostly full
-        descr = op.descr
+        descr = op.getdescr()
         if we_are_translated():
             cls = self.cpu.gc_ll_descr.has_write_barrier_class()
             assert cls is not None and isinstance(descr, cls)

Modified: pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/regalloc.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/regalloc.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/regalloc.py	Fri Sep 17 15:34:04 2010
@@ -268,7 +268,7 @@
                                               selected_reg, need_lower_byte)
 
     def _compute_loop_consts(self, inputargs, jump, looptoken):
-        if jump.getopnum() != rop.JUMP or jump.descr is not looptoken:
+        if jump.getopnum() != rop.JUMP or jump.getdescr() is not looptoken:
             loop_consts = {}
         else:
             loop_consts = {}
@@ -451,7 +451,7 @@
     def consider_finish(self, op):
         locs = [self.loc(op.getarg(i)) for i in range(op.numargs())]
         locs_are_ref = [op.getarg(i).type == REF for i in range(op.numargs())]
-        fail_index = self.assembler.cpu.get_fail_descr_number(op.descr)
+        fail_index = self.assembler.cpu.get_fail_descr_number(op.getdescr())
         self.assembler.generate_failure(fail_index, locs, self.exc,
                                         locs_are_ref)
         self.possibly_free_vars_for_op(op)
@@ -663,7 +663,7 @@
             self.Perform(op, arglocs, resloc)
 
     def _consider_call(self, op, guard_not_forced_op=None):
-        calldescr = op.descr
+        calldescr = op.getdescr()
         assert isinstance(calldescr, BaseCallDescr)
         assert len(calldescr.arg_classes) == op.numargs() - 1
         size = calldescr.get_result_size(self.translate_support_code)
@@ -678,7 +678,7 @@
         self._consider_call(op, guard_op)
 
     def consider_call_assembler(self, op, guard_op):
-        descr = op.descr
+        descr = op.getdescr()
         assert isinstance(descr, LoopToken)
         jd = descr.outermost_jitdriver_sd
         assert jd is not None
@@ -739,10 +739,10 @@
 
     def consider_new(self, op):
         gc_ll_descr = self.assembler.cpu.gc_ll_descr
-        if gc_ll_descr.can_inline_malloc(op.descr):
-            self._fastpath_malloc(op, op.descr)
+        if gc_ll_descr.can_inline_malloc(op.getdescr()):
+            self._fastpath_malloc(op, op.getdescr())
         else:
-            args = gc_ll_descr.args_for_new(op.descr)
+            args = gc_ll_descr.args_for_new(op.getdescr())
             arglocs = [imm(x) for x in args]
             return self._call(op, arglocs)
 
@@ -813,13 +813,13 @@
         gc_ll_descr = self.assembler.cpu.gc_ll_descr
         if gc_ll_descr.get_funcptr_for_newarray is not None:
             # framework GC
-            args = self.assembler.cpu.gc_ll_descr.args_for_new_array(op.descr)
+            args = self.assembler.cpu.gc_ll_descr.args_for_new_array(op.getdescr())
             arglocs = [imm(x) for x in args]
             arglocs.append(self.loc(op.getarg(0)))
             return self._call(op, arglocs)
         # boehm GC (XXX kill the following code at some point)
         scale_of_field, basesize, ofs_length, _ = (
-            self._unpack_arraydescr(op.descr))
+            self._unpack_arraydescr(op.getdescr()))
         return self._malloc_varsize(basesize, ofs_length, scale_of_field,
                                     op.getarg(0), op.result)
 
@@ -843,7 +843,7 @@
         return imm(ofs), imm(size), ptr
 
     def consider_setfield_gc(self, op):
-        ofs_loc, size_loc, ptr = self._unpack_fielddescr(op.descr)
+        ofs_loc, size_loc, ptr = self._unpack_fielddescr(op.getdescr())
         assert isinstance(size_loc, ImmedLoc)
         if size_loc.value == 1:
             need_lower_byte = True
@@ -870,7 +870,7 @@
     consider_unicodesetitem = consider_strsetitem
 
     def consider_setarrayitem_gc(self, op):
-        scale, ofs, _, ptr = self._unpack_arraydescr(op.descr)
+        scale, ofs, _, ptr = self._unpack_arraydescr(op.getdescr())
         args = op.getarglist()
         base_loc  = self.rm.make_sure_var_in_reg(op.getarg(0), args)
         if scale == 0:
@@ -887,7 +887,7 @@
     consider_setarrayitem_raw = consider_setarrayitem_gc
 
     def consider_getfield_gc(self, op):
-        ofs_loc, size_loc, _ = self._unpack_fielddescr(op.descr)
+        ofs_loc, size_loc, _ = self._unpack_fielddescr(op.getdescr())
         args = op.getarglist()
         base_loc = self.rm.make_sure_var_in_reg(op.getarg(0), args)
         self.rm.possibly_free_vars(args)
@@ -899,7 +899,7 @@
     consider_getfield_gc_pure = consider_getfield_gc
 
     def consider_getarrayitem_gc(self, op):
-        scale, ofs, _, _ = self._unpack_arraydescr(op.descr)
+        scale, ofs, _, _ = self._unpack_arraydescr(op.getdescr())
         args = op.getarglist()
         base_loc = self.rm.make_sure_var_in_reg(op.getarg(0), args)
         ofs_loc = self.rm.make_sure_var_in_reg(op.getarg(1), args)
@@ -939,7 +939,7 @@
     consider_unicodelen = consider_strlen
 
     def consider_arraylen_gc(self, op):
-        arraydescr = op.descr
+        arraydescr = op.getdescr()
         assert isinstance(arraydescr, BaseArrayDescr)
         ofs = arraydescr.get_ofs_length(self.translate_support_code)
         args = op.getarglist()
@@ -961,7 +961,7 @@
     def consider_jump(self, op):
         assembler = self.assembler
         assert self.jump_target_descr is None
-        descr = op.descr
+        descr = op.getdescr()
         assert isinstance(descr, LoopToken)
         self.jump_target_descr = descr
         nonfloatlocs, floatlocs = assembler.target_arglocs(self.jump_target_descr)

Modified: pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/test/test_recompilation.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/test/test_recompilation.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/test/test_recompilation.py	Fri Sep 17 15:34:04 2010
@@ -47,7 +47,7 @@
         finish(i3, i4, i5, i6, i7, i8, i9, descr=fdescr2)
         '''
         bridge = self.attach_bridge(ops, loop, -2)
-        descr = loop.operations[2].descr
+        descr = loop.operations[2].getdescr()
         new = descr._x86_bridge_frame_depth
         assert descr._x86_bridge_param_depth == 0        
         # XXX: Maybe add enough ops to force stack on 64-bit as well?
@@ -114,8 +114,8 @@
         assert loop.token._x86_param_depth == 0
         # XXX: Maybe add enough ops to force stack on 64-bit as well?
         if IS_X86_32:
-            assert guard_op.descr._x86_bridge_frame_depth > loop_frame_depth
-        assert guard_op.descr._x86_bridge_param_depth == 0
+            assert guard_op.getdescr()._x86_bridge_frame_depth > loop_frame_depth
+        assert guard_op.getdescr()._x86_bridge_param_depth == 0
         self.cpu.set_future_value_int(0, 0)
         self.cpu.set_future_value_int(1, 0)
         self.cpu.set_future_value_int(2, 0)

Modified: pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/test/test_regalloc.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/test/test_regalloc.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/backend/x86/test/test_regalloc.py	Fri Sep 17 15:34:04 2010
@@ -160,7 +160,7 @@
         bridge = self.parse(ops, **kwds)
         assert ([box.type for box in bridge.inputargs] ==
                 [box.type for box in guard_op.fail_args])
-        faildescr = guard_op.descr
+        faildescr = guard_op.getdescr()
         self.cpu.compile_bridge(faildescr, bridge.inputargs, bridge.operations)
         return bridge
 
@@ -607,7 +607,7 @@
         '''
         bridge = self.attach_bridge(ops, loop, -2)
 
-        assert loop.operations[-2].descr._x86_bridge_param_depth == self.expected_param_depth(2)
+        assert loop.operations[-2].getdescr()._x86_bridge_param_depth == self.expected_param_depth(2)
 
         self.cpu.set_future_value_int(0, 4)
         self.cpu.set_future_value_int(1, 7)        
@@ -630,7 +630,7 @@
         '''
         bridge = self.attach_bridge(ops, loop, -2)
 
-        assert loop.operations[-2].descr._x86_bridge_param_depth == self.expected_param_depth(2)
+        assert loop.operations[-2].getdescr()._x86_bridge_param_depth == self.expected_param_depth(2)
 
         self.cpu.set_future_value_int(0, 4)
         self.cpu.set_future_value_int(1, 7)        

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/compile.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/compile.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/compile.py	Fri Sep 17 15:34:04 2010
@@ -65,7 +65,7 @@
     jitdriver_sd = metainterp.jitdriver_sd
     loop_token = make_loop_token(len(loop.inputargs), jitdriver_sd)
     loop.token = loop_token
-    loop.operations[-1].descr = loop_token     # patch the target of the JUMP
+    loop.operations[-1].setdescr(loop_token)     # patch the target of the JUMP
     try:
         old_loop_token = jitdriver_sd.warmstate.optimize_loop(
             metainterp_sd, old_loop_tokens, loop)
@@ -540,7 +540,7 @@
     op = new_loop.operations[-1]
     if not isinstance(target_loop_token, TerminatingLoopToken):
         # normal case
-        op.descr = target_loop_token     # patch the jump target
+        op.setdescr(target_loop_token)     # patch the jump target
     else:
         # The target_loop_token is a pseudo loop token,
         # e.g. loop_tokens_done_with_this_frame_void[0]

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/graphpage.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/graphpage.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/graphpage.py	Fri Sep 17 15:34:04 2010
@@ -17,13 +17,13 @@
     for graph, highlight in graphs:
         for op in graph.get_operations():
             if is_interesting_guard(op):
-                graphs.append((SubGraph(op.descr._debug_suboperations),
+                graphs.append((SubGraph(op.getdescr()._debug_suboperations),
                                highlight))
     graphpage = ResOpGraphPage(graphs, errmsg)
     graphpage.display()
 
 def is_interesting_guard(op):
-    return hasattr(op.descr, '_debug_suboperations')
+    return hasattr(op.getdescr(), '_debug_suboperations')
 
 
 class ResOpGraphPage(GraphPage):
@@ -155,7 +155,7 @@
             op = operations[opindex]
             lines.append(repr(op))
             if is_interesting_guard(op):
-                tgt = op.descr._debug_suboperations[0]
+                tgt = op.getdescr()._debug_suboperations[0]
                 tgt_g, tgt_i = self.all_operations[tgt]
                 self.genedge((graphindex, opstartindex),
                              (tgt_g, tgt_i),
@@ -168,7 +168,7 @@
                              (graphindex, opindex))
                 break
         if op.getopnum() == rop.JUMP:
-            tgt = op.descr
+            tgt = op.getdescr()
             tgt_g = -1
             if tgt is None:
                 tgt_g = graphindex

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/history.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/history.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/history.py	Fri Sep 17 15:34:04 2010
@@ -769,9 +769,9 @@
                 if isinstance(box, Box):
                     assert box in seen
             if op.is_guard():
-                assert op.descr is not None
-                if hasattr(op.descr, '_debug_suboperations'):
-                    ops = op.descr._debug_suboperations
+                assert op.getdescr() is not None
+                if hasattr(op.getdescr(), '_debug_suboperations'):
+                    ops = op.getdescr()._debug_suboperations
                     TreeLoop.check_consistency_of_branch(ops, seen.copy())
                 for box in op.fail_args or []:
                     if box is not None:
@@ -786,7 +786,7 @@
                 seen[box] = True
         assert operations[-1].is_final()
         if operations[-1].getopnum() == rop.JUMP:
-            target = operations[-1].descr
+            target = operations[-1].getdescr()
             if target is not None:
                 assert isinstance(target, LoopToken)
 
@@ -816,9 +816,9 @@
         return
     result.extend(operations)
     for op in operations:
-        if op.is_guard() and op.descr:
-            if hasattr(op.descr, '_debug_suboperations'):
-                ops = op.descr._debug_suboperations
+        if op.is_guard() and op.getdescr():
+            if hasattr(op.getdescr(), '_debug_suboperations'):
+                ops = op.getdescr()._debug_suboperations
                 _list_all_operations(result, ops, omit_finish)
 
 # ____________________________________________________________

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/logger.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/logger.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/logger.py	Fri Sep 17 15:34:04 2010
@@ -89,8 +89,8 @@
             else:
                 res = ""
             is_guard = op.is_guard()
-            if op.descr is not None:
-                descr = op.descr
+            if op.getdescr() is not None:
+                descr = op.getdescr()
                 if is_guard and self.guard_number:
                     index = self.metainterp_sd.cpu.get_fail_descr_number(descr)
                     r = "<Guard%d>" % index

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimize.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimize.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimize.py	Fri Sep 17 15:34:04 2010
@@ -43,7 +43,7 @@
     finder.find_nodes_bridge(bridge)
     for old_loop_token in old_loop_tokens:
         if finder.bridge_matches(old_loop_token.specnodes):
-            bridge.operations[-1].descr = old_loop_token   # patch jump target
+            bridge.operations[-1].setdescr(old_loop_token)   # patch jump target
             optimize_bridge_1(metainterp_sd, bridge)
             return old_loop_token
     return None

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizefindnode.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizefindnode.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizefindnode.py	Fri Sep 17 15:34:04 2010
@@ -163,7 +163,7 @@
                 argboxes = [self.get_constant_box(op.getarg(i))
                             for i in range(op.numargs())]
                 resbox = execute_nonspec(self.cpu, None,
-                                         op.getopnum(), argboxes, op.descr)
+                                         op.getopnum(), argboxes, op.getdescr())
                 self.set_constant_node(op.result, resbox.constbox())
         # default case: mark the arguments as escaping
         for i in range(op.numargs()):
@@ -187,7 +187,7 @@
 
     def find_nodes_NEW(self, op):
         instnode = InstanceNode()
-        instnode.structdescr = op.descr
+        instnode.structdescr = op.getdescr()
         self.nodes[op.result] = instnode
 
     def find_nodes_NEW_ARRAY(self, op):
@@ -197,7 +197,7 @@
             return     # var-sized arrays are not virtual
         arraynode = InstanceNode()
         arraynode.arraysize = lengthbox.getint()
-        arraynode.arraydescr = op.descr
+        arraynode.arraydescr = op.getdescr()
         self.nodes[op.result] = arraynode
 
     def find_nodes_ARRAYLEN_GC(self, op):
@@ -226,7 +226,7 @@
         if instnode.escaped:
             fieldnode.mark_escaped()
             return     # nothing to be gained from tracking the field
-        field = op.descr
+        field = op.getdescr()
         assert isinstance(field, AbstractValue)
         if instnode.curfields is None:
             instnode.curfields = {}
@@ -237,7 +237,7 @@
         instnode = self.getnode(op.getarg(0))
         if instnode.escaped:
             return     # nothing to be gained from tracking the field
-        field = op.descr
+        field = op.getdescr()
         assert isinstance(field, AbstractValue)
         if instnode.curfields is not None and field in instnode.curfields:
             fieldnode = instnode.curfields[field]

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/heap.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/heap.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/heap.py	Fri Sep 17 15:34:04 2010
@@ -117,7 +117,7 @@
             if opnum == rop.CALL_ASSEMBLER:
                 effectinfo = None
             else:
-                effectinfo = op.descr.get_extra_info()
+                effectinfo = op.getdescr().get_extra_info()
             if effectinfo is not None:
                 # XXX we can get the wrong complexity here, if the lists
                 # XXX stored on effectinfo are large
@@ -203,20 +203,20 @@
 
     def force_lazy_setfield_if_necessary(self, op, value, write=False):
         try:
-            op1 = self.lazy_setfields[op.descr]
+            op1 = self.lazy_setfields[op.getdescr()]
         except KeyError:
             if write:
-                self.lazy_setfields_descrs.append(op.descr)
+                self.lazy_setfields_descrs.append(op.getdescr())
         else:
             if self.getvalue(op1.getarg(0)) is not value:
-                self.force_lazy_setfield(op.descr)
+                self.force_lazy_setfield(op.getdescr())
 
     def optimize_GETFIELD_GC(self, op):
         value = self.getvalue(op.getarg(0))
         self.force_lazy_setfield_if_necessary(op, value)
         # check if the field was read from another getfield_gc just before
         # or has been written to recently
-        fieldvalue = self.read_cached_field(op.descr, value)
+        fieldvalue = self.read_cached_field(op.getdescr(), value)
         if fieldvalue is not None:
             self.make_equal_to(op.result, fieldvalue)
             return
@@ -226,34 +226,34 @@
         self.emit_operation(op) # FIXME: These might need constant propagation?
         # then remember the result of reading the field
         fieldvalue = self.getvalue(op.result)
-        self.cache_field_value(op.descr, value, fieldvalue)
+        self.cache_field_value(op.getdescr(), value, fieldvalue)
 
     def optimize_SETFIELD_GC(self, op):
         value = self.getvalue(op.getarg(0))
         fieldvalue = self.getvalue(op.getarg(1))
         self.force_lazy_setfield_if_necessary(op, value, write=True)
-        self.lazy_setfields[op.descr] = op
+        self.lazy_setfields[op.getdescr()] = op
         # remember the result of future reads of the field
-        self.cache_field_value(op.descr, value, fieldvalue, write=True)
+        self.cache_field_value(op.getdescr(), value, fieldvalue, write=True)
 
     def optimize_GETARRAYITEM_GC(self, op):
         value = self.getvalue(op.getarg(0))
         indexvalue = self.getvalue(op.getarg(1))
-        fieldvalue = self.read_cached_arrayitem(op.descr, value, indexvalue)
+        fieldvalue = self.read_cached_arrayitem(op.getdescr(), value, indexvalue)
         if fieldvalue is not None:
             self.make_equal_to(op.result, fieldvalue)
             return
         ###self.optimizer.optimize_default(op)
         self.emit_operation(op) # FIXME: These might need constant propagation?
         fieldvalue = self.getvalue(op.result)
-        self.cache_arrayitem_value(op.descr, value, indexvalue, fieldvalue)
+        self.cache_arrayitem_value(op.getdescr(), value, indexvalue, fieldvalue)
 
     def optimize_SETARRAYITEM_GC(self, op):
         self.emit_operation(op)
         value = self.getvalue(op.getarg(0))
         fieldvalue = self.getvalue(op.getarg(2))
         indexvalue = self.getvalue(op.getarg(1))
-        self.cache_arrayitem_value(op.descr, value, indexvalue, fieldvalue,
+        self.cache_arrayitem_value(op.getdescr(), value, indexvalue, fieldvalue,
                                    write=True)
 
     def propagate_forward(self, op):

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/optimizer.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/optimizer.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/optimizer.py	Fri Sep 17 15:34:04 2010
@@ -340,7 +340,7 @@
 
     def store_final_boxes_in_guard(self, op):
         ###pendingfields = self.heap_op_optimizer.force_lazy_setfields_for_guard()
-        descr = op.descr
+        descr = op.getdescr()
         assert isinstance(descr, compile.ResumeGuardDescr)
         modifier = resume.ResumeDataVirtualAdder(descr, self.resumedata_memo)
         newboxes = modifier.finish(self.values, self.pendingfields)
@@ -395,7 +395,7 @@
                 argboxes = [self.get_constant_box(op.getarg(i))
                             for i in range(op.numargs())]
                 resbox = execute_nonspec(self.cpu, None,
-                                         op.getopnum(), argboxes, op.descr)
+                                         op.getopnum(), argboxes, op.getdescr())
                 self.make_constant(op.result, resbox.constbox())
                 if is_ovf:
                     self.i += 1 # skip next operation, it is the unneeded guard
@@ -404,7 +404,7 @@
             # did we do the exact same operation already?
             args = self.make_args_key(op)
             oldop = self.pure_operations.get(args, None)
-            if oldop is not None and oldop.descr is op.descr:
+            if oldop is not None and oldop.getdescr() is op.getdescr():
                 assert oldop.getopnum() == op.getopnum()
                 self.make_equal_to(op.result, self.getvalue(oldop.result))
                 if is_ovf:

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/rewrite.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/rewrite.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/rewrite.py	Fri Sep 17 15:34:04 2010
@@ -24,7 +24,7 @@
         
     def try_boolinvers(self, op, targs):
         oldop = self.optimizer.pure_operations.get(targs, None)
-        if oldop is not None and oldop.descr is op.descr:
+        if oldop is not None and oldop.getdescr() is op.getdescr():
             value = self.getvalue(oldop.result)
             if value.is_constant():
                 if value.box.same_constant(CONST_1):
@@ -50,7 +50,7 @@
             oldopnum = opboolreflex[op.getopnum()] # FIXME: add INT_ADD, INT_MUL
             targs = [args[1], args[0], ConstInt(oldopnum)]
             oldop = self.optimizer.pure_operations.get(targs, None)
-            if oldop is not None and oldop.descr is op.descr:
+            if oldop is not None and oldop.getdescr() is op.getdescr():
                 self.make_equal_to(op.result, self.getvalue(oldop.result))
                 return True
         except KeyError:
@@ -139,7 +139,7 @@
         # replace CALL_PURE with just CALL
         args = op.getarglist()[1:]
         self.emit_operation(ResOperation(rop.CALL, args, op.result,
-                                         op.descr))
+                                         op.getdescr()))
     def optimize_guard(self, op, constbox, emit_operation=True):
         value = self.getvalue(op.getarg(0))
         if value.is_constant():
@@ -182,9 +182,9 @@
                                              args = [old_guard_op.getarg(0), op.getarg(1)])
             self.optimizer.newoperations[value.last_guard_index] = new_guard_op
             # hack hack hack.  Change the guard_opnum on
-            # new_guard_op.descr so that when resuming,
+            # new_guard_op.getdescr() so that when resuming,
             # the operation is not skipped by pyjitpl.py.
-            descr = new_guard_op.descr
+            descr = new_guard_op.getdescr()
             assert isinstance(descr, compile.ResumeGuardDescr)
             descr.guard_opnum = rop.GUARD_VALUE
             descr.make_a_counter_per_value(new_guard_op)
@@ -222,9 +222,9 @@
                                          args = [old_guard_op.getarg(0), op.getarg(1)])
                 self.optimizer.newoperations[value.last_guard_index] = new_guard_op
                 # hack hack hack.  Change the guard_opnum on
-                # new_guard_op.descr so that when resuming,
+                # new_guard_op.getdescr() so that when resuming,
                 # the operation is not skipped by pyjitpl.py.
-                descr = new_guard_op.descr
+                descr = new_guard_op.getdescr()
                 assert isinstance(descr, compile.ResumeGuardDescr)
                 descr.guard_opnum = rop.GUARD_NONNULL_CLASS
                 emit_operation = False
@@ -314,7 +314,7 @@
         value = self.getvalue(op.getarg(0))
         realclassbox = value.get_constant_class(self.optimizer.cpu)
         if realclassbox is not None:
-            checkclassbox = self.optimizer.cpu.typedescr2classbox(op.descr)
+            checkclassbox = self.optimizer.cpu.typedescr2classbox(op.getdescr())
             result = self.optimizer.cpu.ts.subclassOf(self.optimizer.cpu,
                                                       realclassbox, 
                                                       checkclassbox)

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/virtualize.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/virtualize.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/optimizeopt/virtualize.py	Fri Sep 17 15:34:04 2010
@@ -285,7 +285,7 @@
     def optimize_JUMP(self, op):
         orgop = self.optimizer.loop.operations[-1]
         exitargs = []
-        target_loop_token = orgop.descr
+        target_loop_token = orgop.getdescr()
         assert isinstance(target_loop_token, LoopToken)
         specnodes = target_loop_token.specnodes
         assert op.numargs() == len(specnodes)
@@ -344,7 +344,7 @@
         if value.is_virtual():
             # optimizefindnode should ensure that fieldvalue is found
             assert isinstance(value, AbstractVirtualValue)
-            fieldvalue = value.getfield(op.descr, None)
+            fieldvalue = value.getfield(op.getdescr(), None)
             assert fieldvalue is not None
             self.make_equal_to(op.result, fieldvalue)
         else:
@@ -360,7 +360,7 @@
         value = self.getvalue(op.getarg(0))
         fieldvalue = self.getvalue(op.getarg(1))
         if value.is_virtual():
-            value.setfield(op.descr, fieldvalue)
+            value.setfield(op.getdescr(), fieldvalue)
         else:
             value.ensure_nonnull()
             ###self.heap_op_optimizer.optimize_SETFIELD_GC(op, value, fieldvalue)
@@ -370,7 +370,7 @@
         self.make_virtual(op.getarg(0), op.result, op)
 
     def optimize_NEW(self, op):
-        self.make_vstruct(op.descr, op.result, op)
+        self.make_vstruct(op.getdescr(), op.result, op)
 
     def optimize_NEW_ARRAY(self, op):
         sizebox = self.get_constant_box(op.getarg(0))
@@ -379,8 +379,8 @@
             # build a new one with the ConstInt argument
             if not isinstance(op.getarg(0), ConstInt):
                 op = ResOperation(rop.NEW_ARRAY, [sizebox], op.result,
-                                  descr=op.descr)
-            self.make_varray(op.descr, sizebox.getint(), op.result, op)
+                                  descr=op.getdescr())
+            self.make_varray(op.getdescr(), sizebox.getint(), op.result, op)
         else:
             ###self.optimize_default(op)
             self.emit_operation(op)

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/resoperation.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/resoperation.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/resoperation.py	Fri Sep 17 15:34:04 2010
@@ -24,6 +24,11 @@
         self.result = result
         self.setdescr(descr)
 
+    def __setattr__(self, name, attr):
+        if name == 'descr':
+            assert False
+        object.__setattr__(self, name, attr)
+
     def copy_and_change(self, opnum, args=None, result=None, descr=None):
         "shallow copy: the returned operation is meant to be used in place of self"
         if args is None:
@@ -62,7 +67,7 @@
         self.fail_args = fail_args
 
     def getdescr(self):
-        return self.descr
+        return self._descr
 
     def setdescr(self, descr):
         # for 'call', 'new', 'getfield_gc'...: the descr is a prebuilt
@@ -72,10 +77,10 @@
         # cpu.calldescrof(), and cpu.typedescrof().
         from pypy.jit.metainterp.history import check_descr
         check_descr(descr)
-        self.descr = descr
+        self._descr = descr
 
     def clone(self):
-        descr = self.descr
+        descr = self._descr
         if descr is not None:
             descr = descr.clone_if_mutable()
         op = ResOperation(self._opnum, self._args, self.result, descr)
@@ -98,12 +103,12 @@
             prefix = "%s:%s   " % (self.name, self.pc)
         else:
             prefix = ""
-        if self.descr is None or we_are_translated():
+        if self._descr is None or we_are_translated():
             return '%s%s%s(%s)' % (prefix, sres, self.getopname(),
                                  ', '.join([str(a) for a in self._args]))
         else:
             return '%s%s%s(%s, descr=%r)' % (prefix, sres, self.getopname(),
-                            ', '.join([str(a) for a in self._args]), self.descr)
+                            ', '.join([str(a) for a in self._args]), self._descr)
 
     def getopname(self):
         try:

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/simple_optimize.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/simple_optimize.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/simple_optimize.py	Fri Sep 17 15:34:04 2010
@@ -18,7 +18,7 @@
         op = ResOperation(rop.CALL, args, op.result, descr=descr)
     elif op.getopnum() == rop.CALL_PURE:
         args = op.getarglist()[1:]
-        op = ResOperation(rop.CALL, args, op.result, op.descr)
+        op = ResOperation(rop.CALL, args, op.result, op.getdescr())
     elif op.getopnum() == rop.VIRTUAL_REF:
         op = ResOperation(rop.SAME_AS, [op.getarg(0)], op.result)
     elif op.getopnum() == rop.VIRTUAL_REF_FINISH:
@@ -38,7 +38,7 @@
         newoperations = []
         for op in loop.operations:
             if op.is_guard():
-                descr = op.descr
+                descr = op.getdescr()
                 assert isinstance(descr, compile.ResumeGuardDescr)
                 modifier = resume.ResumeDataVirtualAdder(descr, memo)
                 newboxes = modifier.finish(EMPTY_VALUES)

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_oparser.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_oparser.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_oparser.py	Fri Sep 17 15:34:04 2010
@@ -19,7 +19,7 @@
     assert [op.getopnum() for op in loop.operations] == [rop.INT_ADD, rop.INT_SUB,
                                                     rop.FINISH]
     assert len(loop.inputargs) == 2
-    assert loop.operations[-1].descr
+    assert loop.operations[-1].getdescr()
 
 def test_const_ptr_subops():
     x = """
@@ -30,7 +30,7 @@
     vtable = lltype.nullptr(S)
     loop = parse(x, None, locals())
     assert len(loop.operations) == 1
-    assert loop.operations[0].descr
+    assert loop.operations[0].getdescr()
     assert loop.operations[0].fail_args == []
 
 def test_descr():
@@ -43,7 +43,7 @@
     """
     stuff = Xyz()
     loop = parse(x, None, locals())
-    assert loop.operations[0].descr is stuff
+    assert loop.operations[0].getdescr() is stuff
 
 def test_after_fail():
     x = """
@@ -64,7 +64,7 @@
     """
     stuff = Xyz()
     loop = parse(x, None, locals())
-    assert loop.operations[0].descr is stuff
+    assert loop.operations[0].getdescr() is stuff
 
 def test_boxname():
     x = """
@@ -119,7 +119,7 @@
     jump()
     '''
     loop = parse(x)
-    assert loop.operations[0].descr is loop.token
+    assert loop.operations[0].getdescr() is loop.token
 
 def test_jump_target_other():
     looptoken = LoopToken()
@@ -128,7 +128,7 @@
     jump(descr=looptoken)
     '''
     loop = parse(x, namespace=locals())
-    assert loop.operations[0].descr is looptoken
+    assert loop.operations[0].getdescr() is looptoken
 
 def test_floats():
     x = '''

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_optimizeopt.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_optimizeopt.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_optimizeopt.py	Fri Sep 17 15:34:04 2010
@@ -151,7 +151,7 @@
         else:
             remap[op2.result] = op1.result
         if op1.getopnum() != rop.JUMP:      # xxx obscure
-            assert op1.descr == op2.descr
+            assert op1.getdescr() == op2.getdescr()
         if op1.fail_args or op2.fail_args:
             assert len(op1.fail_args) == len(op2.fail_args)
             if strict_fail_args:
@@ -2327,7 +2327,7 @@
         from pypy.jit.metainterp.test.test_resume import MyMetaInterp
         guard_op, = [op for op in self.loop.operations if op.is_guard()]
         fail_args = guard_op.fail_args
-        fdescr = guard_op.descr
+        fdescr = guard_op.getdescr()
         assert fdescr.guard_opnum == guard_opnum
         reader = ResumeDataFakeReader(fdescr, fail_args,
                                       MyMetaInterp(self.cpu))

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_recursive.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_recursive.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_recursive.py	Fri Sep 17 15:34:04 2010
@@ -319,8 +319,8 @@
         for loop in get_stats().loops:
             assert len(loop.operations) <= length + 5 # because we only check once per metainterp bytecode
             for op in loop.operations:
-                if op.is_guard() and hasattr(op.descr, '_debug_suboperations'):
-                    assert len(op.descr._debug_suboperations) <= length + 5
+                if op.is_guard() and hasattr(op.getdescr(), '_debug_suboperations'):
+                    assert len(op.getdescr()._debug_suboperations) <= length + 5
 
     def test_inline_trace_limit(self):
         myjitdriver = JitDriver(greens=[], reds=['n'])

Modified: pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_virtualref.py
==============================================================================
--- pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_virtualref.py	(original)
+++ pypy/branch/resoperation-refactoring/pypy/jit/metainterp/test/test_virtualref.py	Fri Sep 17 15:34:04 2010
@@ -88,7 +88,7 @@
         cpu.get_latest_value_int = lambda i:guard_op.fail_args[i].getint()
         cpu.get_latest_value_ref = lambda i:guard_op.fail_args[i].getref_base()
         cpu.clear_latest_values = lambda count: None
-        resumereader = ResumeDataDirectReader(cpu, guard_op.descr)
+        resumereader = ResumeDataDirectReader(cpu, guard_op.getdescr())
         vrefinfo = self.metainterp.staticdata.virtualref_info
         lst = []
         vrefinfo.continue_tracing = lambda vref, virtual: \
@@ -100,7 +100,7 @@
                                lst[0][0])  # assert correct type
         #
         # try reloading from pyjitpl's point of view
-        self.metainterp.rebuild_state_after_failure(guard_op.descr)
+        self.metainterp.rebuild_state_after_failure(guard_op.getdescr())
         assert len(self.metainterp.framestack) == 1
         assert len(self.metainterp.virtualref_boxes) == 2
         assert self.metainterp.virtualref_boxes[0].value == bxs1[0].value



More information about the Pypy-commit mailing list