summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_peg_generator
diff options
context:
space:
mode:
authorPablo Galindo <Pablogsal@gmail.com>2020-05-02 04:23:06 (GMT)
committerGitHub <noreply@github.com>2020-05-02 04:23:06 (GMT)
commit9dbaa8d9f054e53fac0c3d308d0bce3fc8850525 (patch)
tree994b8e48379713ddf7cc77ae1aa87522b5a8dc4c /Lib/test/test_peg_generator
parent02047265eb83a43ba18cc7fee81756f1a1a1f968 (diff)
downloadcpython-9dbaa8d9f054e53fac0c3d308d0bce3fc8850525.zip
cpython-9dbaa8d9f054e53fac0c3d308d0bce3fc8850525.tar.gz
cpython-9dbaa8d9f054e53fac0c3d308d0bce3fc8850525.tar.bz2
Fix some scripts in the peg generator folder (GH-19853)
Diffstat (limited to 'Lib/test/test_peg_generator')
-rw-r--r--Lib/test/test_peg_generator/ast_dump.py62
-rw-r--r--Lib/test/test_peg_generator/test_c_parser.py6
2 files changed, 5 insertions, 63 deletions
diff --git a/Lib/test/test_peg_generator/ast_dump.py b/Lib/test/test_peg_generator/ast_dump.py
deleted file mode 100644
index 22d2dde..0000000
--- a/Lib/test/test_peg_generator/ast_dump.py
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-Copy-parse of ast.dump, removing the `isinstance` checks. This is needed,
-because testing pegen requires generating a C extension module, which contains
-a copy of the symbols defined in Python-ast.c. Thus, the isinstance check would
-always fail. We rely on string comparison of the base classes instead.
-TODO: Remove the above-described hack.
-"""
-
-def ast_dump(node, annotate_fields=True, include_attributes=False, *, indent=None):
- def _format(node, level=0):
- if indent is not None:
- level += 1
- prefix = '\n' + indent * level
- sep = ',\n' + indent * level
- else:
- prefix = ''
- sep = ', '
- if any(cls.__name__ == 'AST' for cls in node.__class__.__mro__):
- cls = type(node)
- args = []
- allsimple = True
- keywords = annotate_fields
- for name in node._fields:
- try:
- value = getattr(node, name)
- except AttributeError:
- keywords = True
- continue
- if value is None and getattr(cls, name, ...) is None:
- keywords = True
- continue
- value, simple = _format(value, level)
- allsimple = allsimple and simple
- if keywords:
- args.append('%s=%s' % (name, value))
- else:
- args.append(value)
- if include_attributes and node._attributes:
- for name in node._attributes:
- try:
- value = getattr(node, name)
- except AttributeError:
- continue
- if value is None and getattr(cls, name, ...) is None:
- continue
- value, simple = _format(value, level)
- allsimple = allsimple and simple
- args.append('%s=%s' % (name, value))
- if allsimple and len(args) <= 3:
- return '%s(%s)' % (node.__class__.__name__, ', '.join(args)), not args
- return '%s(%s%s)' % (node.__class__.__name__, prefix, sep.join(args)), False
- elif isinstance(node, list):
- if not node:
- return '[]', True
- return '[%s%s]' % (prefix, sep.join(_format(x, level)[0] for x in node)), False
- return repr(node), True
-
- if all(cls.__name__ != 'AST' for cls in node.__class__.__mro__):
- raise TypeError('expected AST, got %r' % node.__class__.__name__)
- if indent is not None and not isinstance(indent, str):
- indent = ' ' * indent
- return _format(node)[0]
diff --git a/Lib/test/test_peg_generator/test_c_parser.py b/Lib/test/test_peg_generator/test_c_parser.py
index 8eb66d5..f66b92d 100644
--- a/Lib/test/test_peg_generator/test_c_parser.py
+++ b/Lib/test/test_peg_generator/test_c_parser.py
@@ -15,6 +15,7 @@ with test_tools.imports_under_tool("peg_generator"):
generate_parser_c_extension,
generate_c_parser_source,
)
+ from pegen.ast_dump import ast_dump
TEST_TEMPLATE = """
@@ -24,7 +25,10 @@ import ast
import traceback
import sys
import unittest
-from test.test_peg_generator.ast_dump import ast_dump
+
+from test import test_tools
+with test_tools.imports_under_tool("peg_generator"):
+ from pegen.ast_dump import ast_dump
sys.path.insert(0, tmp_dir)
import parse