]> granicus.if.org Git - python/commitdiff
#5057: Merge with 3.1.
authorEzio Melotti <ezio.melotti@gmail.com>
Fri, 15 Apr 2011 13:50:41 +0000 (16:50 +0300)
committerEzio Melotti <ezio.melotti@gmail.com>
Fri, 15 Apr 2011 13:50:41 +0000 (16:50 +0300)
1  2 
Lib/test/test_peepholer.py
Misc/NEWS
Python/peephole.c

index b7d446fdd07e537028bb1bc499fd3c52f1cd84fa,d1d5874bb7700cffadbe8844ffce4d96d12146c8..53719d3a823aa1afb89648dc89fe218cdc7b32ac
@@@ -193,8 -144,26 +193,26 @@@ class TestTranforms(unittest.TestCase)
  
          # Verify that large sequences do not result from folding
          asm = dis_single('a="x"*1000')
 -        self.assertTrue('(1000)' in asm)
 +        self.assertIn('(1000)', asm)
  
+     def test_binary_subscr_on_unicode(self):
+         # valid code get optimized
+         asm = dis_single('"foo"[0]')
+         self.assertIn("('f')", asm)
+         self.assertNotIn('BINARY_SUBSCR', asm)
+         asm = dis_single('"\u0061\uffff"[1]')
+         self.assertIn("('\\uffff')", asm)
+         self.assertNotIn('BINARY_SUBSCR', asm)
+         # invalid code doesn't get optimized
+         # out of range
+         asm = dis_single('"fuu"[10]')
+         self.assertIn('BINARY_SUBSCR', asm)
+         # non-BMP char (see #5057)
+         asm = dis_single('"\U00012345"[0]')
+         self.assertIn('BINARY_SUBSCR', asm)
      def test_folding_of_unaryops_on_constants(self):
          for line, elem in (
              ('-0.5', '(-0.5)'),                     # unary negative
diff --cc Misc/NEWS
index 364849811296223282f43bdc8c52af883a8e2f1b,7ea8850328a052fc69c2548293404fdea158a37c..2c3f86de00109dafa5a0c31d363af61cccc9bef9
+++ b/Misc/NEWS
@@@ -10,9 -10,10 +10,13 @@@ What's New in Python 3.2.1
  Core and Builtins
  -----------------
  
+ - Issue #5057: fix a bug in the peepholer that led to non-portable pyc files
+   between narrow and wide builds while optimizing BINARY_SUBSCR on non-BMP
+   chars (e.g. "\U00012345"[0]).
 +- Issue #11845: Fix typo in rangeobject.c that caused a crash in
 +  compute_slice_indices.  Patch by Daniel Urban.
 +
  - Issue #11650: PyOS_StdioReadline() retries fgets() if it was interrupted
    (EINTR), for example if the program is stopped with CTRL+z on Mac OS X. Patch
    written by Charles-Francois Natali.
Simple merge