mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
create NameConstant AST class for None, True, and False literals (closes #16619)
This commit is contained in:
parent
4b237e3b11
commit
442f20996d
15 changed files with 152 additions and 72 deletions
|
@ -3194,12 +3194,18 @@ expr_constant(struct compiler *c, expr_ty e)
|
|||
case Name_kind:
|
||||
/* optimize away names that can't be reassigned */
|
||||
id = PyUnicode_AsUTF8(e->v.Name.id);
|
||||
if (strcmp(id, "True") == 0) return 1;
|
||||
if (strcmp(id, "False") == 0) return 0;
|
||||
if (strcmp(id, "None") == 0) return 0;
|
||||
if (strcmp(id, "__debug__") == 0)
|
||||
return ! c->c_optimize;
|
||||
/* fall through */
|
||||
if (id && strcmp(id, "__debug__") == 0)
|
||||
return !c->c_optimize;
|
||||
return -1;
|
||||
case NameConstant_kind: {
|
||||
PyObject *o = e->v.NameConstant.value;
|
||||
if (o == Py_None)
|
||||
return 0;
|
||||
else if (o == Py_True)
|
||||
return 1;
|
||||
else if (o == Py_False)
|
||||
return 0;
|
||||
}
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
|
@ -3375,6 +3381,9 @@ compiler_visit_expr(struct compiler *c, expr_ty e)
|
|||
case Ellipsis_kind:
|
||||
ADDOP_O(c, LOAD_CONST, Py_Ellipsis, consts);
|
||||
break;
|
||||
case NameConstant_kind:
|
||||
ADDOP_O(c, LOAD_CONST, e->v.NameConstant.value, consts);
|
||||
break;
|
||||
/* The following exprs can be assignment targets. */
|
||||
case Attribute_kind:
|
||||
if (e->v.Attribute.ctx != AugStore)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue