mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Add ast.Constant
Issue #26146: Add a new kind of AST node: ast.Constant. It can be used by external AST optimizers, but the compiler does not emit directly such node. An optimizer can replace the following AST nodes with ast.Constant: * ast.NameConstant: None, False, True * ast.Num: int, float, complex * ast.Str: str * ast.Bytes: bytes * ast.Tuple if items are constants too: tuple * frozenset Update code to accept ast.Constant instead of ast.Num and/or ast.Str: * compiler * docstrings * ast.literal_eval() * Tools/parser/unparse.py
This commit is contained in:
parent
0dceb91866
commit
f2c1aa1661
14 changed files with 401 additions and 44 deletions
|
@ -202,9 +202,9 @@ enum _expr_kind {BoolOp_kind=1, BinOp_kind=2, UnaryOp_kind=3, Lambda_kind=4,
|
|||
Await_kind=12, Yield_kind=13, YieldFrom_kind=14,
|
||||
Compare_kind=15, Call_kind=16, Num_kind=17, Str_kind=18,
|
||||
FormattedValue_kind=19, JoinedStr_kind=20, Bytes_kind=21,
|
||||
NameConstant_kind=22, Ellipsis_kind=23, Attribute_kind=24,
|
||||
Subscript_kind=25, Starred_kind=26, Name_kind=27,
|
||||
List_kind=28, Tuple_kind=29};
|
||||
NameConstant_kind=22, Ellipsis_kind=23, Constant_kind=24,
|
||||
Attribute_kind=25, Subscript_kind=26, Starred_kind=27,
|
||||
Name_kind=28, List_kind=29, Tuple_kind=30};
|
||||
struct _expr {
|
||||
enum _expr_kind kind;
|
||||
union {
|
||||
|
@ -315,6 +315,10 @@ struct _expr {
|
|||
singleton value;
|
||||
} NameConstant;
|
||||
|
||||
struct {
|
||||
constant value;
|
||||
} Constant;
|
||||
|
||||
struct {
|
||||
expr_ty value;
|
||||
identifier attr;
|
||||
|
@ -567,6 +571,9 @@ expr_ty _Py_NameConstant(singleton value, int lineno, int col_offset, PyArena
|
|||
*arena);
|
||||
#define Ellipsis(a0, a1, a2) _Py_Ellipsis(a0, a1, a2)
|
||||
expr_ty _Py_Ellipsis(int lineno, int col_offset, PyArena *arena);
|
||||
#define Constant(a0, a1, a2, a3) _Py_Constant(a0, a1, a2, a3)
|
||||
expr_ty _Py_Constant(constant value, int lineno, int col_offset, PyArena
|
||||
*arena);
|
||||
#define Attribute(a0, a1, a2, a3, a4, a5) _Py_Attribute(a0, a1, a2, a3, a4, a5)
|
||||
expr_ty _Py_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int
|
||||
lineno, int col_offset, PyArena *arena);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue