summaryrefslogtreecommitdiffstats
path: root/Modules/parsermodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/parsermodule.c')
-rw-r--r--Modules/parsermodule.c268
1 files changed, 136 insertions, 132 deletions
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index 6ff98de..cc1a44f 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -133,22 +133,18 @@ node2tuple(node *n, /* node to convert */
/* There are two types of intermediate objects we're interested in:
- * 'eval' and 'exec' types. These constants can be used in the ast_type
+ * 'eval' and 'exec' types. These constants can be used in the st_type
* field of the object type to identify which any given object represents.
* These should probably go in an external header to allow other extensions
* to use them, but then, we really should be using C++ too. ;-)
- *
- * The PyAST_FRAGMENT type is not currently supported. Maybe not useful?
- * Haven't decided yet.
*/
-#define PyAST_EXPR 1
-#define PyAST_SUITE 2
-#define PyAST_FRAGMENT 3
+#define PyST_EXPR 1
+#define PyST_SUITE 2
/* These are the internal objects and definitions required to implement the
- * AST type. Most of the internal names are more reminiscent of the 'old'
+ * ST type. Most of the internal names are more reminiscent of the 'old'
* naming style, but the code uses the new naming convention.
*/
@@ -156,29 +152,29 @@ static PyObject*
parser_error = 0;
-typedef struct _PyAST_Object {
+typedef struct {
PyObject_HEAD /* standard object header */
- node* ast_node; /* the node* returned by the parser */
- int ast_type; /* EXPR or SUITE ? */
-} PyAST_Object;
+ node* st_node; /* the node* returned by the parser */
+ int st_type; /* EXPR or SUITE ? */
+} PyST_Object;
staticforward void
-parser_free(PyAST_Object *ast);
+parser_free(PyST_Object *st);
staticforward int
-parser_compare(PyAST_Object *left, PyAST_Object *right);
+parser_compare(PyST_Object *left, PyST_Object *right);
staticforward PyObject *
parser_getattr(PyObject *self, char *name);
static
-PyTypeObject PyAST_Type = {
+PyTypeObject PyST_Type = {
PyObject_HEAD_INIT(NULL)
0,
- "ast", /* tp_name */
- (int) sizeof(PyAST_Object), /* tp_basicsize */
+ "st", /* tp_name */
+ (int) sizeof(PyST_Object), /* tp_basicsize */
0, /* tp_itemsize */
(destructor)parser_free, /* tp_dealloc */
0, /* tp_print */
@@ -202,7 +198,7 @@ PyTypeObject PyAST_Type = {
/* __doc__ */
"Intermediate representation of a Python parse tree."
-}; /* PyAST_Type */
+}; /* PyST_Type */
static int
@@ -235,7 +231,7 @@ parser_compare_nodes(node *left, node *right)
}
-/* int parser_compare(PyAST_Object* left, PyAST_Object* right)
+/* int parser_compare(PyST_Object* left, PyST_Object* right)
*
* Comparison function used by the Python operators ==, !=, <, >, <=, >=
* This really just wraps a call to parser_compare_nodes() with some easy
@@ -243,7 +239,7 @@ parser_compare_nodes(node *left, node *right)
*
*/
static int
-parser_compare(PyAST_Object *left, PyAST_Object *right)
+parser_compare(PyST_Object *left, PyST_Object *right)
{
if (left == right)
return (0);
@@ -251,54 +247,54 @@ parser_compare(PyAST_Object *left, PyAST_Object *right)
if ((left == 0) || (right == 0))
return (-1);
- return (parser_compare_nodes(left->ast_node, right->ast_node));
+ return (parser_compare_nodes(left->st_node, right->st_node));
}
-/* parser_newastobject(node* ast)
+/* parser_newstobject(node* st)
*
- * Allocates a new Python object representing an AST. This is simply the
+ * Allocates a new Python object representing an ST. This is simply the
* 'wrapper' object that holds a node* and allows it to be passed around in
* Python code.
*
*/
static PyObject*
-parser_newastobject(node *ast, int type)
+parser_newstobject(node *st, int type)
{
- PyAST_Object* o = PyObject_New(PyAST_Object, &PyAST_Type);
+ PyST_Object* o = PyObject_New(PyST_Object, &PyST_Type);
if (o != 0) {
- o->ast_node = ast;
- o->ast_type = type;
+ o->st_node = st;
+ o->st_type = type;
}
else {
- PyNode_Free(ast);
+ PyNode_Free(st);
}
return ((PyObject*)o);
}
-/* void parser_free(PyAST_Object* ast)
+/* void parser_free(PyST_Object* st)
*
* This is called by a del statement that reduces the reference count to 0.
*
*/
static void
-parser_free(PyAST_Object *ast)
+parser_free(PyST_Object *st)
{
- PyNode_Free(ast->ast_node);
- PyObject_Del(ast);
+ PyNode_Free(st->st_node);
+ PyObject_Del(st);
}
-/* parser_ast2tuple(PyObject* self, PyObject* args, PyObject* kw)
+/* parser_st2tuple(PyObject* self, PyObject* args, PyObject* kw)
*
* This provides conversion from a node* to a tuple object that can be
- * returned to the Python-level caller. The AST object is not modified.
+ * returned to the Python-level caller. The ST object is not modified.
*
*/
static PyObject*
-parser_ast2tuple(PyAST_Object *self, PyObject *args, PyObject *kw)
+parser_st2tuple(PyST_Object *self, PyObject *args, PyObject *kw)
{
PyObject *line_option = 0;
PyObject *res = 0;
@@ -307,8 +303,8 @@ parser_ast2tuple(PyAST_Object *self, PyObject *args, PyObject *kw)
static char *keywords[] = {"ast", "line_info", NULL};
if (self == NULL) {
- ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|O:ast2tuple", keywords,
- &PyAST_Type, &self, &line_option);
+ ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|O:st2tuple", keywords,
+ &PyST_Type, &self, &line_option);
}
else
ok = PyArg_ParseTupleAndKeywords(args, kw, "|O:totuple", &keywords[1],
@@ -319,24 +315,24 @@ parser_ast2tuple(PyAST_Object *self, PyObject *args, PyObject *kw)
lineno = (PyObject_IsTrue(line_option) != 0) ? 1 : 0;
}
/*
- * Convert AST into a tuple representation. Use Guido's function,
+ * Convert ST into a tuple representation. Use Guido's function,
* since it's known to work already.
*/
- res = node2tuple(((PyAST_Object*)self)->ast_node,
+ res = node2tuple(((PyST_Object*)self)->st_node,
PyTuple_New, PyTuple_SetItem, lineno);
}
return (res);
}
-/* parser_ast2list(PyObject* self, PyObject* args, PyObject* kw)
+/* parser_st2list(PyObject* self, PyObject* args, PyObject* kw)
*
* This provides conversion from a node* to a list object that can be
- * returned to the Python-level caller. The AST object is not modified.
+ * returned to the Python-level caller. The ST object is not modified.
*
*/
static PyObject*
-parser_ast2list(PyAST_Object *self, PyObject *args, PyObject *kw)
+parser_st2list(PyST_Object *self, PyObject *args, PyObject *kw)
{
PyObject *line_option = 0;
PyObject *res = 0;
@@ -345,8 +341,8 @@ parser_ast2list(PyAST_Object *self, PyObject *args, PyObject *kw)
static char *keywords[] = {"ast", "line_info", NULL};
if (self == NULL)
- ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|O:ast2list", keywords,
- &PyAST_Type, &self, &line_option);
+ ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|O:st2list", keywords,
+ &PyST_Type, &self, &line_option);
else
ok = PyArg_ParseTupleAndKeywords(args, kw, "|O:tolist", &keywords[1],
&line_option);
@@ -356,40 +352,40 @@ parser_ast2list(PyAST_Object *self, PyObject *args, PyObject *kw)
lineno = PyObject_IsTrue(line_option) ? 1 : 0;
}
/*
- * Convert AST into a tuple representation. Use Guido's function,
+ * Convert ST into a tuple representation. Use Guido's function,
* since it's known to work already.
*/
- res = node2tuple(self->ast_node,
+ res = node2tuple(self->st_node,
PyList_New, PyList_SetItem, lineno);
}
return (res);
}
-/* parser_compileast(PyObject* self, PyObject* args)
+/* parser_compilest(PyObject* self, PyObject* args)
*
* This function creates code objects from the parse tree represented by
* the passed-in data object. An optional file name is passed in as well.
*
*/
static PyObject*
-parser_compileast(PyAST_Object *self, PyObject *args, PyObject *kw)
+parser_compilest(PyST_Object *self, PyObject *args, PyObject *kw)
{
PyObject* res = 0;
- char* str = "<ast>";
+ char* str = "<syntax-tree>";
int ok;
static char *keywords[] = {"ast", "filename", NULL};
if (self == NULL)
- ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|s:compileast", keywords,
- &PyAST_Type, &self, &str);
+ ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|s:compilest", keywords,
+ &PyST_Type, &self, &str);
else
ok = PyArg_ParseTupleAndKeywords(args, kw, "|s:compile", &keywords[1],
&str);
if (ok)
- res = (PyObject *)PyNode_Compile(self->ast_node, str);
+ res = (PyObject *)PyNode_Compile(self->st_node, str);
return (res);
}
@@ -398,12 +394,12 @@ parser_compileast(PyAST_Object *self, PyObject *args, PyObject *kw)
/* PyObject* parser_isexpr(PyObject* self, PyObject* args)
* PyObject* parser_issuite(PyObject* self, PyObject* args)
*
- * Checks the passed-in AST object to determine if it is an expression or
+ * Checks the passed-in ST object to determine if it is an expression or
* a statement suite, respectively. The return is a Python truth value.
*
*/
static PyObject*
-parser_isexpr(PyAST_Object *self, PyObject *args, PyObject *kw)
+parser_isexpr(PyST_Object *self, PyObject *args, PyObject *kw)
{
PyObject* res = 0;
int ok;
@@ -412,13 +408,13 @@ parser_isexpr(PyAST_Object *self, PyObject *args, PyObject *kw)
if (self == NULL)
ok = PyArg_ParseTupleAndKeywords(args, kw, "O!:isexpr", keywords,
- &PyAST_Type, &self);
+ &PyST_Type, &self);
else
ok = PyArg_ParseTupleAndKeywords(args, kw, ":isexpr", &keywords[1]);
if (ok) {
- /* Check to see if the AST represents an expression or not. */
- res = (self->ast_type == PyAST_EXPR) ? Py_True : Py_False;
+ /* Check to see if the ST represents an expression or not. */
+ res = (self->st_type == PyST_EXPR) ? Py_True : Py_False;
Py_INCREF(res);
}
return (res);
@@ -426,7 +422,7 @@ parser_isexpr(PyAST_Object *self, PyObject *args, PyObject *kw)
static PyObject*
-parser_issuite(PyAST_Object *self, PyObject *args, PyObject *kw)
+parser_issuite(PyST_Object *self, PyObject *args, PyObject *kw)
{
PyObject* res = 0;
int ok;
@@ -435,13 +431,13 @@ parser_issuite(PyAST_Object *self, PyObject *args, PyObject *kw)
if (self == NULL)
ok = PyArg_ParseTupleAndKeywords(args, kw, "O!:issuite", keywords,
- &PyAST_Type, &self);
+ &PyST_Type, &self);
else
ok = PyArg_ParseTupleAndKeywords(args, kw, ":issuite", &keywords[1]);
if (ok) {
- /* Check to see if the AST represents an expression or not. */
- res = (self->ast_type == PyAST_EXPR) ? Py_False : Py_True;
+ /* Check to see if the ST represents an expression or not. */
+ res = (self->st_type == PyST_EXPR) ? Py_False : Py_True;
Py_INCREF(res);
}
return (res);
@@ -452,16 +448,16 @@ parser_issuite(PyAST_Object *self, PyObject *args, PyObject *kw)
static PyMethodDef
parser_methods[] = {
- {"compile", (PyCFunction)parser_compileast, PUBLIC_METHOD_TYPE,
- "Compile this AST object into a code object."},
+ {"compile", (PyCFunction)parser_compilest, PUBLIC_METHOD_TYPE,
+ "Compile this ST object into a code object."},
{"isexpr", (PyCFunction)parser_isexpr, PUBLIC_METHOD_TYPE,
- "Determines if this AST object was created from an expression."},
+ "Determines if this ST object was created from an expression."},
{"issuite", (PyCFunction)parser_issuite, PUBLIC_METHOD_TYPE,
- "Determines if this AST object was created from a suite."},
- {"tolist", (PyCFunction)parser_ast2list, PUBLIC_METHOD_TYPE,
- "Creates a list-tree representation of this AST."},
- {"totuple", (PyCFunction)parser_ast2tuple, PUBLIC_METHOD_TYPE,
- "Creates a tuple-tree representation of this AST."},
+ "Determines if this ST object was created from a suite."},
+ {"tolist", (PyCFunction)parser_st2list, PUBLIC_METHOD_TYPE,
+ "Creates a list-tree representation of this ST."},
+ {"totuple", (PyCFunction)parser_st2tuple, PUBLIC_METHOD_TYPE,
+ "Creates a tuple-tree representation of this ST."},
{NULL, NULL, 0, NULL}
};
@@ -502,11 +498,11 @@ parser_do_parse(PyObject *args, PyObject *kw, char *argspec, int type)
if (PyArg_ParseTupleAndKeywords(args, kw, argspec, keywords, &string)) {
node* n = PyParser_SimpleParseString(string,
- (type == PyAST_EXPR)
+ (type == PyST_EXPR)
? eval_input : file_input);
if (n != 0)
- res = parser_newastobject(n, type);
+ res = parser_newstobject(n, type);
else
err_string("could not parse string");
}
@@ -523,23 +519,23 @@ parser_do_parse(PyObject *args, PyObject *kw, char *argspec, int type)
*
*/
static PyObject*
-parser_expr(PyAST_Object *self, PyObject *args, PyObject *kw)
+parser_expr(PyST_Object *self, PyObject *args, PyObject *kw)
{
NOTE(ARGUNUSED(self))
- return (parser_do_parse(args, kw, "s:expr", PyAST_EXPR));
+ return (parser_do_parse(args, kw, "s:expr", PyST_EXPR));
}
static PyObject*
-parser_suite(PyAST_Object *self, PyObject *args, PyObject *kw)
+parser_suite(PyST_Object *self, PyObject *args, PyObject *kw)
{
NOTE(ARGUNUSED(self))
- return (parser_do_parse(args, kw, "s:suite", PyAST_SUITE));
+ return (parser_do_parse(args, kw, "s:suite", PyST_SUITE));
}
-/* This is the messy part of the code. Conversion from a tuple to an AST
+/* This is the messy part of the code. Conversion from a tuple to an ST
* object requires that the input tuple be valid without having to rely on
* catching an exception from the compiler. This is done to allow the
* compiler itself to remain fast, since most of its input will come from
@@ -549,8 +545,8 @@ parser_suite(PyAST_Object *self, PyObject *args, PyObject *kw)
*
* Two aspects can be broken out in this code: creating a node tree from
* the tuple passed in, and verifying that it is indeed valid. It may be
- * advantageous to expand the number of AST types to include funcdefs and
- * lambdadefs to take advantage of the optimizer, recognizing those ASTs
+ * advantageous to expand the number of ST types to include funcdefs and
+ * lambdadefs to take advantage of the optimizer, recognizing those STs
* here. They are not necessary, and not quite as useful in a raw form.
* For now, let's get expressions and suites working reliably.
*/
@@ -561,35 +557,35 @@ staticforward int validate_expr_tree(node *tree);
staticforward int validate_file_input(node *tree);
-/* PyObject* parser_tuple2ast(PyObject* self, PyObject* args)
+/* PyObject* parser_tuple2st(PyObject* self, PyObject* args)
*
* This is the public function, called from the Python code. It receives a
- * single tuple object from the caller, and creates an AST object if the
+ * single tuple object from the caller, and creates an ST object if the
* tuple can be validated. It does this by checking the first code of the
* tuple, and, if acceptable, builds the internal representation. If this
* step succeeds, the internal representation is validated as fully as
* possible with the various validate_*() routines defined below.
*
- * This function must be changed if support is to be added for PyAST_FRAGMENT
- * AST objects.
+ * This function must be changed if support is to be added for PyST_FRAGMENT
+ * ST objects.
*
*/
static PyObject*
-parser_tuple2ast(PyAST_Object *self, PyObject *args, PyObject *kw)
+parser_tuple2st(PyST_Object *self, PyObject *args, PyObject *kw)
{
NOTE(ARGUNUSED(self))
- PyObject *ast = 0;
+ PyObject *st = 0;
PyObject *tuple;
node *tree;
static char *keywords[] = {"sequence", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kw, "O:sequence2ast", keywords,
+ if (!PyArg_ParseTupleAndKeywords(args, kw, "O:sequence2st", keywords,
&tuple))
return (0);
if (!PySequence_Check(tuple)) {
PyErr_SetString(PyExc_ValueError,
- "sequence2ast() requires a single sequence argument");
+ "sequence2st() requires a single sequence argument");
return (0);
}
/*
@@ -601,12 +597,12 @@ parser_tuple2ast(PyAST_Object *self, PyObject *args, PyObject *kw)
if (start_sym == eval_input) {
/* Might be an eval form. */
if (validate_expr_tree(tree))
- ast = parser_newastobject(tree, PyAST_EXPR);
+ st = parser_newstobject(tree, PyST_EXPR);
}
else if (start_sym == file_input) {
/* This looks like an exec form so far. */
if (validate_file_input(tree))
- ast = parser_newastobject(tree, PyAST_SUITE);
+ st = parser_newstobject(tree, PyST_SUITE);
}
else {
/* This is a fragment, at best. */
@@ -617,10 +613,10 @@ parser_tuple2ast(PyAST_Object *self, PyObject *args, PyObject *kw)
/* Make sure we throw an exception on all errors. We should never
* get this, but we'd do well to be sure something is done.
*/
- if ((ast == 0) && !PyErr_Occurred())
- err_string("unspecified AST error occurred");
+ if (st == NULL && !PyErr_Occurred())
+ err_string("unspecified ST error occurred");
- return (ast);
+ return st;
}
@@ -752,7 +748,7 @@ build_node_tree(PyObject *tuple)
* Throw an exception now and be done with it.
*/
tuple = Py_BuildValue("os", tuple,
- "Illegal ast tuple; cannot start with terminal symbol.");
+ "Illegal syntax-tree; cannot start with terminal symbol.");
PyErr_SetObject(parser_error, tuple);
}
else if (ISNONTERMINAL(num)) {
@@ -2726,12 +2722,12 @@ validate_expr_tree(node *tree)
static int
validate_file_input(node *tree)
{
- int j = 0;
+ int j;
int nch = NCH(tree) - 1;
int res = ((nch >= 0)
&& validate_ntype(CHILD(tree, nch), ENDMARKER));
- for ( ; res && (j < nch); ++j) {
+ for (j = 0; res && (j < nch); ++j) {
if (TYPE(CHILD(tree, j)) == stmt)
res = validate_stmt(CHILD(tree, j));
else
@@ -2757,18 +2753,18 @@ parser__pickler(PyObject *self, PyObject *args)
{
NOTE(ARGUNUSED(self))
PyObject *result = NULL;
- PyObject *ast = NULL;
+ PyObject *st = NULL;
PyObject *empty_dict = NULL;
- if (PyArg_ParseTuple(args, "O!:_pickler", &PyAST_Type, &ast)) {
+ if (PyArg_ParseTuple(args, "O!:_pickler", &PyST_Type, &st)) {
PyObject *newargs;
PyObject *tuple;
if ((empty_dict = PyDict_New()) == NULL)
goto finally;
- if ((newargs = Py_BuildValue("Oi", ast, 1)) == NULL)
+ if ((newargs = Py_BuildValue("Oi", st, 1)) == NULL)
goto finally;
- tuple = parser_ast2tuple((PyAST_Object*)NULL, newargs, empty_dict);
+ tuple = parser_st2tuple((PyST_Object*)NULL, newargs, empty_dict);
if (tuple != NULL) {
result = Py_BuildValue("O(O)", pickle_constructor, tuple);
Py_DECREF(tuple);
@@ -2784,34 +2780,44 @@ parser__pickler(PyObject *self, PyObject *args)
/* Functions exported by this module. Most of this should probably
- * be converted into an AST object with methods, but that is better
+ * be converted into an ST object with methods, but that is better
* done directly in Python, allowing subclasses to be created directly.
* We'd really have to write a wrapper around it all anyway to allow
* inheritance.
*/
static PyMethodDef parser_functions[] = {
- {"ast2tuple", (PyCFunction)parser_ast2tuple, PUBLIC_METHOD_TYPE,
- "Creates a tuple-tree representation of an AST."},
- {"ast2list", (PyCFunction)parser_ast2list, PUBLIC_METHOD_TYPE,
- "Creates a list-tree representation of an AST."},
- {"compileast", (PyCFunction)parser_compileast, PUBLIC_METHOD_TYPE,
- "Compiles an AST object into a code object."},
- {"expr", (PyCFunction)parser_expr, PUBLIC_METHOD_TYPE,
- "Creates an AST object from an expression."},
- {"isexpr", (PyCFunction)parser_isexpr, PUBLIC_METHOD_TYPE,
- "Determines if an AST object was created from an expression."},
- {"issuite", (PyCFunction)parser_issuite, PUBLIC_METHOD_TYPE,
- "Determines if an AST object was created from a suite."},
- {"suite", (PyCFunction)parser_suite, PUBLIC_METHOD_TYPE,
- "Creates an AST object from a suite."},
- {"sequence2ast", (PyCFunction)parser_tuple2ast, PUBLIC_METHOD_TYPE,
- "Creates an AST object from a tree representation."},
- {"tuple2ast", (PyCFunction)parser_tuple2ast, PUBLIC_METHOD_TYPE,
- "Creates an AST object from a tree representation."},
+ {"ast2tuple", (PyCFunction)parser_st2tuple, PUBLIC_METHOD_TYPE,
+ "Creates a tuple-tree representation of an ST."},
+ {"ast2list", (PyCFunction)parser_st2list, PUBLIC_METHOD_TYPE,
+ "Creates a list-tree representation of an ST."},
+ {"compileast", (PyCFunction)parser_compilest, PUBLIC_METHOD_TYPE,
+ "Compiles an ST object into a code object."},
+ {"compilest", (PyCFunction)parser_compilest, PUBLIC_METHOD_TYPE,
+ "Compiles an ST object into a code object."},
+ {"expr", (PyCFunction)parser_expr, PUBLIC_METHOD_TYPE,
+ "Creates an ST object from an expression."},
+ {"isexpr", (PyCFunction)parser_isexpr, PUBLIC_METHOD_TYPE,
+ "Determines if an ST object was created from an expression."},
+ {"issuite", (PyCFunction)parser_issuite, PUBLIC_METHOD_TYPE,
+ "Determines if an ST object was created from a suite."},
+ {"suite", (PyCFunction)parser_suite, PUBLIC_METHOD_TYPE,
+ "Creates an ST object from a suite."},
+ {"sequence2ast", (PyCFunction)parser_tuple2st, PUBLIC_METHOD_TYPE,
+ "Creates an ST object from a tree representation."},
+ {"sequence2st", (PyCFunction)parser_tuple2st, PUBLIC_METHOD_TYPE,
+ "Creates an ST object from a tree representation."},
+ {"st2tuple", (PyCFunction)parser_st2tuple, PUBLIC_METHOD_TYPE,
+ "Creates a tuple-tree representation of an ST."},
+ {"st2list", (PyCFunction)parser_st2list, PUBLIC_METHOD_TYPE,
+ "Creates a list-tree representation of an ST."},
+ {"tuple2ast", (PyCFunction)parser_tuple2st, PUBLIC_METHOD_TYPE,
+ "Creates an ST object from a tree representation."},
+ {"tuple2st", (PyCFunction)parser_tuple2st, PUBLIC_METHOD_TYPE,
+ "Creates an ST object from a tree representation."},
/* private stuff: support pickle module */
{"_pickler", (PyCFunction)parser__pickler, METH_VARARGS,
- "Returns the pickle magic to allow ast objects to be pickled."},
+ "Returns the pickle magic to allow ST objects to be pickled."},
{NULL, NULL, 0, NULL}
};
@@ -2824,8 +2830,8 @@ initparser(void)
{
PyObject* module;
PyObject* dict;
-
- PyAST_Type.ob_type = &PyType_Type;
+
+ PyST_Type.ob_type = &PyType_Type;
module = Py_InitModule("parser", parser_functions);
dict = PyModule_GetDict(module);
@@ -2833,16 +2839,14 @@ initparser(void)
parser_error = PyErr_NewException("parser.ParserError", NULL, NULL);
if ((parser_error == 0)
- || (PyDict_SetItemString(dict, "ParserError", parser_error) != 0))
- {
- /* caller will check PyErr_Occurred() */
- return;
+ || (PyDict_SetItemString(dict, "ParserError", parser_error) != 0)) {
+ /* caller will check PyErr_Occurred() */
+ return;
}
- /*
- * Nice to have, but don't cry if we fail.
- */
- Py_INCREF(&PyAST_Type);
- PyDict_SetItemString(dict, "ASTType", (PyObject*)&PyAST_Type);
+ Py_INCREF(&PyST_Type);
+ PyDict_SetItemString(dict, "ASTType", (PyObject*)&PyST_Type);
+ Py_INCREF(&PyST_Type);
+ PyDict_SetItemString(dict, "STType", (PyObject*)&PyST_Type);
PyDict_SetItemString(dict, "__copyright__",
PyString_FromString(parser_copyright_string));
@@ -2857,15 +2861,15 @@ initparser(void)
PyObject *func, *pickler;
func = PyObject_GetAttrString(module, "pickle");
- pickle_constructor = PyDict_GetItemString(dict, "sequence2ast");
+ pickle_constructor = PyDict_GetItemString(dict, "sequence2st");
pickler = PyDict_GetItemString(dict, "_pickler");
Py_XINCREF(pickle_constructor);
if ((func != NULL) && (pickle_constructor != NULL)
&& (pickler != NULL)) {
PyObject *res;
- res = PyObject_CallFunction(
- func, "OOO", &PyAST_Type, pickler, pickle_constructor);
+ res = PyObject_CallFunction(func, "OOO", &PyST_Type, pickler,
+ pickle_constructor);
Py_XDECREF(res);
}
Py_XDECREF(func);