Prefix ARRAY_SIZE with micropython prefix MP_
diff --git a/py/builtin.c b/py/builtin.c
index 834108f..b25ca42 100644
--- a/py/builtin.c
+++ b/py/builtin.c
@@ -154,7 +154,7 @@
 
 STATIC mp_obj_t mp_builtin_bin(mp_obj_t o_in) {
     mp_obj_t args[] = { MP_OBJ_NEW_QSTR(MP_QSTR__brace_open__colon__hash_b_brace_close_), o_in };
-    return mp_obj_str_format(ARRAY_SIZE(args), args);
+    return mp_obj_str_format(MP_ARRAY_SIZE(args), args);
 }
 
 MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_bin_obj, mp_builtin_bin);
diff --git a/py/builtintables.c b/py/builtintables.c
index 857a581..af9a9bc 100644
--- a/py/builtintables.c
+++ b/py/builtintables.c
@@ -150,8 +150,8 @@
     .map = {
         .all_keys_are_qstrs = 1,
         .table_is_fixed_array = 1,
-        .used = ARRAY_SIZE(mp_builtin_object_table),
-        .alloc = ARRAY_SIZE(mp_builtin_object_table),
+        .used = MP_ARRAY_SIZE(mp_builtin_object_table),
+        .alloc = MP_ARRAY_SIZE(mp_builtin_object_table),
         .table = (mp_map_elem_t*)mp_builtin_object_table,
     },
 };
@@ -195,8 +195,8 @@
     .map = {
         .all_keys_are_qstrs = 1,
         .table_is_fixed_array = 1,
-        .used = ARRAY_SIZE(mp_builtin_module_table),
-        .alloc = ARRAY_SIZE(mp_builtin_module_table),
+        .used = MP_ARRAY_SIZE(mp_builtin_module_table),
+        .alloc = MP_ARRAY_SIZE(mp_builtin_module_table),
         .table = (mp_map_elem_t*)mp_builtin_module_table,
     },
 };
diff --git a/py/compile.c b/py/compile.c
index 946c892..b9979af 100644
--- a/py/compile.c
+++ b/py/compile.c
@@ -111,8 +111,8 @@
 STATIC const mp_map_t mp_constants_map = {
     .all_keys_are_qstrs = 1,
     .table_is_fixed_array = 1,
-    .used = ARRAY_SIZE(mp_constants_table),
-    .alloc = ARRAY_SIZE(mp_constants_table),
+    .used = MP_ARRAY_SIZE(mp_constants_table),
+    .alloc = MP_ARRAY_SIZE(mp_constants_table),
     .table = (mp_map_elem_t*)mp_constants_table,
 };
 
diff --git a/py/emitinlinethumb.c b/py/emitinlinethumb.c
index 79ed1c4..8acee6c 100644
--- a/py/emitinlinethumb.c
+++ b/py/emitinlinethumb.c
@@ -167,7 +167,7 @@
     if (MP_PARSE_NODE_IS_ID(pn)) {
         qstr reg_qstr = MP_PARSE_NODE_LEAF_ARG(pn);
         const char *reg_str = qstr_str(reg_qstr);
-        for (uint i = 0; i < ARRAY_SIZE(reg_name_table); i++) {
+        for (uint i = 0; i < MP_ARRAY_SIZE(reg_name_table); i++) {
             const reg_name_t *r = &reg_name_table[i];
             if (reg_str[0] == r->name[0] && reg_str[1] == r->name[1] && reg_str[2] == r->name[2] && (reg_str[2] == '\0' || reg_str[3] == '\0')) {
                 if (r->reg > max_reg) {
@@ -286,7 +286,7 @@
             asm_thumb_b_n(emit->as, label_num);
         } else if (op_str[0] == 'b' && op_len == 3) {
             uint cc = -1;
-            for (uint i = 0; i < ARRAY_SIZE(cc_name_table); i++) {
+            for (uint i = 0; i < MP_ARRAY_SIZE(cc_name_table); i++) {
                 if (op_str[1] == cc_name_table[i].name[0] && op_str[2] == cc_name_table[i].name[1]) {
                     cc = cc_name_table[i].cc;
                 }
diff --git a/py/lexer.c b/py/lexer.c
index a65df54..f69c395 100644
--- a/py/lexer.c
+++ b/py/lexer.c
@@ -694,10 +694,10 @@
         // need to check for this special token in many places in the compiler.
         // TODO improve speed of these string comparisons
         //for (int i = 0; tok_kw[i] != NULL; i++) {
-        for (int i = 0; i < ARRAY_SIZE(tok_kw); i++) {
+        for (int i = 0; i < MP_ARRAY_SIZE(tok_kw); i++) {
             if (str_strn_equal(tok_kw[i], tok->str, tok->len)) {
-                if (i == ARRAY_SIZE(tok_kw) - 1) {
-                    // tok_kw[ARRAY_SIZE(tok_kw) - 1] == "__debug__"
+                if (i == MP_ARRAY_SIZE(tok_kw) - 1) {
+                    // tok_kw[MP_ARRAY_SIZE(tok_kw) - 1] == "__debug__"
                     tok->kind = (mp_optimise_value == 0 ? MP_TOKEN_KW_TRUE : MP_TOKEN_KW_FALSE);
                 } else {
                     tok->kind = MP_TOKEN_KW_FALSE + i;
diff --git a/py/misc.h b/py/misc.h
index 044fef6..3f62e31 100644
--- a/py/misc.h
+++ b/py/misc.h
@@ -82,7 +82,7 @@
 /** array helpers ***********************************************/
 
 // get the number of elements in a fixed-size array
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
+#define MP_ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
 
 /** unichar / UTF-8 *********************************************/
 
diff --git a/py/modarray.c b/py/modarray.c
index a741a0e..2b9f531 100644
--- a/py/modarray.c
+++ b/py/modarray.c
@@ -40,8 +40,8 @@
     .map = {
         .all_keys_are_qstrs = 1,
         .table_is_fixed_array = 1,
-        .used = ARRAY_SIZE(mp_module_array_globals_table),
-        .alloc = ARRAY_SIZE(mp_module_array_globals_table),
+        .used = MP_ARRAY_SIZE(mp_module_array_globals_table),
+        .alloc = MP_ARRAY_SIZE(mp_module_array_globals_table),
         .table = (mp_map_elem_t*)mp_module_array_globals_table,
     },
 };
diff --git a/py/modcmath.c b/py/modcmath.c
index 3bc3055..14f204b 100644
--- a/py/modcmath.c
+++ b/py/modcmath.c
@@ -142,8 +142,8 @@
     .map = {
         .all_keys_are_qstrs = 1,
         .table_is_fixed_array = 1,
-        .used = ARRAY_SIZE(mp_module_cmath_globals_table),
-        .alloc = ARRAY_SIZE(mp_module_cmath_globals_table),
+        .used = MP_ARRAY_SIZE(mp_module_cmath_globals_table),
+        .alloc = MP_ARRAY_SIZE(mp_module_cmath_globals_table),
         .table = (mp_map_elem_t*)mp_module_cmath_globals_table,
     },
 };
diff --git a/py/modcollections.c b/py/modcollections.c
index 9e3da7e..2f73208 100644
--- a/py/modcollections.c
+++ b/py/modcollections.c
@@ -42,8 +42,8 @@
     .map = {
         .all_keys_are_qstrs = 1,
         .table_is_fixed_array = 1,
-        .used = ARRAY_SIZE(mp_module_collections_globals_table),
-        .alloc = ARRAY_SIZE(mp_module_collections_globals_table),
+        .used = MP_ARRAY_SIZE(mp_module_collections_globals_table),
+        .alloc = MP_ARRAY_SIZE(mp_module_collections_globals_table),
         .table = (mp_map_elem_t*)mp_module_collections_globals_table,
     },
 };
diff --git a/py/modgc.c b/py/modgc.c
index c53eed2..a82a7a0 100644
--- a/py/modgc.c
+++ b/py/modgc.c
@@ -73,8 +73,8 @@
     .map = {
         .all_keys_are_qstrs = 1,
         .table_is_fixed_array = 1,
-        .used = ARRAY_SIZE(mp_module_gc_globals_table),
-        .alloc = ARRAY_SIZE(mp_module_gc_globals_table),
+        .used = MP_ARRAY_SIZE(mp_module_gc_globals_table),
+        .alloc = MP_ARRAY_SIZE(mp_module_gc_globals_table),
         .table = (mp_map_elem_t*)mp_module_gc_globals_table,
     },
 };
diff --git a/py/modio.c b/py/modio.c
index 08c6c59..e2ebc99 100644
--- a/py/modio.c
+++ b/py/modio.c
@@ -57,8 +57,8 @@
     .map = {
         .all_keys_are_qstrs = 1,
         .table_is_fixed_array = 1,
-        .used = ARRAY_SIZE(mp_module_io_globals_table),
-        .alloc = ARRAY_SIZE(mp_module_io_globals_table),
+        .used = MP_ARRAY_SIZE(mp_module_io_globals_table),
+        .alloc = MP_ARRAY_SIZE(mp_module_io_globals_table),
         .table = (mp_map_elem_t*)mp_module_io_globals_table,
     },
 };
diff --git a/py/modmath.c b/py/modmath.c
index 0fd583c..ff6129c 100644
--- a/py/modmath.c
+++ b/py/modmath.c
@@ -172,8 +172,8 @@
     .map = {
         .all_keys_are_qstrs = 1,
         .table_is_fixed_array = 1,
-        .used = ARRAY_SIZE(mp_module_math_globals_table),
-        .alloc = ARRAY_SIZE(mp_module_math_globals_table),
+        .used = MP_ARRAY_SIZE(mp_module_math_globals_table),
+        .alloc = MP_ARRAY_SIZE(mp_module_math_globals_table),
         .table = (mp_map_elem_t*)mp_module_math_globals_table,
     },
 };
diff --git a/py/modmicropython.c b/py/modmicropython.c
index 40d749d..c1a293a 100644
--- a/py/modmicropython.c
+++ b/py/modmicropython.c
@@ -65,8 +65,8 @@
     .map = {
         .all_keys_are_qstrs = 1,
         .table_is_fixed_array = 1,
-        .used = ARRAY_SIZE(mp_module_micropython_globals_table),
-        .alloc = ARRAY_SIZE(mp_module_micropython_globals_table),
+        .used = MP_ARRAY_SIZE(mp_module_micropython_globals_table),
+        .alloc = MP_ARRAY_SIZE(mp_module_micropython_globals_table),
         .table = (mp_map_elem_t*)mp_module_micropython_globals_table,
     },
 };
diff --git a/py/modstruct.c b/py/modstruct.c
index a451818..ae6cb9e 100644
--- a/py/modstruct.c
+++ b/py/modstruct.c
@@ -210,8 +210,8 @@
     .map = {
         .all_keys_are_qstrs = 1,
         .table_is_fixed_array = 1,
-        .used = ARRAY_SIZE(mp_module_struct_globals_table),
-        .alloc = ARRAY_SIZE(mp_module_struct_globals_table),
+        .used = MP_ARRAY_SIZE(mp_module_struct_globals_table),
+        .alloc = MP_ARRAY_SIZE(mp_module_struct_globals_table),
         .table = (mp_map_elem_t*)mp_module_struct_globals_table,
     },
 };
diff --git a/py/modsys.c b/py/modsys.c
index a99db1b..519d470 100644
--- a/py/modsys.c
+++ b/py/modsys.c
@@ -87,8 +87,8 @@
     .map = {
         .all_keys_are_qstrs = 1,
         .table_is_fixed_array = 1,
-        .used = ARRAY_SIZE(mp_module_sys_globals_table),
-        .alloc = ARRAY_SIZE(mp_module_sys_globals_table),
+        .used = MP_ARRAY_SIZE(mp_module_sys_globals_table),
+        .alloc = MP_ARRAY_SIZE(mp_module_sys_globals_table),
         .table = (mp_map_elem_t*)mp_module_sys_globals_table,
     },
 };
diff --git a/py/objenumerate.c b/py/objenumerate.c
index 7d9ea99..2fdf30b 100644
--- a/py/objenumerate.c
+++ b/py/objenumerate.c
@@ -45,7 +45,7 @@
     { MP_QSTR_iterable, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
     { MP_QSTR_start, MP_ARG_INT, {.u_int = 0} },
 };
-#define ENUMERATE_MAKE_NEW_NUM_ARGS ARRAY_SIZE(enumerate_make_new_args)
+#define ENUMERATE_MAKE_NEW_NUM_ARGS MP_ARRAY_SIZE(enumerate_make_new_args)
 
 STATIC mp_obj_t enumerate_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_obj_t *args) {
 #if MICROPY_CPYTHON_COMPAT