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.
Created on 2012年03月01日 18:03 by menegazzobr, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| small_with_error.py | menegazzobr, 2012年03月01日 18:02 | |||
| Messages (8) | |||
|---|---|---|---|
| msg154707 - (view) | Author: Fabio Menegazzo (menegazzobr) | Date: 2012年03月01日 18:02 | |
compiler.compile fails on "if" statement in attached file. When executing the code compiler.compile(contents, '<string>', 'exec') passing the attached file contents, the following error is raised: ValueError: chr() arg not in range(256) This won't fail when using the builtin "compile". Also removing the "if" statement or any line before it, the contents are compiled successfully. |
|||
| msg154803 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2012年03月02日 21:40 | |
Please provide a *minimal* example that exhibits the problem. 'Minimal' means that if a single line is removed, the problem disappears. |
|||
| msg155290 - (view) | Author: Jim Jewett (Jim.Jewett) * (Python triager) | Date: 2012年03月10日 04:53 | |
If I understood correctly, that *is* the minimal case, which suggests some sort of size problem. That said, I could not duplicate on 2.6.2, nor with py_compile.compiler in 3.2.2; I am not currently sufficiently motivated to install another version just for this. |
|||
| msg155304 - (view) | Author: Mark Dickinson (mark.dickinson) * (Python committer) | Date: 2012年03月10日 11:52 | |
Here's the trackback I get with Python 2.7. Look's like something's assuming that POP_JUMP_IF_FALSE target of 65541 fits in 16 bits.
Python 2.7.2 (default, Jan 13 2012, 17:11:09)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> with open('small_with_error.py') as f:
... contents = f.read()
...
>>> import compiler
>>> compiler.compile(contents, '<string>', 'exec')
POP_JUMP_IF_FALSE 65541
114 5 256
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/compiler/pycodegen.py", line 65, in compile
gen.compile()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/compiler/pycodegen.py", line 117, in compile
self.code = gen.getCode()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/compiler/pycodegen.py", line 248, in getCode
return self.graph.getCode()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/compiler/pyassem.py", line 313, in getCode
self.makeByteCode()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/compiler/pyassem.py", line 518, in makeByteCode
lnotab.addCode(self.opnum[opname], lo, hi)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/compiler/pyassem.py", line 612, in addCode
self.code.append(chr(arg))
ValueError: chr() arg not in range(256)
|
|||
| msg155305 - (view) | Author: Mark Dickinson (mark.dickinson) * (Python committer) | Date: 2012年03月10日 12:26 | |
Interestingly, dis.dis also fails to decompile the .pyc bytecode generated by importing the file. (This was after adding dummy AddUnit, MakeCustomaryToBase and MakeBaseToCustomary definitions to the top of the file to prevent the import raising an exception.)
>>> with open('small_with_error.pyc', 'r') as f:
... bytecode = f.read()
...
>>> bytecode = bytecode[8:]
>>> dis.dis(bytecode)
<... lots of output snipped ...>
65686 LOAD_GLOBAL 4 (4)
65689 STOP_CODE
65690 STOP_CODE
65691 POP_JUMP_IF_TRUE 27749
65694 BUILD_TUPLE 1140
65697 STOP_CODE
65698 STOP_CODE
65699 STOP_CODE
65700 STORE_GLOBAL 26482 (26482)
65703 POP_JUMP_IF_TRUE 1652
65706 STOP_CODE
65707 STOP_CODE
65708 STOP_CODE
65709 COMPARE_OP 24951
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/7.2/lib/python2.7/dis.py", line 45, in dis
disassemble_string(x)
File "/Library/Frameworks/Python.framework/Versions/7.2/lib/python2.7/dis.py", line 147, in disassemble_string
print '(' + cmp_op[oparg] + ')',
IndexError: tuple index out of range
|
|||
| msg155306 - (view) | Author: Mark Dickinson (mark.dickinson) * (Python committer) | Date: 2012年03月10日 12:41 | |
D'oh. Ignore that last message; all it shows is that I'm stupid. |
|||
| msg155308 - (view) | Author: Mark Dickinson (mark.dickinson) * (Python committer) | Date: 2012年03月10日 12:59 | |
Okay, so the issue is simply that the compiler module doesn't have logic for emitting the EXTENDED_ARGS[1] bytecode instruction to properly deal with a jump target that won't fit in two bytes. Given that the compiler module is deprecated, I propose closing this as 'won't fix'. [1] http://docs.python.org/library/dis.html#opcode-EXTENDED_ARG |
|||
| msg155321 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2012年03月10日 16:30 | |
I agree. 'deprecated' pretty much means "We do not think this is worth the effort of maintaining it. Don't use it unless it is already in old code." |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:27 | admin | set | github: 58377 |
| 2012年03月10日 16:30:09 | terry.reedy | set | status: open -> closed resolution: wont fix messages: + msg155321 |
| 2012年03月10日 12:59:14 | mark.dickinson | set | messages: + msg155308 |
| 2012年03月10日 12:41:19 | mark.dickinson | set | messages: + msg155306 |
| 2012年03月10日 12:26:59 | mark.dickinson | set | messages: + msg155305 |
| 2012年03月10日 11:52:12 | mark.dickinson | set | nosy:
+ mark.dickinson messages: + msg155304 |
| 2012年03月10日 04:53:51 | Jim.Jewett | set | nosy:
+ Jim.Jewett messages: + msg155290 |
| 2012年03月05日 04:57:20 | meador.inge | set | nosy:
+ meador.inge |
| 2012年03月03日 01:43:21 | pitrou | set | nosy:
+ benjamin.peterson |
| 2012年03月02日 21:40:30 | terry.reedy | set | nosy:
+ terry.reedy messages: + msg154803 |
| 2012年03月01日 18:03:05 | menegazzobr | create | |