annotate Modules/symtablemodule.c @ 27998:e27f58a50737 legacy-trunk

SF bug #690377: Dud footnote reference in distutils docs
author Raymond Hettinger <python@rcn.com>
date Fri, 21 Feb 2003 02:47:09 +0000
parents de71e6fe64b0
children 3b59fa5d25b1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16422
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
1 #include "Python.h"
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
2
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
3 #include "compile.h"
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
4 #include "symtable.h"
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
5
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
6 static PyObject *
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
7 symtable_symtable(PyObject *self, PyObject *args)
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
8 {
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
9 struct symtable *st;
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
10 PyObject *t;
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
11
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
12 char *str;
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
13 char *filename;
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
14 char *startstr;
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
15 int start;
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
16
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
17 if (!PyArg_ParseTuple(args, "sss:symtable", &str, &filename,
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
18 &startstr))
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
19 return NULL;
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
20 if (strcmp(startstr, "exec") == 0)
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
21 start = Py_file_input;
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
22 else if (strcmp(startstr, "eval") == 0)
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
23 start = Py_eval_input;
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
24 else if (strcmp(startstr, "single") == 0)
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
25 start = Py_single_input;
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
26 else {
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
27 PyErr_SetString(PyExc_ValueError,
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
28 "symtable() arg 3 must be 'exec' or 'eval' or 'single'");
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
29 return NULL;
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
30 }
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
31 st = Py_SymtableString(str, filename, start);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
32 if (st == NULL)
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
33 return NULL;
16539
a47d93ef103a Relax the rules for using 'from ... import *' and exec in the presence
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16422
diff changeset
34 t = Py_BuildValue("O", st->st_symbols);
21253
d024a5c72cb5 Fix [ #489673 ] memory leak in test_symtable: Free the st_future slot.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17551
diff changeset
35 PyMem_Free((void *)st->st_future);
16422
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
36 PySymtable_Free(st);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
37 return t;
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
38 }
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
39
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
40 static PyMethodDef symtable_methods[] = {
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
41 {"symtable", symtable_symtable, METH_VARARGS,
24796
de71e6fe64b0 Allow more docstrings to be removed during compilation in some modules
Neal Norwitz <nnorwitz@gmail.com>
parents: 24471
diff changeset
42 PyDoc_STR("Return symbol and scope dictionaries"
de71e6fe64b0 Allow more docstrings to be removed during compilation in some modules
Neal Norwitz <nnorwitz@gmail.com>
parents: 24471
diff changeset
43 " used internally by compiler.")},
16422
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
44 {NULL, NULL} /* sentinel */
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
45 };
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
46
24471
f66b3a3509c7 Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents: 21253
diff changeset
47 PyMODINIT_FUNC
16422
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
48 init_symtable(void)
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
49 {
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
50 PyObject *m;
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
51
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
52 m = Py_InitModule("_symtable", symtable_methods);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
53 PyModule_AddIntConstant(m, "USE", USE);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
54 PyModule_AddIntConstant(m, "DEF_GLOBAL", DEF_GLOBAL);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
55 PyModule_AddIntConstant(m, "DEF_LOCAL", DEF_LOCAL);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
56 PyModule_AddIntConstant(m, "DEF_PARAM", DEF_PARAM);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
57 PyModule_AddIntConstant(m, "DEF_STAR", DEF_STAR);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
58 PyModule_AddIntConstant(m, "DEF_DOUBLESTAR", DEF_DOUBLESTAR);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
59 PyModule_AddIntConstant(m, "DEF_INTUPLE", DEF_INTUPLE);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
60 PyModule_AddIntConstant(m, "DEF_FREE", DEF_FREE);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
61 PyModule_AddIntConstant(m, "DEF_FREE_GLOBAL", DEF_FREE_GLOBAL);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
62 PyModule_AddIntConstant(m, "DEF_FREE_CLASS", DEF_FREE_CLASS);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
63 PyModule_AddIntConstant(m, "DEF_IMPORT", DEF_IMPORT);
17159
10940561e891 add DEF_BOUND constant
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16539
diff changeset
64 PyModule_AddIntConstant(m, "DEF_BOUND", DEF_BOUND);
16422
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
65
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
66 PyModule_AddIntConstant(m, "TYPE_FUNCTION", TYPE_FUNCTION);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
67 PyModule_AddIntConstant(m, "TYPE_CLASS", TYPE_CLASS);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
68 PyModule_AddIntConstant(m, "TYPE_MODULE", TYPE_MODULE);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
69
17551
cbc9f8865595 Export three optimization (fast locals) flags
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17159
diff changeset
70 PyModule_AddIntConstant(m, "OPT_IMPORT_STAR", OPT_IMPORT_STAR);
cbc9f8865595 Export three optimization (fast locals) flags
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17159
diff changeset
71 PyModule_AddIntConstant(m, "OPT_EXEC", OPT_EXEC);
cbc9f8865595 Export three optimization (fast locals) flags
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17159
diff changeset
72 PyModule_AddIntConstant(m, "OPT_BARE_EXEC", OPT_BARE_EXEC);
cbc9f8865595 Export three optimization (fast locals) flags
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17159
diff changeset
73
16422
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
74 PyModule_AddIntConstant(m, "LOCAL", LOCAL);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
75 PyModule_AddIntConstant(m, "GLOBAL_EXPLICIT", GLOBAL_EXPLICIT);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
76 PyModule_AddIntConstant(m, "GLOBAL_IMPLICIT", GLOBAL_IMPLICIT);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
77 PyModule_AddIntConstant(m, "FREE", FREE);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
78 PyModule_AddIntConstant(m, "CELL", CELL);
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
79 }