summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-08-18 20:18:49 (GMT)
committerTim Peters <tim.peters@gmail.com>2001-08-18 20:18:49 (GMT)
commitaa32070f4d7b7151974e70b407b0f0dc2a836313 (patch)
tree20ea4d8e13d5dfa5f861f37be3963cd2a1874dd2 /Modules
parent95618b5bc98ca9f30ed9dd2e4382fd737bbbbc6c (diff)
downloadcpython-aa32070f4d7b7151974e70b407b0f0dc2a836313.zip
cpython-aa32070f4d7b7151974e70b407b0f0dc2a836313.tar.gz
cpython-aa32070f4d7b7151974e70b407b0f0dc2a836313.tar.bz2
Expose the CO_xxx flags via the "new" module (re-solving a problem "the
right way"). Fiddle __future__.py to use them. Jeremy's pyassem.py may also want to use them (by-hand duplication of magic numbers is brittle), but leaving that to his judgment. Beef up __future__'s test to verify the exported feature names appear correct.
Diffstat (limited to 'Modules')
-rw-r--r--Modules/newmodule.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/Modules/newmodule.c b/Modules/newmodule.c
index 7b91fb8..d1869e5 100644
--- a/Modules/newmodule.c
+++ b/Modules/newmodule.c
@@ -220,9 +220,38 @@ char new_doc[] =
\n\
You need to know a great deal about the interpreter to use this!";
+static void
+insertint(PyObject *d, char *name, int value)
+{
+ PyObject *v = PyInt_FromLong((long) value);
+ if (v == NULL) {
+ /* Don't bother reporting this error */
+ PyErr_Clear();
+ }
+ else {
+ PyDict_SetItemString(d, name, v);
+ Py_DECREF(v);
+ }
+}
+
DL_EXPORT(void)
initnew(void)
{
- Py_InitModule4("new", new_methods, new_doc, (PyObject *)NULL,
- PYTHON_API_VERSION);
+ PyObject *m;
+ PyObject *d;
+
+ m = Py_InitModule4("new", new_methods, new_doc, (PyObject *)NULL,
+ PYTHON_API_VERSION);
+ d = PyModule_GetDict(m);
+
+#define ADDSYM(TOKEN) insertint(d, #TOKEN, TOKEN)
+ ADDSYM(CO_OPTIMIZED);
+ ADDSYM(CO_NEWLOCALS);
+ ADDSYM(CO_VARARGS);
+ ADDSYM(CO_VARKEYWORDS);
+ ADDSYM(CO_NESTED);
+ ADDSYM(CO_GENERATOR);
+ ADDSYM(CO_GENERATOR_ALLOWED);
+ ADDSYM(CO_FUTURE_DIVISION);
+#undef ADDSYM
}