diff options
Diffstat (limited to 'Python/import.c')
-rw-r--r-- | Python/import.c | 43 |
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; } |