summaryrefslogtreecommitdiff
path: root/Python/symtable.c
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2021-03-19 12:41:49 +0100
committerGitHub <noreply@github.com>2021-03-19 12:41:49 +0100
commit28ad12f8fe889a741661eb99daacebd9243cc1ba (patch)
tree0519e059d23700bc0d9fe9b1bd4601559e49dbb4 /Python/symtable.c
parent32eba61ea431c76f15a910c0a4eded7f5f8b9b34 (diff)
downloadcpython-git-28ad12f8fe889a741661eb99daacebd9243cc1ba.tar.gz
bpo-43244: Remove symtable.h header file (GH-24910)
Rename Include/symtable.h to to Include/internal/pycore_symtable.h, don't export symbols anymore (replace PyAPI_FUNC and PyAPI_DATA with extern) and rename functions: * PyST_GetScope() to _PyST_GetScope() * PySymtable_BuildObject() to _PySymtable_Build() * PySymtable_Free() to _PySymtable_Free() Remove PySymtable_Build(), Py_SymtableString() and Py_SymtableStringObject() functions. The Py_SymtableString() function was part the stable ABI by mistake but it could not be used, since the symtable.h header file was excluded from the limited C API. The Python symtable module remains available and is unchanged.
Diffstat (limited to 'Python/symtable.c')
-rw-r--r--Python/symtable.c61
1 files changed, 36 insertions, 25 deletions
diff --git a/Python/symtable.c b/Python/symtable.c
index 10a47d1215..85648f21e6 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -1,6 +1,6 @@
#include "Python.h"
-#include "pycore_pystate.h" // _PyThreadState_GET()
-#include "symtable.h"
+#include "pycore_pystate.h" // _PyThreadState_GET()
+#include "pycore_symtable.h" // PySTEntryObject
#undef Yield /* undefine macro conflicting with <winbase.h> */
#include "structmember.h" // PyMemberDef
@@ -243,7 +243,7 @@ symtable_new(void)
st->in_pattern = 0;
return st;
fail:
- PySymtable_Free(st);
+ _PySymtable_Free(st);
return NULL;
}
@@ -260,7 +260,7 @@ symtable_new(void)
#define COMPILER_STACK_FRAME_SCALE 3
struct symtable *
-PySymtable_BuildObject(mod_ty mod, PyObject *filename, PyFutureFeatures *future)
+_PySymtable_Build(mod_ty mod, PyObject *filename, PyFutureFeatures *future)
{
struct symtable *st = symtable_new();
asdl_stmt_seq *seq;
@@ -272,7 +272,7 @@ PySymtable_BuildObject(mod_ty mod, PyObject *filename, PyFutureFeatures *future)
if (st == NULL)
return NULL;
if (filename == NULL) {
- PySymtable_Free(st);
+ _PySymtable_Free(st);
return NULL;
}
Py_INCREF(filename);
@@ -282,7 +282,7 @@ PySymtable_BuildObject(mod_ty mod, PyObject *filename, PyFutureFeatures *future)
/* Setup recursion depth check counters */
tstate = _PyThreadState_GET();
if (!tstate) {
- PySymtable_Free(st);
+ _PySymtable_Free(st);
return NULL;
}
/* Be careful here to prevent overflow. */
@@ -295,7 +295,7 @@ PySymtable_BuildObject(mod_ty mod, PyObject *filename, PyFutureFeatures *future)
/* Make the initial symbol information gathering pass */
if (!GET_IDENTIFIER(top) ||
!symtable_enter_block(st, top, ModuleBlock, (void *)mod, 0, 0)) {
- PySymtable_Free(st);
+ _PySymtable_Free(st);
return NULL;
}
@@ -325,7 +325,7 @@ PySymtable_BuildObject(mod_ty mod, PyObject *filename, PyFutureFeatures *future)
goto error;
}
if (!symtable_exit_block(st)) {
- PySymtable_Free(st);
+ _PySymtable_Free(st);
return NULL;
}
/* Check that the recursion depth counting balanced correctly */
@@ -333,35 +333,23 @@ PySymtable_BuildObject(mod_ty mod, PyObject *filename, PyFutureFeatures *future)
PyErr_Format(PyExc_SystemError,
"symtable analysis recursion depth mismatch (before=%d, after=%d)",
starting_recursion_depth, st->recursion_depth);
- PySymtable_Free(st);
+ _PySymtable_Free(st);
return NULL;
}
/* Make the second symbol analysis pass */
if (symtable_analyze(st))
return st;
- PySymtable_Free(st);
+ _PySymtable_Free(st);
return NULL;
error:
(void) symtable_exit_block(st);
- PySymtable_Free(st);
+ _PySymtable_Free(st);
return NULL;
}
-struct symtable *
-PySymtable_Build(mod_ty mod, const char *filename_str, PyFutureFeatures *future)
-{
- PyObject *filename;
- struct symtable *st;
- filename = PyUnicode_DecodeFSDefault(filename_str);
- if (filename == NULL)
- return NULL;
- st = PySymtable_BuildObject(mod, filename, future);
- Py_DECREF(filename);
- return st;
-}
void
-PySymtable_Free(struct symtable *st)
+_PySymtable_Free(struct symtable *st)
{
Py_XDECREF(st->st_filename);
Py_XDECREF(st->st_blocks);
@@ -402,7 +390,7 @@ _PyST_GetSymbol(PySTEntryObject *ste, PyObject *name)
}
int
-PyST_GetScope(PySTEntryObject *ste, PyObject *name)
+_PyST_GetScope(PySTEntryObject *ste, PyObject *name)
{
long symbol = _PyST_GetSymbol(ste, name);
return (symbol >> SCOPE_OFFSET) & SCOPE_MASK;
@@ -1971,3 +1959,26 @@ symtable_visit_dictcomp(struct symtable *st, expr_ty e)
e->v.DictComp.key,
e->v.DictComp.value);
}
+
+
+struct symtable *
+_Py_SymtableStringObjectFlags(const char *str, PyObject *filename,
+ int start, PyCompilerFlags *flags)
+{
+ struct symtable *st;
+ mod_ty mod;
+ PyArena *arena;
+
+ arena = PyArena_New();
+ if (arena == NULL)
+ return NULL;
+
+ mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
+ if (mod == NULL) {
+ PyArena_Free(arena);
+ return NULL;
+ }
+ st = _PySymtable_Build(mod, filename, 0);
+ PyArena_Free(arena);
+ return st;
+}