]> granicus.if.org Git - python/commitdiff
Py_Initialize(): Now that standard exceptions are builtin, we don't
authorBarry Warsaw <barry@python.org>
Thu, 25 May 2000 23:09:49 +0000 (23:09 +0000)
committerBarry Warsaw <barry@python.org>
Thu, 25 May 2000 23:09:49 +0000 (23:09 +0000)
need two phase init or fini of the builtin module.  Change the call of
_PyBuiltin_Init_1() to _PyBuiltin_Init().  Add a call to
init_exceptions().

Py_Finalize(): Don't call _PyBuiltin_Fini_1().  Instead call
fini_exceptions() but move this to before the thread state is
cleared.

Python/pythonrun.c

index ee6ce07ba19245d1102dc36b3e6684a5e59a7558..77607146546de20654d99da639149e700c721468 100644 (file)
@@ -152,7 +152,7 @@ Py_Initialize()
 
        _PyCompareState_Key = PyString_InternFromString("cmp_state");
 
-       bimod = _PyBuiltin_Init_1();
+       bimod = _PyBuiltin_Init();
        if (bimod == NULL)
                Py_FatalError("Py_Initialize: can't initialize __builtin__");
        interp->builtins = PyModule_GetDict(bimod);
@@ -170,8 +170,10 @@ Py_Initialize()
 
        _PyImport_Init();
 
+       /* initialize builtin exceptions */
+       init_exceptions();
+
        /* phase 2 of builtins */
-       _PyBuiltin_Init_2(interp->builtins);
        _PyImport_FixupExtension("__builtin__", "__builtin__");
 
        initsigs(); /* Signal handling stuff, including initintr() */
@@ -218,9 +220,6 @@ Py_Finalize()
        /* Disable signal handling */
        PyOS_FiniInterrupts();
 
-       /* Destroy PyExc_MemoryErrorInst */
-       _PyBuiltin_Fini_1();
-
        /* Cleanup Unicode implementation */
        _PyUnicode_Fini();
 
@@ -252,17 +251,18 @@ Py_Finalize()
        }
 #endif /* Py_TRACE_REFS */
 
-       /* Delete current thread */
-       PyInterpreterState_Clear(interp);
-       PyThreadState_Swap(NULL);
-       PyInterpreterState_Delete(interp);
-
        /* Now we decref the exception classes.  After this point nothing
           can raise an exception.  That's okay, because each Fini() method
           below has been checked to make sure no exceptions are ever
           raised.
        */
-       _PyBuiltin_Fini_2();
+       fini_exceptions();
+
+       /* Delete current thread */
+       PyInterpreterState_Clear(interp);
+       PyThreadState_Swap(NULL);
+       PyInterpreterState_Delete(interp);
+
        PyMethod_Fini();
        PyFrame_Fini();
        PyCFunction_Fini();