Hi Carl,

I wonder if there's some sub-set of cases we can still unroll in. The particular code this was for is:
https://bitbucket.org/pypy/pypy/src/default/lib-python/2.7/uuid.py#cl-130 . I wonder if there are cases where the list is both virtual *and* we aren't able to constant fold some of the space.eq_w()?

Alex


On Fri, Aug 30, 2013 at 5:31 AM, Carl Friedrich Bolz <cfbolz@gmx.de> wrote:
On 30/08/13 12:58, Amaury Forgeot d'Arc wrote:
>
> 2013/8/30 Carl Friedrich Bolz <cfbolz@gmx.de <mailto:cfbolz@gmx.de>>
>
>     Hi Alex,
>
>     please revert this change, it can lead to combinatorial explosion: it
>     can give a bridge per pattern of where in the list the object is found.
>
>
> Doesn't list.count() traverse all the list in all cases?

It looks like this:

        count = 0
        i = 0
        while i < self.length():
            if space.eq_w(self.getitem(i), w_value):
                count += 1
            i += 1

So there's a guard_true/false for every item.

Note that even changing to:

count += space.eq_w(self.getitem(i), w_value)

does not fix this, because the guard is coming from inside space.istrue,
or space.eq

Cheers,

Carl Friedrich

_______________________________________________
pypy-dev mailing list
pypy-dev@python.org
http://mail.python.org/mailman/listinfo/pypy-dev



--
"I disapprove of what you say, but I will defend to the death your right to say it." -- Evelyn Beatrice Hall (summarizing Voltaire)
"The people's good is the highest law." -- Cicero
GPG Key fingerprint: 125F 5C67 DFE9 4084