diff --git a/py/modbuiltins.c b/py/modbuiltins.c index 455e1cc1b6..9b5bd4c5ed 100644 --- a/py/modbuiltins.c +++ b/py/modbuiltins.c @@ -634,6 +634,9 @@ STATIC const mp_map_elem_t mp_module_builtins_globals_table[] = { // built-in objects { MP_OBJ_NEW_QSTR(MP_QSTR_Ellipsis), (mp_obj_t)&mp_const_ellipsis_obj }, + #if MICROPY_PY_BUILTINS_NOTIMPLEMENTED + { MP_OBJ_NEW_QSTR(MP_QSTR_NotImplemented), MP_OBJ_SENTINEL }, + #endif // built-in user functions { MP_OBJ_NEW_QSTR(MP_QSTR_abs), (mp_obj_t)&mp_builtin_abs_obj }, diff --git a/py/mpconfig.h b/py/mpconfig.h index a5aacc8b0e..560fdce9ce 100644 --- a/py/mpconfig.h +++ b/py/mpconfig.h @@ -479,6 +479,11 @@ typedef double mp_float_t; #define MICROPY_PY_BUILTINS_REVERSED (1) #endif +// Whether to define "NotImplemented" special constant +#ifndef MICROPY_PY_BUILTINS_NOTIMPLEMENTED +#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (0) +#endif + // Whether to set __file__ for imported modules #ifndef MICROPY_PY___FILE__ #define MICROPY_PY___FILE__ (1) diff --git a/py/obj.c b/py/obj.c index 81adbe3933..1928fad98f 100644 --- a/py/obj.c +++ b/py/obj.c @@ -62,6 +62,14 @@ void mp_obj_print_helper(const mp_print_t *print, mp_obj_t o_in, mp_print_kind_t return; } #endif + + #if MICROPY_PY_BUILTINS_NOTIMPLEMENTED + if (o_in == MP_OBJ_SENTINEL) { + mp_printf(print, "%q", MP_QSTR_NotImplemented); + return; + } + #endif + mp_obj_type_t *type = mp_obj_get_type(o_in); if (type->print != NULL) { type->print((mp_print_t*)print, o_in, kind); diff --git a/py/qstrdefs.h b/py/qstrdefs.h index 77277c095f..5d0dc9d274 100644 --- a/py/qstrdefs.h +++ b/py/qstrdefs.h @@ -115,6 +115,9 @@ Q(builtins) Q(Ellipsis) Q(StopIteration) +#if MICROPY_PY_BUILTINS_NOTIMPLEMENTED +Q(NotImplemented) +#endif Q(BaseException) Q(ArithmeticError) diff --git a/unix/mpconfigport.h b/unix/mpconfigport.h index 5e9b854bda..31f3afed16 100644 --- a/unix/mpconfigport.h +++ b/unix/mpconfigport.h @@ -64,6 +64,7 @@ #define MICROPY_PY_BUILTINS_MEMORYVIEW (1) #define MICROPY_PY_BUILTINS_FROZENSET (1) #define MICROPY_PY_BUILTINS_COMPILE (1) +#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (1) #define MICROPY_PY_MICROPYTHON_MEM_INFO (1) #define MICROPY_PY_ALL_SPECIAL_METHODS (1) #define MICROPY_PY_ARRAY_SLICE_ASSIGN (1)