annotate Modules/symtablemodule.c @ 87488:124e51c19e4f

Issue #19734: Also run pip version check in isolated mode
author Nick Coghlan <ncoghlan@gmail.com>
date Sun, 24 Nov 2013 16:49:20 +1000
parents f5c729dbe9fb
children
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
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 30683
diff changeset
3 #include "code.h"
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 30683
diff changeset
4 #include "Python-ast.h"
16422
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
5 #include "symtable.h"
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
6
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
7 static PyObject *
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
8 symtable_symtable(PyObject *self, PyObject *args)
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
9 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
10 struct symtable *st;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
11 PyObject *t;
16422
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
12
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
13 char *str;
85417
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 83867
diff changeset
14 PyObject *filename;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
15 char *startstr;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
16 int start;
16422
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
17
85417
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 83867
diff changeset
18 if (!PyArg_ParseTuple(args, "sO&s:symtable",
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 83867
diff changeset
19 &str, PyUnicode_FSDecoder, &filename, &startstr))
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
20 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
21 if (strcmp(startstr, "exec") == 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
22 start = Py_file_input;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
23 else if (strcmp(startstr, "eval") == 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
24 start = Py_eval_input;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
25 else if (strcmp(startstr, "single") == 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
26 start = Py_single_input;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
27 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
28 PyErr_SetString(PyExc_ValueError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
29 "symtable() arg 3 must be 'exec' or 'eval' or 'single'");
85417
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 83867
diff changeset
30 Py_DECREF(filename);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
31 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
32 }
85417
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 83867
diff changeset
33 st = Py_SymtableStringObject(str, filename, start);
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 83867
diff changeset
34 Py_DECREF(filename);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
35 if (st == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
36 return NULL;
86660
bc259b221cb8 just return toplevel symbol table rather than all blocks (closes #19393)
Benjamin Peterson <benjamin@python.org>
parents: 80072
diff changeset
37 t = (PyObject *)st->st_top;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
38 Py_INCREF(t);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
39 PyMem_Free((void *)st->st_future);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
40 PySymtable_Free(st);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
41 return t;
16422
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
42 }
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
43
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
44 static PyMethodDef symtable_methods[] = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
45 {"symtable", symtable_symtable, METH_VARARGS,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
46 PyDoc_STR("Return symbol and scope dictionaries"
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
47 " used internally by compiler.")},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
48 {NULL, NULL} /* sentinel */
16422
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
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 41464
diff changeset
51 static struct PyModuleDef symtablemodule = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
52 PyModuleDef_HEAD_INIT,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
53 "_symtable",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
54 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
55 -1,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
56 symtable_methods,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
57 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
58 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
59 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
60 NULL
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 41464
diff changeset
61 };
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 41464
diff changeset
62
24471
f66b3a3509c7 Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents: 21253
diff changeset
63 PyMODINIT_FUNC
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 41464
diff changeset
64 PyInit__symtable(void)
16422
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
65 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
66 PyObject *m;
16422
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
67
80072
eec0cafe171d initialize more global type objects (closes #16369)
Benjamin Peterson <benjamin@python.org>
parents: 68257
diff changeset
68 if (PyType_Ready(&PySTEntry_Type) < 0)
eec0cafe171d initialize more global type objects (closes #16369)
Benjamin Peterson <benjamin@python.org>
parents: 68257
diff changeset
69 return NULL;
eec0cafe171d initialize more global type objects (closes #16369)
Benjamin Peterson <benjamin@python.org>
parents: 68257
diff changeset
70
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
71 m = PyModule_Create(&symtablemodule);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
72 if (m == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
73 return NULL;
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
74 PyModule_AddIntMacro(m, USE);
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
75 PyModule_AddIntMacro(m, DEF_GLOBAL);
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
76 PyModule_AddIntMacro(m, DEF_LOCAL);
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
77 PyModule_AddIntMacro(m, DEF_PARAM);
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
78 PyModule_AddIntMacro(m, DEF_FREE);
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
79 PyModule_AddIntMacro(m, DEF_FREE_CLASS);
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
80 PyModule_AddIntMacro(m, DEF_IMPORT);
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
81 PyModule_AddIntMacro(m, DEF_BOUND);
16422
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
82
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
83 PyModule_AddIntConstant(m, "TYPE_FUNCTION", FunctionBlock);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
84 PyModule_AddIntConstant(m, "TYPE_CLASS", ClassBlock);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
85 PyModule_AddIntConstant(m, "TYPE_MODULE", ModuleBlock);
16422
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
86
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
87 PyModule_AddIntMacro(m, OPT_IMPORT_STAR);
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
88 PyModule_AddIntMacro(m, OPT_TOPLEVEL);
17551
cbc9f8865595 Export three optimization (fast locals) flags
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 17159
diff changeset
89
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
90 PyModule_AddIntMacro(m, LOCAL);
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
91 PyModule_AddIntMacro(m, GLOBAL_EXPLICIT);
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
92 PyModule_AddIntMacro(m, GLOBAL_IMPLICIT);
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
93 PyModule_AddIntMacro(m, FREE);
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
94 PyModule_AddIntMacro(m, CELL);
48725
40c07a61e1c2 Merged revisions 65715,65724,65726,65732,65736-65739,65775 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47580
diff changeset
95
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
96 PyModule_AddIntConstant(m, "SCOPE_OFF", SCOPE_OFFSET);
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 80072
diff changeset
97 PyModule_AddIntMacro(m, SCOPE_MASK);
48725
40c07a61e1c2 Merged revisions 65715,65724,65726,65732,65736-65739,65775 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47580
diff changeset
98
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
99 if (PyErr_Occurred()) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
100 Py_DECREF(m);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
101 m = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
102 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48725
diff changeset
103 return m;
16422
8b318b8d78c9 Add minimal interface to symtable: _symtable module.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
104 }