bpo-32892: Use ast.Constant instead of specific constant AST types. (GH-9445)
diff --git a/Python/ast_unparse.c b/Python/ast_unparse.c
index 725ce31..56ea3c4 100644
--- a/Python/ast_unparse.c
+++ b/Python/ast_unparse.c
@@ -567,8 +567,6 @@
switch (e->kind) {
case Constant_kind:
return append_fstring_unicode(writer, e->v.Constant.value);
- case Str_kind:
- return append_fstring_unicode(writer, e->v.Str.s);
case JoinedStr_kind:
return append_joinedstr(writer, e, is_format_spec);
case FormattedValue_kind:
@@ -690,13 +688,12 @@
append_ast_attribute(_PyUnicodeWriter *writer, expr_ty e)
{
const char *period;
- APPEND_EXPR(e->v.Attribute.value, PR_ATOM);
+ expr_ty v = e->v.Attribute.value;
+ APPEND_EXPR(v, PR_ATOM);
/* Special case: integers require a space for attribute access to be
- unambiguous. Floats and complex numbers don't but work with it, too. */
- if (e->v.Attribute.value->kind == Num_kind ||
- e->v.Attribute.value->kind == Constant_kind)
- {
+ unambiguous. */
+ if (v->kind == Constant_kind && PyLong_CheckExact(v->v.Constant.value)) {
period = " .";
}
else {
@@ -841,21 +838,14 @@
case Call_kind:
return append_ast_call(writer, e);
case Constant_kind:
+ if (e->v.Constant.value == Py_Ellipsis) {
+ APPEND_STR_FINISH("...");
+ }
return append_repr(writer, e->v.Constant.value);
- case Num_kind:
- return append_repr(writer, e->v.Num.n);
- case Str_kind:
- return append_repr(writer, e->v.Str.s);
case JoinedStr_kind:
return append_joinedstr(writer, e, false);
case FormattedValue_kind:
return append_formattedvalue(writer, e, false);
- case Bytes_kind:
- return append_repr(writer, e->v.Bytes.s);
- case Ellipsis_kind:
- APPEND_STR_FINISH("...");
- case NameConstant_kind:
- return append_repr(writer, e->v.NameConstant.value);
/* The following exprs can be assignment targets. */
case Attribute_kind:
return append_ast_attribute(writer, e);