bpo-36900: import.c uses PyInterpreterState.core_config (GH-13278)

Move _PyImportZip_Init() to the internal C API and add an 'interp'
parameter.
diff --git a/Include/import.h b/Include/import.h
index c664803..13c6149 100644
--- a/Include/import.h
+++ b/Include/import.h
@@ -8,8 +8,6 @@
 #endif
 
 #ifndef Py_LIMITED_API
-PyAPI_FUNC(_PyInitError) _PyImportZip_Init(void);
-
 PyMODINIT_FUNC PyInit__imp(void);
 #endif /* !Py_LIMITED_API */
 PyAPI_FUNC(long) PyImport_GetMagicNumber(void);
diff --git a/Include/internal/pycore_pylifecycle.h b/Include/internal/pycore_pylifecycle.h
index 7144bbc..0d83acd 100644
--- a/Include/internal/pycore_pylifecycle.h
+++ b/Include/internal/pycore_pylifecycle.h
@@ -54,6 +54,8 @@
 extern _PyInitError _Py_HashRandomization_Init(const _PyCoreConfig *);
 
 extern _PyInitError _PyTypes_Init(void);
+extern _PyInitError _PyImportZip_Init(PyInterpreterState *interp);
+
 
 /* Various internal finalizers */
 
diff --git a/Python/import.c b/Python/import.c
index 9290f39..c634edb 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -91,7 +91,7 @@
 }
 
 _PyInitError
-_PyImportZip_Init(void)
+_PyImportZip_Init(PyInterpreterState *interp)
 {
     PyObject *path_hooks, *zipimport;
     int err = 0;
@@ -102,14 +102,17 @@
         goto error;
     }
 
-    if (Py_VerboseFlag)
+    int verbose = interp->core_config.verbose;
+    if (verbose) {
         PySys_WriteStderr("# installing zipimport hook\n");
+    }
 
     zipimport = PyImport_ImportModule("zipimport");
     if (zipimport == NULL) {
         PyErr_Clear(); /* No zip import module -- okay */
-        if (Py_VerboseFlag)
+        if (verbose) {
             PySys_WriteStderr("# can't import zipimport\n");
+        }
     }
     else {
         _Py_IDENTIFIER(zipimporter);
@@ -118,9 +121,9 @@
         Py_DECREF(zipimport);
         if (zipimporter == NULL) {
             PyErr_Clear(); /* No zipimporter object -- okay */
-            if (Py_VerboseFlag)
-                PySys_WriteStderr(
-                    "# can't import zipimport.zipimporter\n");
+            if (verbose) {
+                PySys_WriteStderr("# can't import zipimport.zipimporter\n");
+            }
         }
         else {
             /* sys.path_hooks.insert(0, zipimporter) */
@@ -129,9 +132,9 @@
             if (err < 0) {
                 goto error;
             }
-            if (Py_VerboseFlag)
-                PySys_WriteStderr(
-                    "# installed zipimport hook\n");
+            if (verbose) {
+                PySys_WriteStderr("# installed zipimport hook\n");
+            }
         }
     }
 
@@ -415,22 +418,26 @@
 
     /* XXX Perhaps these precautions are obsolete. Who knows? */
 
-    if (Py_VerboseFlag)
+    int verbose = interp->core_config.verbose;
+    if (verbose) {
         PySys_WriteStderr("# clear builtins._\n");
+    }
     if (PyDict_SetItemString(interp->builtins, "_", Py_None) < 0) {
         PyErr_WriteUnraisable(NULL);
     }
 
     for (p = sys_deletes; *p != NULL; p++) {
-        if (Py_VerboseFlag)
+        if (verbose) {
             PySys_WriteStderr("# clear sys.%s\n", *p);
+        }
         if (PyDict_SetItemString(interp->sysdict, *p, Py_None) < 0) {
             PyErr_WriteUnraisable(NULL);
         }
     }
     for (p = sys_files; *p != NULL; p+=2) {
-        if (Py_VerboseFlag)
+        if (verbose) {
             PySys_WriteStderr("# restore sys.%s\n", *p);
+        }
         value = _PyDict_GetItemStringWithError(interp->sysdict, *(p+1));
         if (value == NULL) {
             if (PyErr_Occurred()) {
@@ -469,8 +476,9 @@
     }
 #define CLEAR_MODULE(name, mod) \
     if (PyModule_Check(mod)) { \
-        if (Py_VerboseFlag && PyUnicode_Check(name)) \
+        if (verbose && PyUnicode_Check(name)) { \
             PySys_FormatStderr("# cleanup[2] removing %U\n", name); \
+        } \
         STORE_MODULE_WEAKREF(name, mod); \
         if (PyObject_SetItem(modules, name, Py_None) < 0) { \
             PyErr_WriteUnraisable(NULL); \
@@ -563,8 +571,9 @@
             if (dict == interp->builtins || dict == interp->sysdict)
                 continue;
             Py_INCREF(mod);
-            if (Py_VerboseFlag && PyUnicode_Check(name))
+            if (verbose && PyUnicode_Check(name)) {
                 PySys_FormatStderr("# cleanup[3] wiping %U\n", name);
+            }
             _PyModule_Clear(mod);
             Py_DECREF(mod);
         }
@@ -572,11 +581,13 @@
     }
 
     /* Next, delete sys and builtins (in that order) */
-    if (Py_VerboseFlag)
+    if (verbose) {
         PySys_FormatStderr("# cleanup[3] wiping sys\n");
+    }
     _PyModule_ClearDict(interp->sysdict);
-    if (Py_VerboseFlag)
+    if (verbose) {
         PySys_FormatStderr("# cleanup[3] wiping builtins\n");
+    }
     _PyModule_ClearDict(interp->builtins);
 
     /* Clear and delete the modules directory.  Actual modules will
@@ -755,9 +766,11 @@
         PyMapping_DelItem(modules, name);
         return NULL;
     }
-    if (Py_VerboseFlag)
+    int verbose = _PyInterpreterState_Get()->core_config.verbose;
+    if (verbose) {
         PySys_FormatStderr("import %U # previously loaded (%R)\n",
-                          name, filename);
+                           name, filename);
+    }
     return mod;
 
 }
@@ -1427,7 +1440,7 @@
 /* Remove importlib frames from the traceback,
  * except in Verbose mode. */
 static void
-remove_importlib_frames(void)
+remove_importlib_frames(PyInterpreterState *interp)
 {
     const char *importlib_filename = "<frozen importlib._bootstrap>";
     const char *external_filename = "<frozen importlib._bootstrap_external>";
@@ -1442,8 +1455,10 @@
        which end with a call to "_call_with_frames_removed". */
 
     PyErr_Fetch(&exception, &value, &base_tb);
-    if (!exception || Py_VerboseFlag)
+    if (!exception || interp->core_config.verbose) {
         goto done;
+    }
+
     if (PyType_IsSubtype((PyTypeObject *) exception,
                          (PyTypeObject *) PyExc_ImportError))
         always_trim = 1;
@@ -1853,8 +1868,9 @@
     Py_XDECREF(abs_name);
     Py_XDECREF(mod);
     Py_XDECREF(package);
-    if (final_mod == NULL)
-        remove_importlib_frames();
+    if (final_mod == NULL) {
+        remove_importlib_frames(interp);
+    }
     return final_mod;
 }
 
@@ -2303,13 +2319,16 @@
     PyObject *m, *d;
 
     m = PyModule_Create(&impmodule);
-    if (m == NULL)
+    if (m == NULL) {
         goto failure;
+    }
     d = PyModule_GetDict(m);
-    if (d == NULL)
+    if (d == NULL) {
         goto failure;
-    _PyCoreConfig *config = &_PyInterpreterState_Get()->core_config;
-    PyObject *pyc_mode = PyUnicode_FromWideChar(config->check_hash_pycs_mode, -1);
+    }
+
+    const wchar_t *mode = _PyInterpreterState_Get()->core_config.check_hash_pycs_mode;
+    PyObject *pyc_mode = PyUnicode_FromWideChar(mode, -1);
     if (pyc_mode == NULL) {
         goto failure;
     }
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index de8595c..014b19a 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -205,7 +205,7 @@
         return _Py_INIT_ERR("external importer setup failed");
     }
     Py_DECREF(value);
-    return _PyImportZip_Init();
+    return _PyImportZip_Init(interp);
 }
 
 /* Helper functions to better handle the legacy C locale