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