Don't allow `micropython.const`
This came up in https://github.com/micropython/micropython-lib/pull/693
It does seem reasonable to expect that A = micropython.const(1) should do the right thing, but it only works if you write A = const(1). I would argue that the former should raise an error or otherwise indicate that it's not doing anything useful.
We need to support from micropython import const because this facilitates:
- Running MicroPython code on CPython (where you have a
micropython.pythat provides a dummyconstfunction). - On builds with
MICROPY_COMP_CONSTdisabled (e.g. when settrace is enabled) there will be no "magic" const, so it needs to be imported.
I think 791b65f4b261a23e427664f0b86ce32b60e33cb5 confirms the above.
Some ideas:
- We could change
parse.cto turnconst(...)into a no-op, rather than not handling it at all whenMICROPY_COMP_CONSTis disabled. (I never realised until today that we had this implicit requirement to usefrom micropython import constto be able to useconst()in all builds, I have written a lot of .py files that don't do this!). Thenmicropython.constshould no longer be the identity function (it should raise an error).
or
- Only if
MICROPY_COMP_CONSTis enabled, thenmicropython.constshould no longer be the identity function (it should raise an error to indicate incorrect usage).
or
- Make the parser also handle
micropython.const.
My preference would be #1. Instead of making micropython.const raise an error, it could also just be None (enough to make the import work), but then it might be a bit confusing to figure out why it's failing.
py/profile.c: Remove the requirement to disable the const optimisation when using sys.settrace.
The only reason that const had to be disabled was to make the test
output match CPython when const was involved. Instead, this commit
fixes the test to handle the lines where const is used.
Also:
- make the sys_settrace_features.py test work against newer CPython versions
- remove the special handling for MICROPY_PERSISTENT_CODE_SAVE in
unix/mpconfigport.h, and make this automatic. - move the check for MICROPY_PERSISTENT_CODE_SAVE to where it's used
(like we do for other similar checks) and add a comment explaining
it.
cc @andrewleech -- this is to support maybe making it possible to enable sys.settrace by default (see #12280).
This work was funded through GitHub Sponsors.