summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Include/internal/pycore_parser.h17
-rw-r--r--Include/internal/pycore_runtime_init.h2
-rw-r--r--Parser/action_helpers.c22
-rw-r--r--Tools/c-analyzer/cpython/ignored.tsv4
4 files changed, 20 insertions, 25 deletions
diff --git a/Include/internal/pycore_parser.h b/Include/internal/pycore_parser.h
index 2d2b56b..dd51b92 100644
--- a/Include/internal/pycore_parser.h
+++ b/Include/internal/pycore_parser.h
@@ -9,6 +9,8 @@ extern "C" {
#endif
+#include "pycore_ast.h" // struct _expr
+#include "pycore_global_strings.h" // _Py_DECLARE_STR()
#include "pycore_pyarena.h" // PyArena
@@ -22,9 +24,22 @@ struct _parser_runtime_state {
#else
int _not_used;
#endif
+ struct _expr dummy_name;
};
-
+_Py_DECLARE_STR(empty, "")
+#define _parser_runtime_state_INIT \
+ { \
+ .dummy_name = { \
+ .kind = Name_kind, \
+ .v.Name.id = &_Py_STR(empty), \
+ .v.Name.ctx = Load, \
+ .lineno = 1, \
+ .col_offset = 0, \
+ .end_lineno = 1, \
+ .end_col_offset = 0, \
+ }, \
+ }
extern struct _mod* _PyParser_ASTFromString(
const char *str,
diff --git a/Include/internal/pycore_runtime_init.h b/Include/internal/pycore_runtime_init.h
index 6342a28..cb3fce3 100644
--- a/Include/internal/pycore_runtime_init.h
+++ b/Include/internal/pycore_runtime_init.h
@@ -9,6 +9,7 @@ extern "C" {
#endif
#include "pycore_object.h"
+#include "pycore_parser.h"
#include "pycore_pymem_init.h"
#include "pycore_obmalloc_init.h"
@@ -32,6 +33,7 @@ extern "C" {
until _PyInterpreterState_Enable() is called. */ \
.next_id = -1, \
}, \
+ .parser = _parser_runtime_state_INIT, \
.imports = { \
.lock = { \
.mutex = NULL, \
diff --git a/Parser/action_helpers.c b/Parser/action_helpers.c
index f12dad0..4639096 100644
--- a/Parser/action_helpers.c
+++ b/Parser/action_helpers.c
@@ -2,30 +2,12 @@
#include "pegen.h"
#include "string_parser.h"
-
-static PyObject *
-_create_dummy_identifier(Parser *p)
-{
- return _PyPegen_new_identifier(p, "");
-}
+#include "pycore_runtime.h" // _PyRuntime
void *
_PyPegen_dummy_name(Parser *p, ...)
{
- // XXX This leaks memory from the initial arena.
- // Use a statically allocated variable instead of a pointer?
- static void *cache = NULL;
-
- if (cache != NULL) {
- return cache;
- }
-
- PyObject *id = _create_dummy_identifier(p);
- if (!id) {
- return NULL;
- }
- cache = _PyAST_Name(id, Load, 1, 0, 1, 0, p->arena);
- return cache;
+ return &_PyRuntime.parser.dummy_name;
}
/* Creates a single-element asdl_seq* that contains a */
diff --git a/Tools/c-analyzer/cpython/ignored.tsv b/Tools/c-analyzer/cpython/ignored.tsv
index c71fc0d..0253169 100644
--- a/Tools/c-analyzer/cpython/ignored.tsv
+++ b/Tools/c-analyzer/cpython/ignored.tsv
@@ -50,10 +50,6 @@ Python/getversion.c - version -
Python/bootstrap_hash.c - _Py_HashSecret_Initialized -
Python/pyhash.c - _Py_HashSecret -
-## internal state - set lazily (*after* first init)
-# XXX Move to _PyRuntimeState (i.e. tie to init/fini cycle)?
-Parser/action_helpers.c _PyPegen_dummy_name cache -
-
##################################
## state tied to Py_Main()