[pypy-dev] [pypy-commit] pypy default: Merge a branch that makes space.isinstance(w_obj, <a constant>) do a fastpath

Armin Rigo arigo at tunes.org
Thu Sep 29 10:51:12 CEST 2011


Hi Maciek,

On Thu, Sep 29, 2011 at 10:33, Carl Friedrich Bolz <cfbolz at gmx.de> wrote:
>> +class Entry(ExtRegistryEntry):
>> +    _about_ = is_constant
>> +
>> +    def compute_result_annotation(self, s_arg):
>> +        from pypy.annotation import model
>> +        r = model.SomeBool()
>> +        r.const = s_arg.is_constant()
>> +        return r

This is wrong.  We tried at some point to have is_constant() but
failed.  The issue is that when calling is_constant(x), even if 'x'
turns out not to be constant in the end, it's possible that its
initial annotation says that it is a constant.  In this case, crash,
because you return "SomeBool(const=True)" and later
"SomeBool(const=False)", which is not a superset of the previous
value.

Try with a test like this:

def f(n):
   is_constant(n)
def g(n):
   f(5)
   f(n)


A bientôt,

Armin.


More information about the pypy-dev mailing list