From 85c02166cacb8c2a8bc82f9802814ca72cbf6017 Mon Sep 17 00:00:00 2001 From: stijn Date: Mon, 4 Dec 2023 15:54:59 +0100 Subject: [PATCH] py/modsys: Implement optional sys.intern. Signed-off-by: stijn --- py/modsys.c | 8 ++++++++ py/mpconfig.h | 5 +++++ tests/basics/sys1.py | 15 +++++++++++++++ tests/unix/extra_coverage.py.exp | 8 ++++---- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/py/modsys.c b/py/modsys.c index 12fa1101b..2af81046f 100644 --- a/py/modsys.c +++ b/py/modsys.c @@ -147,6 +147,10 @@ STATIC const MP_DEFINE_STR_OBJ(mp_sys_platform_obj, MICROPY_PY_SYS_PLATFORM); MP_DEFINE_STR_OBJ(mp_sys_executable_obj, ""); #endif +#if MICROPY_PY_SYS_INTERN +MP_DEFINE_CONST_FUN_OBJ_1(mp_sys_intern_obj, mp_obj_str_intern_checked); +#endif + // exit([retval]): raise SystemExit, with optional argument given to the exception STATIC mp_obj_t mp_sys_exit(size_t n_args, const mp_obj_t *args) { if (n_args == 0) { @@ -293,6 +297,10 @@ STATIC const mp_rom_map_elem_t mp_module_sys_globals_table[] = { #endif #endif + #if MICROPY_PY_SYS_INTERN + { MP_ROM_QSTR(MP_QSTR_intern), MP_ROM_PTR(&mp_sys_intern_obj) }, + #endif + #if MICROPY_PY_SYS_EXIT { MP_ROM_QSTR(MP_QSTR_exit), MP_ROM_PTR(&mp_sys_exit_obj) }, #endif diff --git a/py/mpconfig.h b/py/mpconfig.h index d14b1aa04..c025bca26 100644 --- a/py/mpconfig.h +++ b/py/mpconfig.h @@ -1434,6 +1434,11 @@ typedef double mp_float_t; #define MICROPY_PY_SYS_EXECUTABLE (0) #endif +// Whether to provide "sys.intern" +#ifndef MICROPY_PY_SYS_INTERN +#define MICROPY_PY_SYS_INTERN (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING) +#endif + // Whether to provide "sys.exit" function #ifndef MICROPY_PY_SYS_EXIT #define MICROPY_PY_SYS_EXIT (1) diff --git a/tests/basics/sys1.py b/tests/basics/sys1.py index 759b9a6ea..95d8905d1 100644 --- a/tests/basics/sys1.py +++ b/tests/basics/sys1.py @@ -23,3 +23,18 @@ if hasattr(sys.implementation, '_mpy'): else: # Effectively skip subtests print(int) + +try: + print(sys.intern('micropython') == 'micropython') + has_intern = True +except AttributeError: + has_intern = False + print(True) + +if has_intern: + try: + print(sys.intern(0)) + except TypeError: + print(True) +else: + print(True) diff --git a/tests/unix/extra_coverage.py.exp b/tests/unix/extra_coverage.py.exp index ec3950074..b7e4c0d76 100644 --- a/tests/unix/extra_coverage.py.exp +++ b/tests/unix/extra_coverage.py.exp @@ -66,10 +66,10 @@ micropython machine math argv atexit byteorder exc_info executable exit getsizeof implementation -maxsize modules path platform -print_exception ps1 ps2 -stderr stdin stdout tracebacklimit -version version_info +intern maxsize modules path +platform print_exception ps1 +ps2 stderr stdin stdout +tracebacklimit version version_info ementation # attrtuple (start=1, stop=2, step=3)