a64f2fdca0
Because mpy_ld.py doesn't know the target object representation, it emits instances of `MP_OBJ_NEW_QSTR(MP_QSTR_Foo)` as const string objects, rather than qstrs. However this doesn't work for map keys (e.g. for a locals dict) because the map has all_keys_are_qstrs flag is set (and also auto-complete requires the map keys to be qstrs). Instead, emit them as regular qstrs, and make a functioning MP_OBJ_NEW_QSTR function available (via `native_to_obj`, also used for e.g. making integers). Remove the code from mpy_ld.py to emit qstrs as constant strings, but leave behind the scaffold to emit constant objects in case we want to do use this in the future. Strictly this should be a .mpy sub-version bump, even though the function table isn't changing, it does lead to a change in behavior for a new .mpy running against old MicroPython. `mp_native_to_obj` will incorrectly return the qstr value directly as an `mp_obj_t`, leading to unexpected results. But given that it's broken at the moment, it seems unlikely that anyone is relying on this, so it's not work the other downsides of a sub-version bump (i.e. breaking pure-Python modules that use @native). The opposite case of running an old .mpy on new MicroPython is unchanged, and remains broken in exactly the same way. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared <jim.mussared@gmail.com> |
||
---|---|---|
.. | ||
autobuild | ||
mpremote | ||
.gitattributes | ||
.gitignore | ||
cc1 | ||
ci.sh | ||
codeformat.py | ||
codestats.sh | ||
dfu.py | ||
file2h.py | ||
gen-changelog.sh | ||
gen-cpydiff.py | ||
hci_trace_to_pcap.py | ||
insert-usb-ids.py | ||
makemanifest.py | ||
manifestfile.py | ||
metrics.py | ||
mpy_bin2res.py | ||
mpy_cross_all.py | ||
mpy_ld.py | ||
mpy-tool.py | ||
pyboard.py | ||
pydfu.py | ||
tinytest-codegen.py | ||
uf2conv.py | ||
uf2families.json | ||
uncrustify.cfg | ||
verifygitlog.py |