1/*[clinic input]
2preserve
3[clinic start generated code]*/
4
5PyDoc_STRVAR(_symtable_symtable__doc__,
6"symtable($module, source, filename, startstr, /)\n"
7"--\n"
8"\n"
9"Return symbol and scope dictionaries used internally by compiler.");
10
11#define _SYMTABLE_SYMTABLE_METHODDEF    \
12    {"symtable", _PyCFunction_CAST(_symtable_symtable), METH_FASTCALL, _symtable_symtable__doc__},
13
14static PyObject *
15_symtable_symtable_impl(PyObject *module, PyObject *source,
16                        PyObject *filename, const char *startstr);
17
18static PyObject *
19_symtable_symtable(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
20{
21    PyObject *return_value = NULL;
22    PyObject *source;
23    PyObject *filename;
24    const char *startstr;
25
26    if (!_PyArg_CheckPositional("symtable", nargs, 3, 3)) {
27        goto exit;
28    }
29    source = args[0];
30    if (!PyUnicode_FSDecoder(args[1], &filename)) {
31        goto exit;
32    }
33    if (!PyUnicode_Check(args[2])) {
34        _PyArg_BadArgument("symtable", "argument 3", "str", args[2]);
35        goto exit;
36    }
37    Py_ssize_t startstr_length;
38    startstr = PyUnicode_AsUTF8AndSize(args[2], &startstr_length);
39    if (startstr == NULL) {
40        goto exit;
41    }
42    if (strlen(startstr) != (size_t)startstr_length) {
43        PyErr_SetString(PyExc_ValueError, "embedded null character");
44        goto exit;
45    }
46    return_value = _symtable_symtable_impl(module, source, filename, startstr);
47
48exit:
49    return return_value;
50}
51/*[clinic end generated code: output=3f7ccf535d750238 input=a9049054013a1b77]*/
52