Do not pretend expression is filename in compile() Python built-in call (#73113)
When calling compile(), the filename argument should be either a real file name or a string. According to Python docs, suggested one is '<string>'. Keep the current behaviour (encapsulate the actual expression), but enclose it into angle brackets. Signed-off-by: Oldřich Jedlička <oldium.pro@gmail.com>
This commit is contained in:
parent
e8d4b62b41
commit
ec55a221f6
2 changed files with 5 additions and 1 deletions
|
@ -0,0 +1,4 @@
|
||||||
|
bugfixes:
|
||||||
|
- Pass expression in angle-bracket notation as filename argument to a
|
||||||
|
``compile()`` built-in function, so that Python debuggers do not try to
|
||||||
|
parse it as filename.
|
|
@ -140,7 +140,7 @@ def safe_eval(expr, locals=None, include_exceptions=False):
|
||||||
try:
|
try:
|
||||||
parsed_tree = ast.parse(expr, mode='eval')
|
parsed_tree = ast.parse(expr, mode='eval')
|
||||||
cnv.visit(parsed_tree)
|
cnv.visit(parsed_tree)
|
||||||
compiled = compile(parsed_tree, to_native(expr), 'eval')
|
compiled = compile(parsed_tree, '<expr %s>' % to_native(expr), 'eval')
|
||||||
# Note: passing our own globals and locals here constrains what
|
# Note: passing our own globals and locals here constrains what
|
||||||
# callables (and other identifiers) are recognized. this is in
|
# callables (and other identifiers) are recognized. this is in
|
||||||
# addition to the filtering of builtins done in CleansingNodeVisitor
|
# addition to the filtering of builtins done in CleansingNodeVisitor
|
||||||
|
|
Loading…
Reference in a new issue