summaryrefslogtreecommitdiffstats
path: root/Python/bltinmodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/bltinmodule.c')
-rw-r--r--Python/bltinmodule.c121
1 files changed, 71 insertions, 50 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 245d31e..439498d 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -1668,21 +1668,6 @@ static PyMethodDef builtin_methods[] = {
{NULL, NULL},
};
-static PyObject *builtin_mod;
-static PyObject *builtin_dict;
-
-PyObject *
-PyBuiltin_GetModule()
-{
- return builtin_mod;
-}
-
-PyObject *
-PyBuiltin_GetDict()
-{
- return builtin_dict;
-}
-
/* Predefined exceptions */
PyObject *PyExc_AccessError;
@@ -1707,54 +1692,90 @@ PyObject *PyExc_ValueError;
PyObject *PyExc_ZeroDivisionError;
static PyObject *
-newstdexception(name)
+newstdexception(dict, name)
+ PyObject *dict;
char *name;
{
PyObject *v = PyString_FromString(name);
- if (v == NULL || PyDict_SetItemString(builtin_dict, name, v) != 0)
+ if (v == NULL || PyDict_SetItemString(dict, name, v) != 0)
Py_FatalError("no mem for new standard exception");
return v;
}
static void
-initerrors()
+initerrors(dict)
+ PyObject *dict;
{
- PyExc_AccessError = newstdexception("AccessError");
- PyExc_AssertionError = newstdexception("AssertionError");
- PyExc_AttributeError = newstdexception("AttributeError");
- PyExc_EOFError = newstdexception("EOFError");
- PyExc_FloatingPointError = newstdexception("FloatingPointError");
- PyExc_IOError = newstdexception("IOError");
- PyExc_ImportError = newstdexception("ImportError");
- PyExc_IndexError = newstdexception("IndexError");
- PyExc_KeyError = newstdexception("KeyError");
- PyExc_KeyboardInterrupt = newstdexception("KeyboardInterrupt");
- PyExc_MemoryError = newstdexception("MemoryError");
- PyExc_NameError = newstdexception("NameError");
- PyExc_OverflowError = newstdexception("OverflowError");
- PyExc_RuntimeError = newstdexception("RuntimeError");
- PyExc_SyntaxError = newstdexception("SyntaxError");
- PyExc_SystemError = newstdexception("SystemError");
- PyExc_SystemExit = newstdexception("SystemExit");
- PyExc_TypeError = newstdexception("TypeError");
- PyExc_ValueError = newstdexception("ValueError");
- PyExc_ZeroDivisionError = newstdexception("ZeroDivisionError");
+ PyExc_AccessError = newstdexception(dict, "AccessError");
+ PyExc_AssertionError = newstdexception(dict, "AssertionError");
+ PyExc_AttributeError = newstdexception(dict, "AttributeError");
+ PyExc_EOFError = newstdexception(dict, "EOFError");
+ PyExc_FloatingPointError = newstdexception(dict, "FloatingPointError");
+ PyExc_IOError = newstdexception(dict, "IOError");
+ PyExc_ImportError = newstdexception(dict, "ImportError");
+ PyExc_IndexError = newstdexception(dict, "IndexError");
+ PyExc_KeyError = newstdexception(dict, "KeyError");
+ PyExc_KeyboardInterrupt = newstdexception(dict, "KeyboardInterrupt");
+ PyExc_MemoryError = newstdexception(dict, "MemoryError");
+ PyExc_NameError = newstdexception(dict, "NameError");
+ PyExc_OverflowError = newstdexception(dict, "OverflowError");
+ PyExc_RuntimeError = newstdexception(dict, "RuntimeError");
+ PyExc_SyntaxError = newstdexception(dict, "SyntaxError");
+ PyExc_SystemError = newstdexception(dict, "SystemError");
+ PyExc_SystemExit = newstdexception(dict, "SystemExit");
+ PyExc_TypeError = newstdexception(dict, "TypeError");
+ PyExc_ValueError = newstdexception(dict, "ValueError");
+ PyExc_ZeroDivisionError = newstdexception(dict, "ZeroDivisionError");
+}
+
+static void
+finierrors()
+{
+ Py_XDECREF(PyExc_AccessError); PyExc_AccessError = NULL;
+ Py_XDECREF(PyExc_AssertionError); PyExc_AssertionError = NULL;
+ Py_XDECREF(PyExc_AttributeError); PyExc_AttributeError = NULL;
+ Py_XDECREF(PyExc_EOFError); PyExc_EOFError = NULL;
+ Py_XDECREF(PyExc_FloatingPointError); PyExc_FloatingPointError = NULL;
+ Py_XDECREF(PyExc_IOError); PyExc_IOError = NULL;
+ Py_XDECREF(PyExc_ImportError); PyExc_ImportError = NULL;
+ Py_XDECREF(PyExc_IndexError); PyExc_IndexError = NULL;
+ Py_XDECREF(PyExc_KeyError); PyExc_KeyError = NULL;
+ Py_XDECREF(PyExc_KeyboardInterrupt); PyExc_KeyboardInterrupt = NULL;
+ Py_XDECREF(PyExc_MemoryError); PyExc_MemoryError = NULL;
+ Py_XDECREF(PyExc_NameError); PyExc_NameError = NULL;
+ Py_XDECREF(PyExc_OverflowError); PyExc_OverflowError = NULL;
+ Py_XDECREF(PyExc_RuntimeError); PyExc_RuntimeError = NULL;
+ Py_XDECREF(PyExc_SyntaxError); PyExc_SyntaxError = NULL;
+ Py_XDECREF(PyExc_SystemError); PyExc_SystemError = NULL;
+ Py_XDECREF(PyExc_SystemExit); PyExc_SystemExit = NULL;
+ Py_XDECREF(PyExc_TypeError); PyExc_TypeError = NULL;
+ Py_XDECREF(PyExc_ValueError); PyExc_ValueError = NULL;
+ Py_XDECREF(PyExc_ZeroDivisionError); PyExc_ZeroDivisionError = NULL;
+}
+
+PyObject *
+_PyBuiltin_Init()
+{
+ PyObject *mod, *dict;
+ mod = Py_InitModule("__builtin__", builtin_methods);
+ if (mod == NULL)
+ return NULL;
+ dict = PyModule_GetDict(mod);
+ initerrors(dict);
+ if (PyDict_SetItemString(dict, "None", Py_None) < 0)
+ return NULL;
+ if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
+ return NULL;
+ if (PyDict_SetItemString(dict, "__debug__",
+ PyInt_FromLong(Py_OptimizeFlag == 0)) < 0)
+ return NULL;
+ return mod;
}
void
-PyBuiltin_Init()
+_PyBuiltin_Fini()
{
- builtin_mod = Py_InitModule("__builtin__", builtin_methods);
- builtin_dict = PyModule_GetDict(builtin_mod);
- Py_INCREF(builtin_dict);
- initerrors();
- (void) PyDict_SetItemString(builtin_dict, "None", Py_None);
- (void) PyDict_SetItemString(builtin_dict, "Ellipsis", Py_Ellipsis);
- (void) PyDict_SetItemString(builtin_dict, "__debug__",
- PyInt_FromLong(Py_OptimizeFlag == 0));
- if (PyErr_Occurred())
- Py_FatalError(
- "error creating None/Ellipsis/__debug__ in __builtin__");
+ finierrors();
}