[issue22091] __debug__ in compile(optimize=1)
eryksun
report at bugs.python.org
Sun Jul 27 14:56:27 CEST 2014
eryksun added the comment:
If __debug__ were referenced from the code object's co_consts instead of checking locals, globals and builtins (LOAD_NAME), then optimize=1 would work consistently for a given code object.
Currently in 3.4.1:
>>> dis.dis(compile("if __debug__: x = 1", "", "exec", optimize=0))
1 0 LOAD_CONST 0 (1)
3 STORE_NAME 0 (x)
6 LOAD_CONST 1 (None)
9 RETURN_VALUE
>>> dis.dis(compile("if __debug__: x = 1", "", "exec", optimize=1))
1 0 LOAD_CONST 0 (None)
3 RETURN_VALUE
>>> dis.dis(compile("x = __debug__", "", "exec", optimize=0))
1 0 LOAD_NAME 0 (__debug__)
3 STORE_NAME 1 (x)
6 LOAD_CONST 0 (None)
9 RETURN_VALUE
>>> dis.dis(compile("x = __debug__", "", "exec", optimize=1))
1 0 LOAD_NAME 0 (__debug__)
3 STORE_NAME 1 (x)
6 LOAD_CONST 0 (None)
9 RETURN_VALUE
With the current design, an exec can override builtins.__debug__ in globals or locals:
>>> exec("print(__debug__)", globals(), {"__debug__": "spam"})
spam
----------
nosy: +eryksun
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue22091>
_______________________________________
More information about the Python-bugs-list
mailing list