homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author terry.reedy
Recipients terry.reedy
Date 2011年03月12日.21:24:50
SpamBayes Score 3.7400194e-11
Marked as misclassified No
Message-id <1299965091.63.0.267715976543.issue11477@psf.upfronthosting.co.za>
In-reply-to
Content
Example (which can serve as testcase with buggy output corrected).
class C(object):
 def __iter__(self):
 yield 'yes!'
 def __radd__(self, other):
 other.append('bug!')
 return other
 def __rmul__(self, other):
 other *= 2
 return other
 def __index__(self):
 return 3
class L(list):
 def __iadd__(self, other):
 list.__iadd__(self,other)
 return self
 def __mul__(self, other):
 return L(list.__imul__(self,other))
z1, z2, c = [], L(), C()
z1 += c
z2 += c
print(z1, z2, [1]*c, L([1])*c)
>>> 
['bug!'] ['yes!'] [1, 1] [1, 1, 1] # PyPy prints ['yes!'], [1, 1, 1]
Cause was diagnosed by Greg Price in
http://codespeak.net/pipermail/pypy-dev/2011q1/006958.html
as checking forward and reverse numeric slots before checking sequence slots for C-coded classes. Such a difference does not exist in Python itself.
In "About raising NotPortableWarning for CPython specific code"
pydev thread starting at
http://codespeak.net/pipermail/pypy-dev/2011q1/006958.html
Nick Coghlin identified the fix as "When a given operation has multiple C level slots, shouldn't we be checking all the LHS slots before checking any of the RHS slots?"
Guido replied "Yeah, indeed, on everything you said. The code dispatching based on internal slots is horribly ad-hoc and likely wrong in subtle ways."
I personally think fix should be backported to 2.7 and 3.2, but did not select them because that may be controversial.
History
Date User Action Args
2011年03月12日 21:24:51terry.reedysetrecipients: + terry.reedy
2011年03月12日 21:24:51terry.reedysetmessageid: <1299965091.63.0.267715976543.issue11477@psf.upfronthosting.co.za>
2011年03月12日 21:24:50terry.reedylinkissue11477 messages
2011年03月12日 21:24:50terry.reedycreate

AltStyle によって変換されたページ (->オリジナル) /