Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r66033:8be5fec47a23 Date: 2013-08-09 10:56 +0200 http://bitbucket.org/pypy/pypy/changeset/8be5fec47a23/
Log: Test and fix for an issue reported by krono on irc diff --git a/rpython/rlib/jit.py b/rpython/rlib/jit.py --- a/rpython/rlib/jit.py +++ b/rpython/rlib/jit.py @@ -1003,6 +1003,7 @@ else: if condition: function(*args) +conditional_call._annenforceargs_ = [bool, None, None] class ConditionalCallEntry(ExtRegistryEntry): _about_ = _jit_conditional_call diff --git a/rpython/rlib/test/test_jit.py b/rpython/rlib/test/test_jit.py --- a/rpython/rlib/test/test_jit.py +++ b/rpython/rlib/test/test_jit.py @@ -3,10 +3,13 @@ from rpython.conftest import option from rpython.annotator.model import UnionError from rpython.rlib.jit import (hint, we_are_jitted, JitDriver, elidable_promote, - JitHintError, oopspec, isconstant) + JitHintError, oopspec, isconstant, conditional_call) from rpython.rlib.rarithmetic import r_uint from rpython.rtyper.test.tool import BaseRtypingTest from rpython.rtyper.lltypesystem import lltype +from rpython.translator.translator import TranslationContext +from rpython.rtyper.annlowlevel import MixLevelHelperAnnotator +from rpython.annotator import model as annmodel def test_oopspec(): @@ -247,3 +250,17 @@ # this used to fail on 64-bit, because r_uint == r_ulonglong myjitdriver = JitDriver(greens=['i1'], reds=[]) myjitdriver.jit_merge_point(i1=r_uint(42)) + + def test_conditional_call(self): + def g(): + pass + def f(n): + conditional_call(n >= 0, g) + def later(m): + conditional_call(m, g) + t = TranslationContext() + t.buildannotator().build_types(f, [int]) + t.buildrtyper().specialize() + mix = MixLevelHelperAnnotator(t.rtyper) + mix.getgraph(later, [annmodel.s_Bool], annmodel.s_None) + mix.finish() _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit