From 5106ad13b20a39abdbf88e0f825632ae6c6e1ae4 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 4 Feb 2017 12:13:20 +0200 Subject: [PATCH] Issue #20186: Converted the symtable module to Argument Clinic. Original patch by Georg Brandl. --- Modules/clinic/symtablemodule.c.h | 39 +++++++++++++++++++++++++++++++ Modules/symtablemodule.c | 33 +++++++++++++++++--------- 2 files changed, 61 insertions(+), 11 deletions(-) create mode 100644 Modules/clinic/symtablemodule.c.h diff --git a/Modules/clinic/symtablemodule.c.h b/Modules/clinic/symtablemodule.c.h new file mode 100644 index 00000000000..126ee0b7f50 --- /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 34a6fc56f9f..810f88da488 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 */ };