Skip to content

Commit

Permalink
bpo-36876: Moved Parser/listnode.c statics to interpreter state. (GH-…
Browse files Browse the repository at this point in the history
  • Loading branch information
vsajip authored Nov 7, 2019
1 parent 7f46049 commit 9def81a
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 10 deletions.
9 changes: 9 additions & 0 deletions Include/internal/pycore_pystate.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,15 @@ struct _is {
struct _warnings_runtime_state warnings;

PyObject *audit_hooks;
/*
* See bpo-36876: miscellaneous ad hoc statics have been moved here.
*/
struct {
struct {
int level;
int atbol;
} listnode;
} parser;
};

PyAPI_FUNC(struct _is*) _PyInterpreterState_LookUpID(PY_INT64_T);
Expand Down
24 changes: 14 additions & 10 deletions Parser/listnode.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
/* List a node on a file */

#include "Python.h"
#include "pycore_pystate.h"
#include "token.h"
#include "node.h"

Expand All @@ -15,19 +16,21 @@ PyNode_ListTree(node *n)
listnode(stdout, n);
}

static int level, atbol;

static void
listnode(FILE *fp, node *n)
{
level = 0;
atbol = 1;
PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();

interp->parser.listnode.level = 0;
interp->parser.listnode.atbol = 1;
list1node(fp, n);
}

static void
list1node(FILE *fp, node *n)
{
PyInterpreterState *interp;

if (n == NULL)
return;
if (ISNONTERMINAL(TYPE(n))) {
Expand All @@ -36,25 +39,26 @@ list1node(FILE *fp, node *n)
list1node(fp, CHILD(n, i));
}
else if (ISTERMINAL(TYPE(n))) {
interp = _PyInterpreterState_GET_UNSAFE();
switch (TYPE(n)) {
case INDENT:
++level;
interp->parser.listnode.level++;
break;
case DEDENT:
--level;
interp->parser.listnode.level--;
break;
default:
if (atbol) {
if (interp->parser.listnode.atbol) {
int i;
for (i = 0; i < level; ++i)
for (i = 0; i < interp->parser.listnode.level; ++i)
fprintf(fp, "\t");
atbol = 0;
interp->parser.listnode.atbol = 0;
}
if (TYPE(n) == NEWLINE) {
if (STR(n) != NULL)
fprintf(fp, "%s", STR(n));
fprintf(fp, "\n");
atbol = 1;
interp->parser.listnode.atbol = 1;
}
else
fprintf(fp, "%s ", STR(n));
Expand Down

0 comments on commit 9def81a

Please sign in to comment.