New submission from Antoine Pitrou <pit...@free.fr>: The peephole optimizer can optimize indexed access to an unicode constant which does not give the same result in UCS-2 and UCS-4 builds. As a result, the pyc file is not portable across those builds.
This is something I witnessed when recompiling in UCS-2 rather than UCS-4 mode, and having a strange failure in test_multibytecodec. Erasing test_multibytecodec.pyc suppressed the failure. Here is a small demonstration of the problem: >>> def f(): ... return '\U00012345'[0] ... >>> import dis >>> dis.dis(f) 2 0 LOAD_CONST 3 ('\ud808') 3 RETURN_VALUE For reference, here is the error I had in test_multibytecodec: ====================================================================== FAIL: test_gb18030 (test.test_multibytecodec.Test_StreamWriter) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/antoine/py3k/__svn__/Lib/test/test_multibytecodec.py", line 185, in test_gb18030 self.assertEqual(s.getvalue(), b'123\x907\x959') AssertionError: b'123\x907\x959\x907\x959' != b'123\x907\x959' ---------------------------------------------------------------------- ---------- components: Interpreter Core messages: 80514 nosy: pitrou, rhettinger severity: normal status: open title: Unicode-width dependent optimization leads to non-portable pyc file type: behavior versions: Python 3.1 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue5057> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com