diff --git a/Include/internal/pycore_global_objects_fini_generated.h b/Include/internal/pycore_global_objects_fini_generated.h index 1f6b27b14d074b..fefe878949a8e7 100644 --- a/Include/internal/pycore_global_objects_fini_generated.h +++ b/Include/internal/pycore_global_objects_fini_generated.h @@ -1310,6 +1310,30 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[253]); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[254]); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[255]); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(AMPEREQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(ATEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(CIRCUMFLEXEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(COLONEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(DOUBLESLASH)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(DOUBLESLASHEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(DOUBLESTAR)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(DOUBLESTAREQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(ELLIPSIS)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(EQEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(GREATEREQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(LEFTSHIFT)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(LEFTSHIFTEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(LESSEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(MINEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(NOTEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(PERCENTEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(PLUSEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(RARROW)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(RIGHTSHIFT)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(RIGHTSHIFTEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(SLASHEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(STAREQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(VBAREQUAL)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_dictcomp)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_genexpr)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_lambda)); @@ -1333,16 +1357,40 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(str_replace_inf)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(type_params)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(utf_8)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(AMPEREQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ATEQUAL)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(CANCELLED)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(CIRCUMFLEXEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(COLONEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(DOUBLESLASH)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(DOUBLESLASHEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(DOUBLESTAR)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(DOUBLESTAREQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ELLIPSIS)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(EQEQUAL)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(Emax)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(Emin)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(FINISHED)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(False)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(GREATEREQUAL)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(JSONDecodeError)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(LEFTSHIFT)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(LEFTSHIFTEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(LESSEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(MINEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(NOTEQUAL)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(PENDING)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(PERCENTEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(PLUSEQUAL)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(Py_Repr)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(RARROW)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(RIGHTSHIFT)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(RIGHTSHIFTEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(SLASHEQUAL)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(STAREQUAL)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(TextIOWrapper)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(True)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(VBAREQUAL)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(WarningMessage)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_WindowsConsoleIO)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__IOBase_closed)); diff --git a/Include/internal/pycore_global_strings.h b/Include/internal/pycore_global_strings.h index 6959343947c1f4..8749daeaf732d5 100644 --- a/Include/internal/pycore_global_strings.h +++ b/Include/internal/pycore_global_strings.h @@ -30,6 +30,30 @@ extern "C" { /* The following is auto-generated by Tools/build/generate_global_objects.py. */ struct _Py_global_strings { struct { + STRUCT_FOR_STR(AMPEREQUAL, "&=") + STRUCT_FOR_STR(ATEQUAL, "@=") + STRUCT_FOR_STR(CIRCUMFLEXEQUAL, "^=") + STRUCT_FOR_STR(COLONEQUAL, ":=") + STRUCT_FOR_STR(DOUBLESLASH, "//") + STRUCT_FOR_STR(DOUBLESLASHEQUAL, "//=") + STRUCT_FOR_STR(DOUBLESTAR, "**") + STRUCT_FOR_STR(DOUBLESTAREQUAL, "**=") + STRUCT_FOR_STR(ELLIPSIS, "...") + STRUCT_FOR_STR(EQEQUAL, "==") + STRUCT_FOR_STR(GREATEREQUAL, ">=") + STRUCT_FOR_STR(LEFTSHIFT, "<<") + STRUCT_FOR_STR(LEFTSHIFTEQUAL, "<<=") + STRUCT_FOR_STR(LESSEQUAL, "<=") + STRUCT_FOR_STR(MINEQUAL, "-=") + STRUCT_FOR_STR(NOTEQUAL, "!=") + STRUCT_FOR_STR(PERCENTEQUAL, "%=") + STRUCT_FOR_STR(PLUSEQUAL, "+=") + STRUCT_FOR_STR(RARROW, "->") + STRUCT_FOR_STR(RIGHTSHIFT, ">>") + STRUCT_FOR_STR(RIGHTSHIFTEQUAL, ">>=") + STRUCT_FOR_STR(SLASHEQUAL, "/=") + STRUCT_FOR_STR(STAREQUAL, "*=") + STRUCT_FOR_STR(VBAREQUAL, "|=") STRUCT_FOR_STR(anon_dictcomp, "") STRUCT_FOR_STR(anon_genexpr, "") STRUCT_FOR_STR(anon_lambda, "") @@ -56,16 +80,40 @@ struct _Py_global_strings { } literals; struct { + STRUCT_FOR_ID(AMPEREQUAL) + STRUCT_FOR_ID(ATEQUAL) STRUCT_FOR_ID(CANCELLED) + STRUCT_FOR_ID(CIRCUMFLEXEQUAL) + STRUCT_FOR_ID(COLONEQUAL) + STRUCT_FOR_ID(DOUBLESLASH) + STRUCT_FOR_ID(DOUBLESLASHEQUAL) + STRUCT_FOR_ID(DOUBLESTAR) + STRUCT_FOR_ID(DOUBLESTAREQUAL) + STRUCT_FOR_ID(ELLIPSIS) + STRUCT_FOR_ID(EQEQUAL) STRUCT_FOR_ID(Emax) STRUCT_FOR_ID(Emin) STRUCT_FOR_ID(FINISHED) STRUCT_FOR_ID(False) + STRUCT_FOR_ID(GREATEREQUAL) STRUCT_FOR_ID(JSONDecodeError) + STRUCT_FOR_ID(LEFTSHIFT) + STRUCT_FOR_ID(LEFTSHIFTEQUAL) + STRUCT_FOR_ID(LESSEQUAL) + STRUCT_FOR_ID(MINEQUAL) + STRUCT_FOR_ID(NOTEQUAL) STRUCT_FOR_ID(PENDING) + STRUCT_FOR_ID(PERCENTEQUAL) + STRUCT_FOR_ID(PLUSEQUAL) STRUCT_FOR_ID(Py_Repr) + STRUCT_FOR_ID(RARROW) + STRUCT_FOR_ID(RIGHTSHIFT) + STRUCT_FOR_ID(RIGHTSHIFTEQUAL) + STRUCT_FOR_ID(SLASHEQUAL) + STRUCT_FOR_ID(STAREQUAL) STRUCT_FOR_ID(TextIOWrapper) STRUCT_FOR_ID(True) + STRUCT_FOR_ID(VBAREQUAL) STRUCT_FOR_ID(WarningMessage) STRUCT_FOR_ID(_WindowsConsoleIO) STRUCT_FOR_ID(__IOBase_closed) diff --git a/Include/internal/pycore_runtime_init_generated.h b/Include/internal/pycore_runtime_init_generated.h index be4eae42b5de1b..fd96fb92d8c56d 100644 --- a/Include/internal/pycore_runtime_init_generated.h +++ b/Include/internal/pycore_runtime_init_generated.h @@ -1305,6 +1305,30 @@ extern "C" { } #define _Py_str_literals_INIT { \ + INIT_STR(AMPEREQUAL, "&="), \ + INIT_STR(ATEQUAL, "@="), \ + INIT_STR(CIRCUMFLEXEQUAL, "^="), \ + INIT_STR(COLONEQUAL, ":="), \ + INIT_STR(DOUBLESLASH, "//"), \ + INIT_STR(DOUBLESLASHEQUAL, "//="), \ + INIT_STR(DOUBLESTAR, "**"), \ + INIT_STR(DOUBLESTAREQUAL, "**="), \ + INIT_STR(ELLIPSIS, "..."), \ + INIT_STR(EQEQUAL, "=="), \ + INIT_STR(GREATEREQUAL, ">="), \ + INIT_STR(LEFTSHIFT, "<<"), \ + INIT_STR(LEFTSHIFTEQUAL, "<<="), \ + INIT_STR(LESSEQUAL, "<="), \ + INIT_STR(MINEQUAL, "-="), \ + INIT_STR(NOTEQUAL, "!="), \ + INIT_STR(PERCENTEQUAL, "%="), \ + INIT_STR(PLUSEQUAL, "+="), \ + INIT_STR(RARROW, "->"), \ + INIT_STR(RIGHTSHIFT, ">>"), \ + INIT_STR(RIGHTSHIFTEQUAL, ">>="), \ + INIT_STR(SLASHEQUAL, "/="), \ + INIT_STR(STAREQUAL, "*="), \ + INIT_STR(VBAREQUAL, "|="), \ INIT_STR(anon_dictcomp, ""), \ INIT_STR(anon_genexpr, ""), \ INIT_STR(anon_lambda, ""), \ @@ -1331,16 +1355,40 @@ extern "C" { } #define _Py_str_identifiers_INIT { \ + INIT_ID(AMPEREQUAL), \ + INIT_ID(ATEQUAL), \ INIT_ID(CANCELLED), \ + INIT_ID(CIRCUMFLEXEQUAL), \ + INIT_ID(COLONEQUAL), \ + INIT_ID(DOUBLESLASH), \ + INIT_ID(DOUBLESLASHEQUAL), \ + INIT_ID(DOUBLESTAR), \ + INIT_ID(DOUBLESTAREQUAL), \ + INIT_ID(ELLIPSIS), \ + INIT_ID(EQEQUAL), \ INIT_ID(Emax), \ INIT_ID(Emin), \ INIT_ID(FINISHED), \ INIT_ID(False), \ + INIT_ID(GREATEREQUAL), \ INIT_ID(JSONDecodeError), \ + INIT_ID(LEFTSHIFT), \ + INIT_ID(LEFTSHIFTEQUAL), \ + INIT_ID(LESSEQUAL), \ + INIT_ID(MINEQUAL), \ + INIT_ID(NOTEQUAL), \ INIT_ID(PENDING), \ + INIT_ID(PERCENTEQUAL), \ + INIT_ID(PLUSEQUAL), \ INIT_ID(Py_Repr), \ + INIT_ID(RARROW), \ + INIT_ID(RIGHTSHIFT), \ + INIT_ID(RIGHTSHIFTEQUAL), \ + INIT_ID(SLASHEQUAL), \ + INIT_ID(STAREQUAL), \ INIT_ID(TextIOWrapper), \ INIT_ID(True), \ + INIT_ID(VBAREQUAL), \ INIT_ID(WarningMessage), \ INIT_ID(_WindowsConsoleIO), \ INIT_ID(__IOBase_closed), \ diff --git a/Include/internal/pycore_unicodeobject_generated.h b/Include/internal/pycore_unicodeobject_generated.h index 45b00a20a07dda..bbbc1caa574880 100644 --- a/Include/internal/pycore_unicodeobject_generated.h +++ b/Include/internal/pycore_unicodeobject_generated.h @@ -12,10 +12,50 @@ extern "C" { static inline void _PyUnicode_InitStaticStrings(PyInterpreterState *interp) { PyObject *string; + string = &_Py_ID(AMPEREQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(ATEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(CANCELLED); _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(CIRCUMFLEXEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(COLONEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(DOUBLESLASH); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(DOUBLESLASHEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(DOUBLESTAR); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(DOUBLESTAREQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(ELLIPSIS); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(EQEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(Emax); _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); @@ -32,18 +72,70 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) { _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(GREATEREQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(JSONDecodeError); _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(LEFTSHIFT); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(LEFTSHIFTEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(LESSEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(MINEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(NOTEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(PENDING); _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(PERCENTEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(PLUSEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(Py_Repr); _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(RARROW); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(RIGHTSHIFT); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(RIGHTSHIFTEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(SLASHEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(STAREQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(TextIOWrapper); _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); @@ -52,6 +144,10 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) { _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(VBAREQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(WarningMessage); _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); @@ -3196,10 +3292,50 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) { _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(NOTEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_STR(dbl_percent); _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(PERCENTEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(AMPEREQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(DOUBLESTAR); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(DOUBLESTAREQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(STAREQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(PLUSEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(MINEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(RARROW); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(ELLIPSIS); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_STR(dot_locals); _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); @@ -3224,10 +3360,38 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) { _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(DOUBLESLASH); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(DOUBLESLASHEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(SLASHEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_STR(str_replace_inf); _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(COLONEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(LEFTSHIFT); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(LEFTSHIFTEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(LESSEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_STR(anon_null); _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); @@ -3264,6 +3428,30 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) { _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(EQEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(GREATEREQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(RIGHTSHIFT); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(RIGHTSHIFTEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(ATEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(CIRCUMFLEXEQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_STR(json_decoder); _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); @@ -3280,6 +3468,10 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) { _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(VBAREQUAL); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_STR(dbl_close_br); _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); diff --git a/Parser/token.c b/Parser/token.c index a6e7ce35dfad85..ae321655343f25 100644 --- a/Parser/token.c +++ b/Parser/token.c @@ -2,6 +2,34 @@ #include "Python.h" #include "pycore_token.h" +#include "pycore_global_strings.h" + +/* Interning tokens */ + +_Py_DECLARE_STR(EQEQUAL, "=="); +_Py_DECLARE_STR(NOTEQUAL, "!="); +_Py_DECLARE_STR(LESSEQUAL, "<="); +_Py_DECLARE_STR(GREATEREQUAL, ">="); +_Py_DECLARE_STR(LEFTSHIFT, "<<"); +_Py_DECLARE_STR(RIGHTSHIFT, ">>"); +_Py_DECLARE_STR(DOUBLESTAR, "**"); +_Py_DECLARE_STR(PLUSEQUAL, "+="); +_Py_DECLARE_STR(MINEQUAL, "-="); +_Py_DECLARE_STR(STAREQUAL, "*="); +_Py_DECLARE_STR(SLASHEQUAL, "/="); +_Py_DECLARE_STR(PERCENTEQUAL, "%="); +_Py_DECLARE_STR(AMPEREQUAL, "&="); +_Py_DECLARE_STR(VBAREQUAL, "|="); +_Py_DECLARE_STR(CIRCUMFLEXEQUAL, "^="); +_Py_DECLARE_STR(LEFTSHIFTEQUAL, "<<="); +_Py_DECLARE_STR(RIGHTSHIFTEQUAL, ">>="); +_Py_DECLARE_STR(DOUBLESTAREQUAL, "**="); +_Py_DECLARE_STR(DOUBLESLASH, "//"); +_Py_DECLARE_STR(DOUBLESLASHEQUAL, "//="); +_Py_DECLARE_STR(ATEQUAL, "@="); +_Py_DECLARE_STR(RARROW, "->"); +_Py_DECLARE_STR(ELLIPSIS, "..."); +_Py_DECLARE_STR(COLONEQUAL, ":="); /* Token names */ diff --git a/Tools/build/generate_global_objects.py b/Tools/build/generate_global_objects.py index 94905b3756d0d8..14963280f4a272 100644 --- a/Tools/build/generate_global_objects.py +++ b/Tools/build/generate_global_objects.py @@ -131,6 +131,31 @@ 'exc_value', 'self', 'traceback', + + "AMPEREQUAL", + "ATEQUAL", + "CIRCUMFLEXEQUAL", + "COLONEQUAL", + "DOUBLESLASH", + "DOUBLESLASHEQUAL", + "DOUBLESTAR", + "DOUBLESTAREQUAL", + "ELLIPSIS", + "EQEQUAL", + "GREATEREQUAL", + "LEFTSHIFT", + "LEFTSHIFTEQUAL", + "LESSEQUAL", + "MINEQUAL", + "NOTEQUAL", + "PERCENTEQUAL", + "PLUSEQUAL", + "RARROW", + "RIGHTSHIFT", + "RIGHTSHIFTEQUAL", + "SLASHEQUAL", + "STAREQUAL", + "VBAREQUAL", ] NON_GENERATED_IMMORTAL_OBJECTS = [ @@ -453,7 +478,6 @@ def get_identifiers_and_strings() -> 'tuple[set[str], dict[str, str]]': def main() -> None: identifiers, strings = get_identifiers_and_strings() - generate_global_strings(identifiers, strings) generated_immortal_objects = generate_runtime_init(identifiers, strings) generate_static_strings_initializer(identifiers, strings) diff --git a/Tools/build/generate_token.py b/Tools/build/generate_token.py index 9ee5ec86e75d47..eab43fa1061389 100755 --- a/Tools/build/generate_token.py +++ b/Tools/build/generate_token.py @@ -125,6 +125,12 @@ def make_h(infile, outfile='Include/internal/pycore_token.h'): #include "Python.h" #include "pycore_token.h" +#include "pycore_global_strings.h" + +/* Interning tokens */ + +%s\ + /* Token names */ @@ -176,10 +182,23 @@ def generate_chars_to_token(mapping, n=1): write('}\n') return ''.join(result) +def declate_tokens(tok_name_to_string): + return "\n".join( + f'_Py_DECLARE_STR({name}, "{token}");' + for name, token in tok_name_to_string.items() + ) + + def make_c(infile, outfile='Parser/token.c'): tok_names, ERRORTOKEN, string_to_tok = load_tokens(infile) - string_to_tok['<>'] = string_to_tok['!='] + tok_name_to_string = { + tok_names[name_idx]: token + for token, name_idx in string_to_tok.items() + if len(token) > 1 + } chars_to_token = {} + string_to_tok['<>'] = string_to_tok['!='] + for string, value in string_to_tok.items(): assert 1 <= len(string) <= 3 name = tok_names[value] @@ -196,6 +215,7 @@ def make_c(infile, outfile='Parser/token.c'): names.append(' "",\n') if update_file(outfile, token_c_template % ( + declate_tokens(tok_name_to_string), ''.join(names), generate_chars_to_token(chars_to_token[1]), generate_chars_to_token(chars_to_token[2]),