diff options
Diffstat (limited to 'py')
51 files changed, 113 insertions, 83 deletions
diff --git a/py/asmthumb.c b/py/asmthumb.c index 891947567b..03752ed938 100644 --- a/py/asmthumb.c +++ b/py/asmthumb.c @@ -28,8 +28,8 @@ #include <assert.h> #include <string.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "asmthumb.h" // wrapper around everything in this file diff --git a/py/asmx64.c b/py/asmx64.c index 6c22ea25de..4695bdc731 100644 --- a/py/asmx64.c +++ b/py/asmx64.c @@ -29,8 +29,8 @@ #include <assert.h> #include <string.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" // wrapper around everything in this file #if MICROPY_EMIT_X64 diff --git a/py/binary.c b/py/binary.c index 833d9c85ad..9eab01c4eb 100644 --- a/py/binary.c +++ b/py/binary.c @@ -29,8 +29,8 @@ #include <string.h> #include <assert.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "binary.h" diff --git a/py/builtin.c b/py/builtin.c index 834108f1b5..d4b77d37a8 100644 --- a/py/builtin.c +++ b/py/builtin.c @@ -113,11 +113,13 @@ mp_obj_t mp_builtin_abs(mp_obj_t o_in) { } else { return o_in; } +#if MICROPY_PY_BUILTINS_COMPLEX } else if (MP_OBJ_IS_TYPE(o_in, &mp_type_complex)) { mp_float_t real, imag; mp_obj_complex_get(o_in, &real, &imag); return mp_obj_new_float(MICROPY_FLOAT_C_FUN(sqrt)(real*real + imag*imag)); #endif +#endif } else { assert(0); return mp_const_none; @@ -154,7 +156,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_any_obj, mp_builtin_any); 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 857a581de4..8b4df93177 100644 --- a/py/builtintables.c +++ b/py/builtintables.c @@ -26,8 +26,8 @@ #include <stdlib.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "builtin.h" @@ -44,7 +44,7 @@ STATIC const mp_map_elem_t mp_builtin_object_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_bool), (mp_obj_t)&mp_type_bool }, { MP_OBJ_NEW_QSTR(MP_QSTR_bytes), (mp_obj_t)&mp_type_bytes }, { MP_OBJ_NEW_QSTR(MP_QSTR_bytearray), (mp_obj_t)&mp_type_bytearray }, -#if MICROPY_PY_BUILTINS_FLOAT +#if MICROPY_PY_BUILTINS_COMPLEX { MP_OBJ_NEW_QSTR(MP_QSTR_complex), (mp_obj_t)&mp_type_complex }, #endif { MP_OBJ_NEW_QSTR(MP_QSTR_dict), (mp_obj_t)&mp_type_dict }, @@ -150,8 +150,8 @@ const mp_obj_dict_t mp_builtin_object_dict_obj = { .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 @@ const mp_obj_dict_t mp_builtin_module_dict_obj = { .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 946c8924b2..d49edd6ef3 100644 --- a/py/compile.c +++ b/py/compile.c @@ -31,8 +31,8 @@ #include <assert.h> #include <math.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "lexer.h" #include "parse.h" @@ -111,8 +111,8 @@ STATIC const mp_map_elem_t mp_constants_table[] = { 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/emitbc.c b/py/emitbc.c index 841dd4aabb..3eb0d575b9 100644 --- a/py/emitbc.c +++ b/py/emitbc.c @@ -30,8 +30,8 @@ #include <string.h> #include <assert.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "lexer.h" #include "parse.h" diff --git a/py/emitcommon.c b/py/emitcommon.c index ea65183623..4649793134 100644 --- a/py/emitcommon.c +++ b/py/emitcommon.c @@ -28,8 +28,8 @@ #include <stdint.h> #include <assert.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "lexer.h" #include "parse.h" diff --git a/py/emitcpy.c b/py/emitcpy.c index a8a6265b8c..fbca3805b3 100644 --- a/py/emitcpy.c +++ b/py/emitcpy.c @@ -30,8 +30,8 @@ #include <string.h> #include <assert.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "lexer.h" #include "parse.h" diff --git a/py/emitglue.c b/py/emitglue.c index f9b9460837..17dc8f867c 100644 --- a/py/emitglue.c +++ b/py/emitglue.c @@ -30,8 +30,8 @@ #include <string.h> #include <assert.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "runtime0.h" diff --git a/py/emitinlinethumb.c b/py/emitinlinethumb.c index 79ed1c4a02..435e1b64d9 100644 --- a/py/emitinlinethumb.c +++ b/py/emitinlinethumb.c @@ -30,8 +30,8 @@ #include <stdarg.h> #include <assert.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "lexer.h" #include "parse.h" @@ -167,7 +167,7 @@ STATIC uint get_arg_reg(emit_inline_asm_t *emit, const char *op, mp_parse_node_t 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 = ®_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 @@ STATIC void emit_inline_thumb_op(emit_inline_asm_t *emit, qstr op, int n_args, m 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/emitnative.c b/py/emitnative.c index 9a36978d0f..f291efe481 100644 --- a/py/emitnative.c +++ b/py/emitnative.c @@ -48,8 +48,8 @@ #include <string.h> #include <assert.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "lexer.h" #include "parse.h" diff --git a/py/emitpass1.c b/py/emitpass1.c index 2e76420a21..bea1af4dbf 100644 --- a/py/emitpass1.c +++ b/py/emitpass1.c @@ -28,8 +28,8 @@ #include <stdint.h> #include <assert.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "lexer.h" #include "parse.h" @@ -33,7 +33,6 @@ #include "misc.h" #include "gc.h" -#include "misc.h" #include "qstr.h" #include "obj.h" #include "runtime.h" @@ -113,7 +112,7 @@ STATIC machine_uint_t gc_lock_depth; void gc_init(void *start, void *end) { // align end pointer on block boundary end = (void*)((machine_uint_t)end & (~(BYTES_PER_BLOCK - 1))); - DEBUG_printf("Initializing GC heap: %p..%p = " UINT_FMT " bytes\n", start, end, end - start); + DEBUG_printf("Initializing GC heap: %p..%p = " UINT_FMT " bytes\n", start, end, (byte*)end - (byte*)start); // calculate parameters for GC (T=total, A=alloc table, F=finaliser table, P=pool; all in bytes): // T = A + F + P @@ -268,6 +267,7 @@ STATIC void gc_sweep(void) { case AT_TAIL: if (free_tail) { + DEBUG_printf("gc_sweep(%p)\n",PTR_FROM_BLOCK(block)); ATB_ANY_TO_FREE(block); } break; @@ -401,6 +401,7 @@ found: // get pointer to first block void *ret_ptr = (void*)(gc_pool_start + start_block * WORDS_PER_BLOCK); + DEBUG_printf("gc_alloc(%p)\n", ret_ptr); // zero out the additional bytes of the newly allocated blocks // This is needed because the blocks may have previously held pointers @@ -439,6 +440,7 @@ void gc_free(void *ptr_in) { } machine_uint_t ptr = (machine_uint_t)ptr_in; + DEBUG_printf("gc_free(%p)\n", ptr); if (VERIFY_PTR(ptr)) { machine_uint_t block = BLOCK_FROM_PTR(ptr); @@ -590,7 +592,7 @@ void *gc_realloc(void *ptr_in, machine_uint_t n_bytes) { return NULL; } - DEBUG_printf("gc_realloc: allocating new block\n"); + DEBUG_printf("gc_realloc(%p -> %p)\n", ptr_in, ptr_out); memcpy(ptr_out, ptr_in, n_blocks * BYTES_PER_BLOCK); gc_free(ptr_in); return ptr_out; diff --git a/py/lexer.c b/py/lexer.c index a65df54ba6..5d1113fb30 100644 --- a/py/lexer.c +++ b/py/lexer.c @@ -32,8 +32,8 @@ #include <stdio.h> #include <assert.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "lexer.h" @@ -694,10 +694,10 @@ STATIC void mp_lexer_next_token_into(mp_lexer_t *lex, mp_token_t *tok, bool firs // 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/lexerstr.c b/py/lexerstr.c index 76e90671be..666dbfa37c 100644 --- a/py/lexerstr.c +++ b/py/lexerstr.c @@ -24,8 +24,8 @@ * THE SOFTWARE. */ -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "lexer.h" diff --git a/py/lexerunix.c b/py/lexerunix.c index 89dc80b004..51bc915b22 100644 --- a/py/lexerunix.c +++ b/py/lexerunix.c @@ -24,8 +24,8 @@ * THE SOFTWARE. */ -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #if MICROPY_HELPER_LEXER_UNIX diff --git a/py/malloc.c b/py/malloc.c index b180ddf6b5..8e90849e93 100644 --- a/py/malloc.c +++ b/py/malloc.c @@ -28,8 +28,8 @@ #include <stdlib.h> #include <string.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #if 0 // print debugging info #define DEBUG_printf DEBUG_printf @@ -27,8 +27,8 @@ #include <stdlib.h> #include <assert.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "runtime0.h" @@ -82,7 +82,7 @@ int m_get_peak_bytes_allocated(void); /** 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/mkrules.mk b/py/mkrules.mk index 9592d6c590..6153618fae 100644 --- a/py/mkrules.mk +++ b/py/mkrules.mk @@ -73,9 +73,9 @@ all: $(PROG) $(PROG): $(OBJ) $(ECHO) "LINK $@" - $(Q)$(CC) -o $@ $(OBJ) $(LIB) $(LDFLAGS) + $(Q)$(CC) $(COPT) -o $@ $(OBJ) $(LIB) $(LDFLAGS) ifndef DEBUG - $(Q)$(STRIP) $(PROG) + $(Q)$(STRIP) $(STRIPFLAGS_EXTRA) $(PROG) endif $(Q)$(SIZE) $(PROG) diff --git a/py/modarray.c b/py/modarray.c index a741a0ecb4..3ff567f1d9 100644 --- a/py/modarray.c +++ b/py/modarray.c @@ -24,8 +24,8 @@ * THE SOFTWARE. */ -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "builtin.h" @@ -40,8 +40,8 @@ STATIC const mp_obj_dict_t mp_module_array_globals = { .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 3bc3055dc8..ddd8abf71e 100644 --- a/py/modcmath.c +++ b/py/modcmath.c @@ -26,8 +26,8 @@ #include <math.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "builtin.h" @@ -142,8 +142,8 @@ STATIC const mp_obj_dict_t mp_module_cmath_globals = { .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 9e3da7e666..5cd0b317a1 100644 --- a/py/modcollections.c +++ b/py/modcollections.c @@ -24,8 +24,8 @@ * THE SOFTWARE. */ -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "builtin.h" @@ -42,8 +42,8 @@ STATIC const mp_obj_dict_t mp_module_collections_globals = { .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 c53eed235f..f136ce733d 100644 --- a/py/modgc.c +++ b/py/modgc.c @@ -24,8 +24,8 @@ * THE SOFTWARE. */ -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "builtin.h" @@ -73,8 +73,8 @@ STATIC const mp_obj_dict_t mp_module_gc_globals = { .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 08c6c59dd9..ef3b29b53f 100644 --- a/py/modio.c +++ b/py/modio.c @@ -24,8 +24,8 @@ * THE SOFTWARE. */ -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "builtin.h" @@ -57,8 +57,8 @@ STATIC const mp_obj_dict_t mp_module_io_globals = { .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 0fd583c2ff..0d0d13b4e2 100644 --- a/py/modmath.c +++ b/py/modmath.c @@ -26,8 +26,8 @@ #include <math.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "builtin.h" @@ -172,8 +172,8 @@ STATIC const mp_obj_dict_t mp_module_math_globals = { .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 40d749da2d..bbb315189b 100644 --- a/py/modmicropython.c +++ b/py/modmicropython.c @@ -24,8 +24,8 @@ * THE SOFTWARE. */ -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "builtin.h" @@ -65,8 +65,8 @@ STATIC const mp_obj_dict_t mp_module_micropython_globals = { .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 a45181852c..2e40264e8d 100644 --- a/py/modstruct.c +++ b/py/modstruct.c @@ -27,8 +27,8 @@ #include <assert.h> #include <string.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "builtin.h" @@ -210,8 +210,8 @@ STATIC const mp_obj_dict_t mp_module_struct_globals = { .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 a99db1b7f8..1e7f7eff7f 100644 --- a/py/modsys.c +++ b/py/modsys.c @@ -24,8 +24,8 @@ * THE SOFTWARE. */ -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "builtin.h" @@ -87,8 +87,8 @@ STATIC const mp_obj_dict_t mp_module_sys_globals = { .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/mpconfig.h b/py/mpconfig.h index 93e98c25b6..4a3288a3d1 100644 --- a/py/mpconfig.h +++ b/py/mpconfig.h @@ -223,6 +223,10 @@ typedef double mp_float_t; #define MICROPY_PY_BUILTINS_FLOAT (0) #endif +#ifndef MICROPY_PY_BUILTINS_COMPLEX +#define MICROPY_PY_BUILTINS_COMPLEX (MICROPY_PY_BUILTINS_FLOAT) +#endif + // Enable features which improve CPython compatibility // but may lead to more code size/memory usage. // TODO: Originally intended as generic category to not @@ -30,8 +30,8 @@ #include <string.h> #include <assert.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "mpz.h" #if MICROPY_LONGINT_IMPL == MICROPY_LONGINT_IMPL_MPZ @@ -29,6 +29,7 @@ #include <limits.h> #include <setjmp.h> +#include <assert.h> typedef struct _nlr_buf_t nlr_buf_t; struct _nlr_buf_t { @@ -44,7 +45,7 @@ struct _nlr_buf_t { #else void *regs[8]; #endif -#elif defined(__thumb2__) +#elif defined(__thumb2__) || defined(__thumb__) || defined(__arm__) void *regs[10]; #else #define MICROPY_NLR_SETJMP (1) diff --git a/py/nlrthumb.S b/py/nlrthumb.S index b306c01753..dabf57cf85 100644 --- a/py/nlrthumb.S +++ b/py/nlrthumb.S @@ -24,19 +24,21 @@ * THE SOFTWARE. */ -#if defined(__thumb2__) && !MICROPY_NLR_SETJMP -/* thumb callee save: bx, bp, sp, r12, r14, r14, r15 */ +#if !MICROPY_NLR_SETJMP && (defined(__thumb2__) || defined(__thumb__) || defined(__arm__)) +/* arm callee save: bx, bp, sp, r12, r14, r14, r15 */ .syntax unified /*.cpu cortex-m4*/ - .thumb + /*.thumb*/ .text .align 2 /* uint nlr_push(r0=nlr_buf_t *nlr) */ .global nlr_push +#if defined(__thumb2__) .thumb .thumb_func +#endif .type nlr_push, %function nlr_push: str lr, [r0, #8] @ store lr into nlr_buf @@ -64,8 +66,10 @@ nlr_push: @ void nlr_pop() .global nlr_pop +#if defined(__thumb2__) .thumb .thumb_func +#endif .type nlr_pop, %function nlr_pop: ldr r3, .L5 @ load addr of nlr_top @@ -80,8 +84,10 @@ nlr_pop: /* void nlr_jump(r0=uint val) */ .global nlr_jump +#if defined(__thumb2__) .thumb .thumb_func +#endif .type nlr_jump, %function nlr_jump: ldr r3, .L2 @ load addr of nlr_top @@ -274,6 +274,7 @@ mp_float_t mp_obj_get_float(mp_obj_t arg) { } } +#if MICROPY_PY_BUILTINS_COMPLEX void mp_obj_get_complex(mp_obj_t arg, mp_float_t *real, mp_float_t *imag) { if (arg == mp_const_false) { *real = 0; @@ -297,6 +298,7 @@ void mp_obj_get_complex(mp_obj_t arg, mp_float_t *real, mp_float_t *imag) { } } #endif +#endif void mp_obj_get_array(mp_obj_t o, uint *len, mp_obj_t **items) { if (MP_OBJ_IS_TYPE(o, &mp_type_tuple)) { diff --git a/py/objcomplex.c b/py/objcomplex.c index d58b53463c..20e7c97d37 100644 --- a/py/objcomplex.c +++ b/py/objcomplex.c @@ -36,7 +36,7 @@ #include "runtime0.h" #include "runtime.h" -#if MICROPY_PY_BUILTINS_FLOAT +#if MICROPY_PY_BUILTINS_COMPLEX #include <math.h> diff --git a/py/objenumerate.c b/py/objenumerate.c index 7d9ea9915a..37414464de 100644 --- a/py/objenumerate.c +++ b/py/objenumerate.c @@ -27,8 +27,8 @@ #include <stdlib.h> #include <assert.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "runtime.h" @@ -45,7 +45,7 @@ STATIC const mp_arg_t enumerate_make_new_args[] = { { 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 diff --git a/py/objfloat.c b/py/objfloat.c index b608b1a3d7..e3fefad8db 100644 --- a/py/objfloat.c +++ b/py/objfloat.c @@ -102,9 +102,12 @@ STATIC mp_obj_t float_unary_op(int op, mp_obj_t o_in) { STATIC mp_obj_t float_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in) { mp_obj_float_t *lhs = lhs_in; +#if MICROPY_PY_BUILTINS_COMPLEX if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_complex)) { return mp_obj_complex_binary_op(op, lhs->value, 0, rhs_in); - } else { + } else +#endif + { return mp_obj_float_binary_op(op, lhs->value, rhs_in); } } diff --git a/py/objint_mpz.c b/py/objint_mpz.c index 516fb52746..cf7896f9e1 100644 --- a/py/objint_mpz.c +++ b/py/objint_mpz.c @@ -121,9 +121,11 @@ mp_obj_t mp_obj_int_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in) { #if MICROPY_PY_BUILTINS_FLOAT } else if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_float)) { return mp_obj_float_binary_op(op, mpz_as_float(zlhs), rhs_in); +#if MICROPY_PY_BUILTINS_COMPLEX } else if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_complex)) { return mp_obj_complex_binary_op(op, mpz_as_float(zlhs), 0, rhs_in); #endif +#endif } else { // delegate to generic function to check for extra cases return mp_obj_int_binary_op_extra_cases(op, lhs_in, rhs_in); diff --git a/py/parse.c b/py/parse.c index af09c335f2..492c1678b5 100644 --- a/py/parse.c +++ b/py/parse.c @@ -30,8 +30,8 @@ #include <assert.h> #include <string.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "lexer.h" #include "parsenumbase.h" diff --git a/py/parsehelper.c b/py/parsehelper.c index 3ead5a3031..105afe711e 100644 --- a/py/parsehelper.c +++ b/py/parsehelper.c @@ -29,8 +29,8 @@ #include <stdint.h> #include <stdio.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "lexer.h" #include "parse.h" diff --git a/py/parsenum.c b/py/parsenum.c index 1c1868ae0a..b9801ab6a1 100644 --- a/py/parsenum.c +++ b/py/parsenum.c @@ -27,14 +27,15 @@ #include <stdbool.h> #include <stdlib.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "nlr.h" #include "obj.h" #include "parsenumbase.h" #include "parsenum.h" #include "smallint.h" +#include "runtime.h" #if MICROPY_PY_BUILTINS_FLOAT #include <math.h> @@ -252,10 +253,15 @@ mp_obj_t mp_parse_num_decimal(const char *str, uint len, bool allow_imag, bool f } // return the object +#if MICROPY_PY_BUILTINS_COMPLEX if (imag) { return mp_obj_new_complex(0, dec_val); } else if (force_complex) { return mp_obj_new_complex(dec_val, 0); +#else + if (imag || force_complex) { + mp_not_implemented("complex values not supported"); +#endif } else { return mp_obj_new_float(dec_val); } diff --git a/py/parsenumbase.c b/py/parsenumbase.c index ce140655bd..4fddac9c3d 100644 --- a/py/parsenumbase.c +++ b/py/parsenumbase.c @@ -24,8 +24,8 @@ * THE SOFTWARE. */ -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "parsenumbase.h" // find real radix base, and strip preceding '0x', '0o' and '0b' diff --git a/py/pfenv.c b/py/pfenv.c index e631f8654a..ca1e3e919b 100644 --- a/py/pfenv.c +++ b/py/pfenv.c @@ -27,8 +27,8 @@ #include <stdint.h> #include <string.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "mpz.h" @@ -27,8 +27,8 @@ #include <assert.h> #include <string.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" // NOTE: we are using linear arrays to store and search for qstr's (unique strings, interned strings) @@ -24,8 +24,8 @@ * THE SOFTWARE. */ -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "repl.h" #if MICROPY_HELPER_REPL diff --git a/py/runtime.c b/py/runtime.c index d57bb686d1..b539984c0b 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -426,6 +426,7 @@ mp_obj_t mp_binary_op(int op, mp_obj_t lhs, mp_obj_t rhs) { } else { return res; } +#if MICROPY_PY_BUILTINS_COMPLEX } else if (MP_OBJ_IS_TYPE(rhs, &mp_type_complex)) { mp_obj_t res = mp_obj_complex_binary_op(op, lhs_val, 0, rhs); if (res == MP_OBJ_NULL) { @@ -434,6 +435,7 @@ mp_obj_t mp_binary_op(int op, mp_obj_t lhs, mp_obj_t rhs) { return res; } #endif +#endif } } diff --git a/py/scope.c b/py/scope.c index 839e8216c1..83c2b6e07c 100644 --- a/py/scope.c +++ b/py/scope.c @@ -29,8 +29,8 @@ #include <stdio.h> #include <assert.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "parse.h" diff --git a/py/smallint.c b/py/smallint.c index 5543f126c3..c57f364e36 100644 --- a/py/smallint.c +++ b/py/smallint.c @@ -24,8 +24,8 @@ * THE SOFTWARE. */ -#include "misc.h" #include "mpconfig.h" +#include "misc.h" #include "qstr.h" #include "obj.h" #include "smallint.h" diff --git a/py/unicode.c b/py/unicode.c index c8faa57009..88f835131d 100644 --- a/py/unicode.c +++ b/py/unicode.c @@ -26,8 +26,8 @@ #include <stdint.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" // attribute flags #define FL_PRINT (0x01) @@ -29,8 +29,8 @@ #include <stdarg.h> #include <string.h> #include <assert.h> -#include "misc.h" #include "mpconfig.h" +#include "misc.h" // returned value is always at least 1 greater than argument #define ROUND_ALLOC(a) (((a) & ((~0) - 7)) + 8) |