Never long live the main dictionary.

It's contents change often and may be referenced elsewhere.

Fixes #1443
This commit is contained in:
Scott Shawcroft 2019-02-01 16:05:37 -08:00
parent a39fc94dde
commit 5555a24479
No known key found for this signature in database
GPG Key ID: FD0EDC4B6C53CA59

View File

@ -27,6 +27,7 @@
#include "py/emitglue.h"
#include "py/gc_long_lived.h"
#include "py/gc.h"
#include "py/mpstate.h"
mp_obj_fun_bc_t *make_fun_bc_long_lived(mp_obj_fun_bc_t *fun_bc, uint8_t max_depth) {
#ifndef MICROPY_ENABLE_GC
@ -88,7 +89,7 @@ mp_obj_dict_t *make_dict_long_lived(mp_obj_dict_t *dict, uint8_t max_depth) {
#ifndef MICROPY_ENABLE_GC
return dict;
#endif
if (dict == NULL || max_depth == 0) {
if (dict == NULL || max_depth == 0 || dict == &MP_STATE_VM(dict_main)) {
return dict;
}
// Don't recurse unnecessarily. Return immediately if we've already seen this dict.