summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2018-10-06 23:34:58 +0300
committerDamien George <damien.p.george@gmail.com>2018-12-10 14:40:43 +1100
commit38151f35c19751207a96e9a6c6a12d84e2e3fb88 (patch)
treefd3d07fa10a3321c8b9889b6c38856dd056d21ae
parent074597f17279b273f2135e9596aaf3a2e1926f4c (diff)
extmod/moductypes: Add aliases for native C types.
SHORT, INT, LONG, LONGLONG, and unsigned (U*) variants are being defined. This is done at compile using GCC-style predefined macros like __SIZEOF_INT__. If the compiler doesn't have such defines, no such types will be defined.
-rw-r--r--extmod/moductypes.c24
-rw-r--r--py/mpconfig.h6
2 files changed, 30 insertions, 0 deletions
diff --git a/extmod/moductypes.c b/extmod/moductypes.c
index 9c7c23bea..68cd5fca9 100644
--- a/extmod/moductypes.c
+++ b/extmod/moductypes.c
@@ -740,6 +740,30 @@ STATIC const mp_rom_map_elem_t mp_module_uctypes_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_FLOAT64), MP_ROM_INT(TYPE2SMALLINT(FLOAT64, 4)) },
#endif
+ #if MICROPY_PY_UCTYPES_NATIVE_C_TYPES
+ // C native type aliases. These depend on GCC-compatible predefined
+ // preprocessor macros.
+ #if __SIZEOF_SHORT__ == 2
+ { MP_ROM_QSTR(MP_QSTR_SHORT), MP_ROM_INT(TYPE2SMALLINT(INT16, 4)) },
+ { MP_ROM_QSTR(MP_QSTR_USHORT), MP_ROM_INT(TYPE2SMALLINT(UINT16, 4)) },
+ #endif
+ #if __SIZEOF_INT__ == 4
+ { MP_ROM_QSTR(MP_QSTR_INT), MP_ROM_INT(TYPE2SMALLINT(INT32, 4)) },
+ { MP_ROM_QSTR(MP_QSTR_UINT), MP_ROM_INT(TYPE2SMALLINT(UINT32, 4)) },
+ #endif
+ #if __SIZEOF_LONG__ == 4
+ { MP_ROM_QSTR(MP_QSTR_LONG), MP_ROM_INT(TYPE2SMALLINT(INT32, 4)) },
+ { MP_ROM_QSTR(MP_QSTR_ULONG), MP_ROM_INT(TYPE2SMALLINT(UINT32, 4)) },
+ #elif __SIZEOF_LONG__ == 8
+ { MP_ROM_QSTR(MP_QSTR_LONG), MP_ROM_INT(TYPE2SMALLINT(INT64, 4)) },
+ { MP_ROM_QSTR(MP_QSTR_ULONG), MP_ROM_INT(TYPE2SMALLINT(UINT64, 4)) },
+ #endif
+ #if __SIZEOF_LONG_LONG__ == 8
+ { MP_ROM_QSTR(MP_QSTR_LONGLONG), MP_ROM_INT(TYPE2SMALLINT(INT64, 4)) },
+ { MP_ROM_QSTR(MP_QSTR_ULONGLONG), MP_ROM_INT(TYPE2SMALLINT(UINT64, 4)) },
+ #endif
+ #endif // MICROPY_PY_UCTYPES_NATIVE_C_TYPES
+
{ MP_ROM_QSTR(MP_QSTR_PTR), MP_ROM_INT(TYPE2SMALLINT(PTR, AGG_TYPE_BITS)) },
{ MP_ROM_QSTR(MP_QSTR_ARRAY), MP_ROM_INT(TYPE2SMALLINT(ARRAY, AGG_TYPE_BITS)) },
};
diff --git a/py/mpconfig.h b/py/mpconfig.h
index e028ab989..f613f664a 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -1170,6 +1170,12 @@ typedef double mp_float_t;
#define MICROPY_PY_UCTYPES (0)
#endif
+// Whether to provide SHORT, INT, LONG, etc. types in addition to
+// exact-bitness types like INT16, INT32, etc.
+#ifndef MICROPY_PY_UCTYPES_NATIVE_C_TYPES
+#define MICROPY_PY_UCTYPES_NATIVE_C_TYPES (1)
+#endif
+
#ifndef MICROPY_PY_UZLIB
#define MICROPY_PY_UZLIB (0)
#endif