Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r45678:e911b2205846 Date: 2011-07-16 20:07 +0200 http://bitbucket.org/pypy/pypy/changeset/e911b2205846/
Log: Fix the test by always clear()ing _cache_fields if can_cache=False. Rewrote some redundant try:except KeyError: code by using the new can_cache=False flag. diff --git a/pypy/jit/metainterp/optimizeopt/heap.py b/pypy/jit/metainterp/optimizeopt/heap.py --- a/pypy/jit/metainterp/optimizeopt/heap.py +++ b/pypy/jit/metainterp/optimizeopt/heap.py @@ -91,6 +91,8 @@ structvalue = optheap.getvalue(op.getarg(0)) fieldvalue = optheap.getvalue(op.getarglist()[-1]) self.remember_field_value(structvalue, fieldvalue) + elif not can_cache: + self._cached_fields.clear() def get_reconstructed(self, optimizer, valuemap): assert self._lazy_setfield is None @@ -204,20 +206,9 @@ for arraydescr in effectinfo.readonly_descrs_arrays: self.force_lazy_setarrayitem(arraydescr) for fielddescr in effectinfo.write_descrs_fields: - self.force_lazy_setfield(fielddescr) - try: - cf = self.cached_fields[fielddescr] - cf._cached_fields.clear() - except KeyError: - pass + self.force_lazy_setfield(fielddescr, can_cache=False) for arraydescr in effectinfo.write_descrs_arrays: - self.force_lazy_setarrayitem(arraydescr) - try: - submap = self.cached_arrayitems[arraydescr] - for cf in submap.itervalues(): - cf._cached_fields.clear() - except KeyError: - pass + self.force_lazy_setarrayitem(arraydescr, can_cache=False) if effectinfo.check_forces_virtual_or_virtualizable(): vrefinfo = self.optimizer.metainterp_sd.virtualref_info self.force_lazy_setfield(vrefinfo.descr_forced) @@ -240,12 +231,12 @@ if value in cf._cached_fields: cf._cached_fields[newvalue] = cf._cached_fields[value] - def force_lazy_setfield(self, descr): + def force_lazy_setfield(self, descr, can_cache=True): try: cf = self.cached_fields[descr] except KeyError: return - cf.force_lazy_setfield(self) + cf.force_lazy_setfield(self, can_cache) def force_lazy_setarrayitem(self, arraydescr, can_cache=True): try: _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit