summaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/Lib/codeop.py
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tools/python3/Lib/codeop.py')
-rw-r--r--contrib/tools/python3/Lib/codeop.py22
1 files changed, 8 insertions, 14 deletions
diff --git a/contrib/tools/python3/Lib/codeop.py b/contrib/tools/python3/Lib/codeop.py
index 4dd096574bb..adf000ba29f 100644
--- a/contrib/tools/python3/Lib/codeop.py
+++ b/contrib/tools/python3/Lib/codeop.py
@@ -44,6 +44,7 @@ __all__ = ["compile_command", "Compile", "CommandCompiler"]
# Caveat emptor: These flags are undocumented on purpose and depending
# on their effect outside the standard library is **unsupported**.
PyCF_DONT_IMPLY_DEDENT = 0x200
+PyCF_ONLY_AST = 0x400
PyCF_ALLOW_INCOMPLETE_INPUT = 0x4000
def _maybe_compile(compiler, source, filename, symbol):
@@ -65,22 +66,14 @@ def _maybe_compile(compiler, source, filename, symbol):
try:
compiler(source + "\n", filename, symbol)
return None
+ except _IncompleteInputError as e:
+ return None
except SyntaxError as e:
- if "incomplete input" in str(e):
- return None
+ pass
# fallthrough
return compiler(source, filename, symbol, incomplete_input=False)
-def _is_syntax_error(err1, err2):
- rep1 = repr(err1)
- rep2 = repr(err2)
- if "was never closed" in rep1 and "was never closed" in rep2:
- return False
- if rep1 == rep2:
- return True
- return False
-
def _compile(source, filename, symbol, incomplete_input=True):
flags = 0
if incomplete_input:
@@ -88,7 +81,6 @@ def _compile(source, filename, symbol, incomplete_input=True):
flags |= PyCF_DONT_IMPLY_DEDENT
return compile(source, filename, symbol, flags)
-
def compile_command(source, filename="<input>", symbol="single"):
r"""Compile a command and determine whether it is incomplete.
@@ -118,12 +110,14 @@ class Compile:
def __init__(self):
self.flags = PyCF_DONT_IMPLY_DEDENT | PyCF_ALLOW_INCOMPLETE_INPUT
- def __call__(self, source, filename, symbol, **kwargs):
- flags = self.flags
+ def __call__(self, source, filename, symbol, flags=0, **kwargs):
+ flags |= self.flags
if kwargs.get('incomplete_input', True) is False:
flags &= ~PyCF_DONT_IMPLY_DEDENT
flags &= ~PyCF_ALLOW_INCOMPLETE_INPUT
codeob = compile(source, filename, symbol, flags, True)
+ if flags & PyCF_ONLY_AST:
+ return codeob # this is an ast.Module in this case
for feature in _features:
if codeob.co_flags & feature.compiler_flag:
self.flags |= feature.compiler_flag