summaryrefslogtreecommitdiffstats
path: root/Python/bltinmodule.c
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2000-05-25 23:15:05 (GMT)
committerBarry Warsaw <barry@python.org>2000-05-25 23:15:05 (GMT)
commit78e6c671dbb3b5cf98ddcd16f9364da8c8619076 (patch)
tree98e6fa011ddfedec3ad71c010ebde6901a523e84 /Python/bltinmodule.c
parentcfa2dba72079b6a032b4130e54f5d01e06fb6b35 (diff)
downloadcpython-78e6c671dbb3b5cf98ddcd16f9364da8c8619076.zip
cpython-78e6c671dbb3b5cf98ddcd16f9364da8c8619076.tar.gz
cpython-78e6c671dbb3b5cf98ddcd16f9364da8c8619076.tar.bz2
All the exception building related stuff has been moved out of this
module and into _exceptions.c. This includes all the PyExc_* globals, the bltin_exc table, init_class_exc(), fini_instances(), finierrors(). Renamed _PyBuiltin_Init_1() to _PyBuiltin_Init() since the two phase initializations are necessary any more. Removed as obsolete _PyBuiltin_Init_2(), _PyBuiltin_Fini_1() and _PyBuiltin_Fini_2().
Diffstat (limited to 'Python/bltinmodule.c')
-rw-r--r--Python/bltinmodule.c191
1 files changed, 1 insertions, 190 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index ed4c05b..f4a7802 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -2356,178 +2356,13 @@ static PyMethodDef builtin_methods[] = {
{NULL, NULL},
};
-/* Predefined exceptions */
-
-PyObject *PyExc_Exception;
-PyObject *PyExc_StandardError;
-PyObject *PyExc_ArithmeticError;
-PyObject *PyExc_LookupError;
-
-PyObject *PyExc_AssertionError;
-PyObject *PyExc_AttributeError;
-PyObject *PyExc_EOFError;
-PyObject *PyExc_FloatingPointError;
-PyObject *PyExc_EnvironmentError;
-PyObject *PyExc_IOError;
-PyObject *PyExc_OSError;
-PyObject *PyExc_ImportError;
-PyObject *PyExc_IndexError;
-PyObject *PyExc_KeyError;
-PyObject *PyExc_KeyboardInterrupt;
-PyObject *PyExc_MemoryError;
-PyObject *PyExc_NameError;
-PyObject *PyExc_OverflowError;
-PyObject *PyExc_RuntimeError;
-PyObject *PyExc_NotImplementedError;
-PyObject *PyExc_SyntaxError;
-PyObject *PyExc_SystemError;
-PyObject *PyExc_SystemExit;
-PyObject *PyExc_UnboundLocalError;
-PyObject *PyExc_UnicodeError;
-PyObject *PyExc_TypeError;
-PyObject *PyExc_ValueError;
-PyObject *PyExc_ZeroDivisionError;
-#ifdef MS_WINDOWS
-PyObject *PyExc_WindowsError;
-#endif
-
-PyObject *PyExc_MemoryErrorInst;
-
-static struct
-{
- char* name;
- PyObject** exc;
-}
-bltin_exc[] = {
- {"Exception", &PyExc_Exception},
- {"StandardError", &PyExc_StandardError},
- {"ArithmeticError", &PyExc_ArithmeticError},
- {"LookupError", &PyExc_LookupError},
- {"AssertionError", &PyExc_AssertionError},
- {"AttributeError", &PyExc_AttributeError},
- {"EOFError", &PyExc_EOFError},
- {"FloatingPointError", &PyExc_FloatingPointError},
- {"EnvironmentError", &PyExc_EnvironmentError},
- {"IOError", &PyExc_IOError},
- {"OSError", &PyExc_OSError},
- {"ImportError", &PyExc_ImportError},
- {"IndexError", &PyExc_IndexError},
- {"KeyError", &PyExc_KeyError},
- {"KeyboardInterrupt", &PyExc_KeyboardInterrupt},
- {"MemoryError", &PyExc_MemoryError},
- {"NameError", &PyExc_NameError},
- {"OverflowError", &PyExc_OverflowError},
- {"RuntimeError", &PyExc_RuntimeError},
- {"NotImplementedError",&PyExc_NotImplementedError},
- {"SyntaxError", &PyExc_SyntaxError},
- {"SystemError", &PyExc_SystemError},
- {"SystemExit", &PyExc_SystemExit},
- {"UnboundLocalError", &PyExc_UnboundLocalError},
- {"UnicodeError", &PyExc_UnicodeError},
- {"TypeError", &PyExc_TypeError},
- {"ValueError", &PyExc_ValueError},
-#ifdef MS_WINDOWS
- {"WindowsError", &PyExc_WindowsError},
-#endif
- {"ZeroDivisionError", &PyExc_ZeroDivisionError},
- {NULL, NULL}
-};
-
-
-/* Import exceptions module to extract class exceptions. On success,
- * return 1. On failure return 0 which signals _PyBuiltin_Init_2 to
- * issue a fatal error.
- */
-static int
-init_class_exc(dict)
- PyObject *dict;
-{
- int i;
- PyObject *m = PyImport_ImportModule("exceptions");
- PyObject *args = NULL;
- PyObject *d = NULL;
-
- /* make sure we got the module and its dictionary */
- if (m == NULL ||
- (d = PyModule_GetDict(m)) == NULL)
- {
- PySys_WriteStderr("'import exceptions' failed\n");
- goto finally;
- }
- for (i = 0; bltin_exc[i].name; i++) {
- /* dig the exception out of the module */
- PyObject *exc = PyDict_GetItemString(d, bltin_exc[i].name);
- if (!exc) {
- PySys_WriteStderr(
- "Built-in exception class not found: %s. Library mismatch?\n",
- bltin_exc[i].name);
- goto finally;
- }
- /* free the old-style exception string object */
- Py_XDECREF(*bltin_exc[i].exc);
-
- /* squirrel away a pointer to the exception */
- Py_INCREF(exc);
- *bltin_exc[i].exc = exc;
-
- /* and insert the name in the __builtin__ module */
- if (PyDict_SetItemString(dict, bltin_exc[i].name, exc)) {
- PySys_WriteStderr(
- "Cannot insert exception into __builtin__: %s\n",
- bltin_exc[i].name);
- goto finally;
- }
- }
-
- /* we need one pre-allocated instance */
- args = Py_BuildValue("()");
- if (!args ||
- !(PyExc_MemoryErrorInst =
- PyEval_CallObject(PyExc_MemoryError, args)))
- {
- PySys_WriteStderr("Cannot pre-allocate MemoryError instance\n");
- goto finally;
- }
- Py_DECREF(args);
-
- /* we're done with the exceptions module */
- Py_DECREF(m);
- return 1;
-
- finally:
- Py_XDECREF(m);
- Py_XDECREF(args);
- PyErr_Clear();
- return 0;
-}
-
-
-static void
-fini_instances()
-{
- Py_XDECREF(PyExc_MemoryErrorInst);
- PyExc_MemoryErrorInst = NULL;
-}
-
-
-static void
-finierrors()
-{
- int i;
- for (i = 0; bltin_exc[i].name; i++) {
- PyObject *exc = *bltin_exc[i].exc;
- Py_XDECREF(exc);
- *bltin_exc[i].exc = NULL;
- }
-}
-
static char builtin_doc[] =
"Built-in functions, exceptions, and other objects.\n\
\n\
Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
PyObject *
-_PyBuiltin_Init_1()
+_PyBuiltin_Init()
{
PyObject *mod, *dict;
mod = Py_InitModule4("__builtin__", builtin_methods,
@@ -2547,30 +2382,6 @@ _PyBuiltin_Init_1()
return mod;
}
-void
-_PyBuiltin_Init_2(dict)
- PyObject *dict;
-{
- if (!init_class_exc(dict))
- /* class based exceptions could not be initialized. */
- Py_FatalError("Standard exceptions could not be initialized.");
-}
-
-
-void
-_PyBuiltin_Fini_1()
-{
- fini_instances();
-}
-
-
-void
-_PyBuiltin_Fini_2()
-{
- finierrors();
-}
-
-
/* Helper for filter(): filter a tuple through a function */
static PyObject *