Skip to content

Commit

Permalink
Issue python#20186: Converted the symtable module to Argument Clinic.
Browse files Browse the repository at this point in the history
Original patch by Georg Brandl.
  • Loading branch information
serhiy-storchaka committed Feb 4, 2017
1 parent 685c203 commit 5106ad1
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 11 deletions.
39 changes: 39 additions & 0 deletions Modules/clinic/symtablemodule.c.h
Original file line number Diff line number Diff line change
@@ -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]*/
33 changes: 22 additions & 11 deletions Modules/symtablemodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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 */
};

Expand Down

0 comments on commit 5106ad1

Please sign in to comment.