Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r49839:cd9529760135 Date: 2011-11-26 20:37 +0100 http://bitbucket.org/pypy/pypy/changeset/cd9529760135/
Log: Clean-up. diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py b/pypy/jit/metainterp/optimizeopt/optimizer.py --- a/pypy/jit/metainterp/optimizeopt/optimizer.py +++ b/pypy/jit/metainterp/optimizeopt/optimizer.py @@ -564,8 +564,11 @@ descr = op.getdescr() assert isinstance(descr, compile.ResumeGuardDescr) modifier = resume.ResumeDataVirtualAdder(descr, self.resumedata_memo) - newboxes = modifier.finish(self.values, self.pendingfields) - if len(newboxes) > self.metainterp_sd.options.failargs_limit: # XXX be careful here + try: + newboxes = modifier.finish(self.values, self.pendingfields) + if len(newboxes) > self.metainterp_sd.options.failargs_limit: + raise resume.TagOverflow + except resume.TagOverflow: compile.giveup() descr.store_final_boxes(op, newboxes) # diff --git a/pypy/jit/metainterp/resume.py b/pypy/jit/metainterp/resume.py --- a/pypy/jit/metainterp/resume.py +++ b/pypy/jit/metainterp/resume.py @@ -93,14 +93,14 @@ TAGMASK = 3 -def tag(value, tagbits, giveup=True): +class TagOverflow(Exception): + pass + +def tag(value, tagbits): assert 0 <= tagbits <= 3 sx = value >> 13 if sx != 0 and sx != -1: - if giveup: - from pypy.jit.metainterp import compile - compile.giveup() - raise ValueError + raise TagOverflow return rffi.r_short(value<<2|tagbits) def untag(value): @@ -154,8 +154,8 @@ # unhappiness, probably a symbolic return self._newconst(const) try: - return tag(val, TAGINT, giveup=False) - except ValueError: + return tag(val, TAGINT) + except TagOverflow: pass tagged = self.large_ints.get(val, UNASSIGNED) if not tagged_eq(tagged, UNASSIGNED): @@ -431,8 +431,7 @@ fieldnum = self._gettagged(fieldbox) # the index is limited to 2147483647 (64-bit machines only) if itemindex > 2147483647: - from pypy.jit.metainterp import compile - compile.giveup() + raise TagOverflow itemindex = rffi.cast(rffi.INT, itemindex) # rd_pendingfields[i].lldescr = lldescr diff --git a/pypy/jit/metainterp/test/test_resume.py b/pypy/jit/metainterp/test/test_resume.py --- a/pypy/jit/metainterp/test/test_resume.py +++ b/pypy/jit/metainterp/test/test_resume.py @@ -23,11 +23,11 @@ assert tag(-3, 2) == rffi.r_short(-3<<2|2) assert tag((1<<13)-1, 3) == rffi.r_short(((1<<15)-1)|3) assert tag(-1<<13, 3) == rffi.r_short((-1<<15)|3) - py.test.raises(ValueError, tag, 3, 5) - py.test.raises(ValueError, tag, 1<<13, 0) - py.test.raises(ValueError, tag, (1<<13)+1, 0) - py.test.raises(ValueError, tag, (-1<<13)-1, 0) - py.test.raises(ValueError, tag, (-1<<13)-5, 0) + py.test.raises(AssertionError, tag, 3, 5) + py.test.raises(TagOverflow, tag, 1<<13, 0) + py.test.raises(TagOverflow, tag, (1<<13)+1, 0) + py.test.raises(TagOverflow, tag, (-1<<13)-1, 0) + py.test.raises(TagOverflow, tag, (-1<<13)-5, 0) def test_untag(): assert untag(tag(3, 1)) == (3, 1) @@ -1318,8 +1318,7 @@ assert rffi.cast(lltype.Signed, pf[1].fieldnum) == 1062 assert rffi.cast(lltype.Signed, pf[1].itemindex) == 2147483647 # - from pypy.jit.metainterp.pyjitpl import SwitchToBlackhole - py.test.raises(SwitchToBlackhole, modifier._add_pending_fields, + py.test.raises(TagOverflow, modifier._add_pending_fields, [(array_a, 42, 63, 2147483648)]) def test_resume_reader_fields_and_arrayitems(): _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit