[pypy-commit] pypy optresult: setfields
fijal
noreply at buildbot.pypy.org
Sat Mar 14 17:51:34 CET 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult
Changeset: r76369:d7dcc6e2867f
Date: 2015-03-13 10:06 +0200
http://bitbucket.org/pypy/pypy/changeset/d7dcc6e2867f/
Log: setfields
diff --git a/rpython/jit/metainterp/optimizeopt/heap.py b/rpython/jit/metainterp/optimizeopt/heap.py
--- a/rpython/jit/metainterp/optimizeopt/heap.py
+++ b/rpython/jit/metainterp/optimizeopt/heap.py
@@ -241,7 +241,7 @@
d.produce_potential_short_preamble_ops(self.optimizer, sb, descr)
def invalidate_descr(self, descr, lst=None):
- if lst is not None:
+ if lst is None:
lst = self.infos_to_invalidate.get(descr, None)
if lst is None:
return
@@ -523,15 +523,20 @@
optimize_GETFIELD_GC_PURE_F = optimize_GETFIELD_GC_PURE_I
def optimize_SETFIELD_GC(self, op):
+ #opnum = OpHelpers.getfield_pure_for_descr(op.getdescr())
+ #if self.has_pure_result(opnum, [op.getarg(0)],
+ # op.getdescr()):
+ # os.write(2, '[bogus _immutable_field_ declaration: %s]\n' %
+ # (op.getdescr().repr_of_descr()))
+ # raise BogusPureField
+ #
+ opinfo = self.ensure_ptr_info_arg0(op)
+ self.invalidate_descr(op.getdescr())
+ opinfo.setfield(op.getdescr(), self.get_box_replacement(op.getarg(1)),
+ self)
+ # clear all the caches for this descr
self.emit_operation(op)
return
- opnum = OpHelpers.getfield_pure_for_descr(op.getdescr())
- if self.has_pure_result(opnum, [op.getarg(0)],
- op.getdescr()):
- os.write(2, '[bogus _immutable_field_ declaration: %s]\n' %
- (op.getdescr().repr_of_descr()))
- raise BogusPureField
- #
cf = self.field_cache(op.getdescr())
cf.do_setfield(self, op)
diff --git a/rpython/jit/metainterp/optimizeopt/info.py b/rpython/jit/metainterp/optimizeopt/info.py
--- a/rpython/jit/metainterp/optimizeopt/info.py
+++ b/rpython/jit/metainterp/optimizeopt/info.py
@@ -87,7 +87,7 @@
def setfield(self, descr, op, optheap=None):
if not self.is_virtual():
- if self._fields[descr.index] is not None:
+ if self._fields[descr.index] is None:
assert optheap is not None
# we should only call it with virtuals without optheap
optheap.register_dirty_field(descr, self)
More information about the pypy-commit
mailing list