summaryrefslogtreecommitdiff
path: root/Python/import.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/import.c')
-rw-r--r--Python/import.c43
1 files changed, 12 insertions, 31 deletions
diff --git a/Python/import.c b/Python/import.c
index 4310afa1f8..ec21b4c85e 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -54,7 +54,7 @@ extern char *argv0;
/* Magic word to reject .pyc files generated by other Python versions */
-#define MAGIC 0x99BE3AL
+#define MAGIC 0x999901L /* Increment by one for each incompatible change */
static object *modules;
@@ -353,46 +353,27 @@ reload_module(m)
return get_module(m, getmodulename(m), (object **)NULL);
}
-static void
-cleardict(d)
- object *d;
-{
- int i;
- for (i = getdictsize(d); --i >= 0; ) {
- char *k;
- k = getdictkey(d, i);
- if (k != NULL)
- (void) dictremove(d, k);
- }
-}
-
void
doneimport()
{
if (modules != NULL) {
- int i;
+ int pos;
+ object *modname, *module;
/* Explicitly erase all modules; this is the safest way
to get rid of at least *some* circular dependencies */
- for (i = getdictsize(modules); --i >= 0; ) {
- object *k;
- k = getdict2key(modules, i);
- if (k != NULL) {
- object *m;
- m = dict2lookup(modules, k);
- if (m == NULL)
- err_clear();
- else if (is_moduleobject(m)) {
- object *d;
- d = getmoduledict(m);
- if (d != NULL && is_dictobject(d)) {
- cleardict(d);
- }
- }
+ pos = 0;
+ while (mappinggetnext(modules, &pos, &modname, &module)) {
+ if (is_moduleobject(module)) {
+ object *dict;
+ dict = getmoduledict(module);
+ if (dict != NULL && is_dictobject(dict))
+ mappingclear(dict);
}
}
- cleardict(modules);
+ mappingclear(modules);
}
DECREF(modules);
+ modules = NULL;
}