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().
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 @@
 	{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 @@
 	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 *