summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2017-02-04 12:13:20 +0200
committerSerhiy Storchaka <storchaka@gmail.com>2017-02-04 12:13:20 +0200
commit8fa02ec21b3087ebc0754fbf05b72c3647b2dbba (patch)
tree353865ca173ff31ff8f080cf8ad17948131b32e3
parent2da5419cea8ee7c2332331c45ab96b295011bdff (diff)
downloadcpython-8fa02ec21b3087ebc0754fbf05b72c3647b2dbba.tar.gz
Issue #20186: Converted the symtable module to Argument Clinic.
Original patch by Georg Brandl.
-rw-r--r--Modules/clinic/symtablemodule.c.h39
-rw-r--r--Modules/symtablemodule.c33
2 files changed, 61 insertions, 11 deletions
diff --git a/Modules/clinic/symtablemodule.c.h b/Modules/clinic/symtablemodule.c.h
new file mode 100644
index 0000000000..126ee0b7f5
--- /dev/null
+++ b/Modules/clinic/symtablemodule.c.h
@@ -0,0 +1,39 @@
+/*[clinic input]
+preserve
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_symtable_symtable__doc__,
+"symtable($module, str, filename, startstr, /)\n"
+"--\n"
+"\n"
+"Return symbol and scope dictionaries used internally by compiler.");
+
+#define _SYMTABLE_SYMTABLE_METHODDEF \
+ {"symtable", (PyCFunction)_symtable_symtable, METH_FASTCALL, _symtable_symtable__doc__},
+
+static PyObject *
+_symtable_symtable_impl(PyObject *module, const char *str,
+ PyObject *filename, const char *startstr);
+
+static PyObject *
+_symtable_symtable(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
+{
+ PyObject *return_value = NULL;
+ const char *str;
+ PyObject *filename;
+ const char *startstr;
+
+ if (!_PyArg_ParseStack(args, nargs, "sO&s:symtable",
+ &str, PyUnicode_FSDecoder, &filename, &startstr)) {
+ goto exit;
+ }
+
+ if (!_PyArg_NoStackKeywords("symtable", kwnames)) {
+ goto exit;
+ }
+ return_value = _symtable_symtable_impl(module, str, filename, startstr);
+
+exit:
+ return return_value;
+}
+/*[clinic end generated code: output=071dee4d836e2cfd input=a9049054013a1b77]*/
diff --git a/Modules/symtablemodule.c b/Modules/symtablemodule.c
index 34a6fc56f9..810f88da48 100644
--- a/Modules/symtablemodule.c
+++ b/Modules/symtablemodule.c
@@ -4,20 +4,33 @@
#include "Python-ast.h"
#include "symtable.h"
+#include "clinic/symtablemodule.c.h"
+/*[clinic input]
+module _symtable
+[clinic start generated code]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=f4685845a7100605]*/
+
+
+/*[clinic input]
+_symtable.symtable
+
+ str: str
+ filename: object(converter='PyUnicode_FSDecoder')
+ startstr: str
+ /
+
+Return symbol and scope dictionaries used internally by compiler.
+[clinic start generated code]*/
+
static PyObject *
-symtable_symtable(PyObject *self, PyObject *args)
+_symtable_symtable_impl(PyObject *module, const char *str,
+ PyObject *filename, const char *startstr)
+/*[clinic end generated code: output=914b369c9b785956 input=6c615e84d5f408e3]*/
{
struct symtable *st;
PyObject *t;
-
- char *str;
- PyObject *filename;
- char *startstr;
int start;
- if (!PyArg_ParseTuple(args, "sO&s:symtable",
- &str, PyUnicode_FSDecoder, &filename, &startstr))
- return NULL;
if (strcmp(startstr, "exec") == 0)
start = Py_file_input;
else if (strcmp(startstr, "eval") == 0)
@@ -42,9 +55,7 @@ symtable_symtable(PyObject *self, PyObject *args)
}
static PyMethodDef symtable_methods[] = {
- {"symtable", symtable_symtable, METH_VARARGS,
- PyDoc_STR("Return symbol and scope dictionaries"
- " used internally by compiler.")},
+ _SYMTABLE_SYMTABLE_METHODDEF
{NULL, NULL} /* sentinel */
};