3535
3636#if MICROPY_PY_SYS
3737
38+ #include "genhdr/py-version.h"
39+
3840/// \module sys - system specific functions
3941
4042// defined per port; type of these is irrelevant, just need pointer
@@ -53,6 +55,34 @@ STATIC const MP_DEFINE_STR_OBJ(version_obj, "3.4.0");
5355#define I (n ) MP_OBJ_NEW_SMALL_INT(n)
5456// TODO: CPython is now at 5-element array, but save 2 els so far...
5557STATIC const mp_obj_tuple_t mp_sys_version_info_obj = {{& mp_type_tuple }, 3 , {I (3 ), I (4 ), I (0 )}};
58+
59+ // sys.implementation object
60+ // this holds the MicroPython version
61+ STATIC const mp_obj_tuple_t mp_sys_implementation_version_info_obj = {
62+ {& mp_type_tuple },
63+ 3 ,
64+ { I (MICROPY_VERSION_MAJOR ), I (MICROPY_VERSION_MINOR ), I (MICROPY_VERSION_MICRO ) }
65+ };
66+ #if MICROPY_PY_ATTRTUPLE
67+ STATIC const qstr impl_fields [] = { MP_QSTR_name , MP_QSTR_version };
68+ STATIC MP_DEFINE_ATTRTUPLE (
69+ mp_sys_implementation_obj ,
70+ impl_fields ,
71+ 2 ,
72+ MP_OBJ_NEW_QSTR (MP_QSTR_micropython ),
73+ (mp_obj_t )& mp_sys_implementation_version_info_obj
74+ );
75+ #else
76+ STATIC const mp_obj_tuple_t mp_sys_implementation_obj = {
77+ {& mp_type_tuple },
78+ 2 ,
79+ {
80+ MP_OBJ_NEW_QSTR (MP_QSTR_micropython ),
81+ (mp_obj_t )& mp_sys_implementation_version_info_obj ,
82+ }
83+ };
84+ #endif
85+
5686#undef I
5787
5888#ifdef MICROPY_PY_SYS_PLATFORM
@@ -98,6 +128,7 @@ STATIC const mp_map_elem_t mp_module_sys_globals_table[] = {
98128 { MP_OBJ_NEW_QSTR (MP_QSTR_argv ), (mp_obj_t )& MP_STATE_VM (mp_sys_argv_obj ) },
99129 { MP_OBJ_NEW_QSTR (MP_QSTR_version ), (mp_obj_t )& version_obj },
100130 { MP_OBJ_NEW_QSTR (MP_QSTR_version_info ), (mp_obj_t )& mp_sys_version_info_obj },
131+ { MP_OBJ_NEW_QSTR (MP_QSTR_implementation ), (mp_obj_t )& mp_sys_implementation_obj },
101132#ifdef MICROPY_PY_SYS_PLATFORM
102133 { MP_OBJ_NEW_QSTR (MP_QSTR_platform ), (mp_obj_t )& platform_obj },
103134#endif
0 commit comments