Author: Richard Plangger <r...@pasra.at> Branch: vecopt Changeset: r78578:a05aff84b29f Date: 2015-07-17 15:28 +0200 http://bitbucket.org/pypy/pypy/changeset/a05aff84b29f/
Log: added clone to a descriptor. I used invent_fail_descr before that, which did the same thing, but in a huge switch statement diff --git a/rpython/jit/metainterp/compile.py b/rpython/jit/metainterp/compile.py --- a/rpython/jit/metainterp/compile.py +++ b/rpython/jit/metainterp/compile.py @@ -674,6 +674,11 @@ assert 0, box.type self.status = ty | (r_uint(i) << self.ST_SHIFT) + def clone(self): + cloned = self.__class__() + cloned.copy_all_attributes_from(self) + return cloned + class ResumeGuardNonnullDescr(ResumeGuardDescr): guard_opnum = rop.GUARD_NONNULL @@ -815,6 +820,13 @@ hidden_all_virtuals = obj.hide(metainterp_sd.cpu) metainterp_sd.cpu.set_savedata_ref(deadframe, hidden_all_virtuals) + def clone(self): + cloned = self.__class__() + cloned.metainterp_sd = self.metainterp_sd + cloned.jitdriver_sd = self.jitdriver_sd + cloned.copy_all_attributes_from(self) + return cloned + def invent_fail_descr_for_op(opnum, optimizer): if opnum == rop.GUARD_NOT_FORCED or opnum == rop.GUARD_NOT_FORCED_2: resumedescr = ResumeGuardForcedDescr() diff --git a/rpython/jit/metainterp/history.py b/rpython/jit/metainterp/history.py --- a/rpython/jit/metainterp/history.py +++ b/rpython/jit/metainterp/history.py @@ -863,7 +863,14 @@ return version def copy_operations(self): - return [ op.clone() for op in self.operations ] + operations = [] + for op in self.operations: + cloned = op.clone() + operations.append(cloned) + if cloned.getdescr(): + descr = cloned.getdescr().clone() + cloned.setdescr(descr) + return operations def get_display_text(self): # for graphpage.py return self.name + '\n' + repr(self.inputargs) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit