]> granicus.if.org Git - python/commitdiff
All the exception building related stuff has been moved out of this
authorBarry Warsaw <barry@python.org>
Thu, 25 May 2000 23:15:05 +0000 (23:15 +0000)
committerBarry Warsaw <barry@python.org>
Thu, 25 May 2000 23:15:05 +0000 (23:15 +0000)
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().

Python/bltinmodule.c

index ed4c05b3a9b358329ad7badec9926ced112846e3..f4a780267148714bb5e96973341e18419b8e44b1 100644 (file)
@@ -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 *