Skip to content

Commit

Permalink
py/modsys: Implement sys.intern.
Browse files Browse the repository at this point in the history
Signed-off-by: stijn <[email protected]>
  • Loading branch information
stinos committed Dec 14, 2023
1 parent f3889db commit b02d6a2
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 4 deletions.
8 changes: 8 additions & 0 deletions py/modsys.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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
Expand Down
6 changes: 6 additions & 0 deletions py/mpconfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -1434,6 +1434,12 @@ typedef double mp_float_t;
#define MICROPY_PY_SYS_EXECUTABLE (0)
#endif

// Whether to provide "sys.intern", implemented simply as returning the argument passed
// since strings are already interned as qstr.
#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)
Expand Down
15 changes: 15 additions & 0 deletions tests/basics/sys1.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,18 @@
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)
8 changes: 4 additions & 4 deletions tests/unix/extra_coverage.py.exp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit b02d6a2

Please sign in to comment.