circuitpython/py
Damien George 40d8430ee3 py/vm: Add macros to hook into various points in the VM.
These can be used to insert arbitrary checks, polling, etc into the VM.
They are left general because the VM is a highly tuned loop and it should
be up to a given port how that port wants to modify the VM internals.

One common use would be to insert a polling check, but only done after
a certain number of opcodes were executed, so as not to slow down the VM
too much.  For example:

 #define MICROPY_VM_HOOK_COUNT (30)
 #define MICROPY_VM_HOOK_INIT static uint vm_hook_divisor = MICROPY_VM_HOOK_COUNT
 #define MICROPY_VM_HOOK_POLL if (--vm_hook_divisor == 0) { \
     vm_hook_divisor = MICROPY_VM_HOOK_COUNT;
     extern void vm_hook_function(void);
     vm_hook_function();
 }
 #define MICROPY_VM_HOOK_LOOP MICROPY_VM_HOOK_POLL
 #define MICROPY_VM_HOOK_RETURN MICROPY_VM_HOOK_POLL
2016-02-17 09:02:19 +00:00
..
argcheck.c py: Use mp_not_implemented consistently for not implemented features. 2015-09-03 23:14:06 +01:00
asmarm.c py: Implement native multiply operation in viper emitter. 2015-06-04 14:00:29 +00:00
asmarm.h py: Implement native multiply operation in viper emitter. 2015-06-04 14:00:29 +00:00
asmthumb.c py/asmthumb: Allow to compile with -Wsign-compare and -Wunused-parameter. 2015-11-09 14:11:21 +00:00
asmthumb.h py: Add lsl/lsr/asr opcode support to inline Thumb2 assembler. 2015-10-19 14:26:19 +01:00
asmx64.c py/asmx64: Support all 16 regs in reg to memory move instructions. 2016-02-15 09:05:50 +00:00
asmx64.h py: Implement ptr32 load and store in viper emitter. 2015-10-13 00:50:17 +01:00
asmx86.c py/asmx86: Fix function definition to use int32_t instead of int. 2015-11-27 14:06:53 +00:00
asmx86.h py: Implement native multiply operation in viper emitter. 2015-06-04 14:00:29 +00:00
bc.c py/bc: Update opcode format table now that MP_BC_NOT opcode is gone. 2016-01-28 16:11:41 +00:00
bc.h py/bc: Use size_t instead of mp_uint_t to count size of state and args. 2015-12-17 12:33:42 +00:00
bc0.h py: Make UNARY_OP_NOT a first-class op, to agree with Py not semantics. 2015-12-10 22:19:48 +00:00
binary.c py: Wrap all obj-ptr conversions in MP_OBJ_TO_PTR/MP_OBJ_FROM_PTR. 2015-11-29 14:25:35 +00:00
binary.h py/binary: Make return type of mp_binary_get_size size_t instead of int. 2015-05-17 18:12:19 +01:00
builtin.h extmod/modurandom: Add "urandom" module. 2016-01-17 12:13:01 +02:00
builtinevex.c py: Change type signature of builtin funs that take variable or kw args. 2016-01-11 00:49:27 +00:00
builtinimport.c py: Change type signature of builtin funs that take variable or kw args. 2016-01-11 00:49:27 +00:00
compile.c py/inlineasm: Add ability to specify return type of asm_thumb funcs. 2016-01-27 14:27:10 +00:00
compile.h py/compile: Add mp_compile_to_raw_code() to return raw code object. 2015-11-20 12:30:37 +00:00
emit.h py/inlineasm: Add ability to specify return type of asm_thumb funcs. 2016-01-27 14:27:10 +00:00
emitbc.c py: Add MICROPY_ENABLE_COMPILER and MICROPY_PY_BUILTINS_EVAL_EXEC opts. 2015-12-18 12:35:44 +00:00
emitcommon.c py: Add MICROPY_ENABLE_COMPILER and MICROPY_PY_BUILTINS_EVAL_EXEC opts. 2015-12-18 12:35:44 +00:00
emitglue.c py/inlineasm: Add ability to specify return type of asm_thumb funcs. 2016-01-27 14:27:10 +00:00
emitglue.h py/emitglue: Add mp_raw_code_load_mem to load raw-code from memory. 2015-11-20 12:44:20 +00:00
emitinlinethumb.c py/inlineasm: Add ability to specify return type of asm_thumb funcs. 2016-01-27 14:27:10 +00:00
emitnative.c py/emitnative: Add check that RHS of viper store is of integral type. 2016-02-15 09:38:02 +00:00
formatfloat.c py/formatfloat: Add ability to format doubles with exponents > 99. 2016-01-29 11:39:12 +00:00
formatfloat.h py: Implement mp_format_float for doubles and use where appropriate 2015-05-17 21:47:11 +01:00
frozenmod.c py/frozenmod: Store frozen module names together, to quickly scan them. 2016-01-03 18:08:45 +02:00
frozenmod.h py: Implement very simple frozen modules support. 2015-01-20 11:52:12 +02:00
gc.c py/gc: Improve mark/sweep debug output. 2015-12-27 20:40:36 +02:00
gc.h py/gc: Move away from using mp_uint_t, instead use uintptr_t and size_t. 2015-11-29 14:25:04 +00:00
grammar.h py/compile: Do proper checking of * and ** in function definition. 2015-11-23 16:50:42 +00:00
lexer.c py: Add MICROPY_ENABLE_COMPILER and MICROPY_PY_BUILTINS_EVAL_EXEC opts. 2015-12-18 12:35:44 +00:00
lexer.h unix: Allow to cat a script into stdin from the command line. 2015-06-04 23:42:45 +01:00
lexerstr.c py: Add MICROPY_ENABLE_COMPILER and MICROPY_PY_BUILTINS_EVAL_EXEC opts. 2015-12-18 12:35:44 +00:00
lexerunix.c unix: Allow to cat a script into stdin from the command line. 2015-06-04 23:42:45 +01:00
makeqstrdata.py py/makeqstrdata.py: Catch and report case of empty input file. 2015-10-11 11:09:57 +03:00
makeversionhdr.py py/makeversionhdr.py: Work with backslashes in paths. 2015-10-30 11:34:53 +03:00
malloc.c py: Improve allocation policy of qstr data. 2015-07-14 22:56:32 +01:00
map.c py/map: In map lookup, check for fixed map independent of ordered map. 2015-12-31 00:24:33 +00:00
misc.h py/repl: Check for an identifier char after the keyword. 2016-02-17 08:56:15 +00:00
mkenv.mk py: Allow to to build MicroPython as a static library. 2015-10-12 15:32:06 +03:00
mkrules.mk py/mkrules.mk: Don't pass COPT to linker. 2015-12-10 00:49:25 +02:00
modarray.c py: Add MP_ROM_* macros and mp_rom_* types and use them. 2015-11-29 14:25:04 +00:00
modbuiltins.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
modcmath.c py: Make it easy to build without MICROPY_PY_BUILTINS_COMPLEX. 2015-12-07 00:19:24 +02:00
modcollections.c py: Add MP_ROM_* macros and mp_rom_* types and use them. 2015-11-29 14:25:04 +00:00
modgc.c py/modgc: Remove obsolete extern declaration. 2015-12-17 13:20:40 +00:00
modio.c py: Add MP_ROM_* macros and mp_rom_* types and use them. 2015-11-29 14:25:04 +00:00
modmath.c py: Change type signature of builtin funs that take variable or kw args. 2016-01-11 00:49:27 +00:00
modmicropython.c py/modmicropython: Add stack_use, heap_lock and heap_unlock functions. 2016-01-24 09:12:06 +00:00
modstruct.c py: Add ustruct.pack_into and unpack_from 2016-01-19 12:25:28 +00:00
modsys.c py: Change type signature of builtin funs that take variable or kw args. 2016-01-11 00:49:27 +00:00
mpconfig.h py/vm: Add macros to hook into various points in the VM. 2016-02-17 09:02:19 +00:00
mphal.h all: Add py/mphal.h and use it in all ports. 2015-10-31 19:14:30 +03:00
mpprint.c py/mpprint: Fix sign extension when printf'ing %u, %x and %X. 2016-02-01 15:08:42 +00:00
mpprint.h py: Change mp_print_strn_t func type to use size_t for the str length. 2015-11-29 14:25:04 +00:00
mpstate.c py: Put all global state together in state structures. 2015-01-07 20:33:00 +00:00
mpstate.h py/mpstate.h: fs_user_mount is now standard, reusable uPy functionality. 2016-02-15 00:02:03 +02:00
mpz.c py/mpz: Add commented-out mpz_pow3_inpl function, to compute (x**y)%z. 2016-02-03 22:30:49 +00:00
mpz.h windows/py: Support 64bit mingw-w64 builds 2015-11-24 17:34:14 +02:00
nativeglue.c py/viper: Allow casting of Python integers to viper pointers. 2016-02-09 13:29:20 +00:00
nlr.h py: Wrap all obj-ptr conversions in MP_OBJ_TO_PTR/MP_OBJ_FROM_PTR. 2015-11-29 14:25:35 +00:00
nlrsetjmp.c py: Put all global state together in state structures. 2015-01-07 20:33:00 +00:00
nlrthumb.S py/nlrthumb: Make compatible with Cortex-M0 (ARMv6M instr set). 2015-10-20 13:26:34 +01:00
nlrx64.S nlr: Use single preprocessor symbol to check if building on Windows 2015-11-24 17:34:14 +02:00
nlrx86.S nlr: Use single preprocessor symbol to check if building on Windows 2015-11-24 17:34:14 +02:00
nlrxtensa.S py: Put all global state together in state structures. 2015-01-07 20:33:00 +00:00
obj.c py: Change exception traceback data to use size_t instead of mp_uint_t. 2016-01-02 22:04:12 +00:00
obj.h py/obj.h: If not float support is enabled, define mp_obj_is_float(o) to false. 2016-02-14 19:12:57 +02:00
objarray.c py/objarray: Implement "in" operator for bytearray. 2016-02-14 18:57:11 +02:00
objattrtuple.c py: Wrap all obj-ptr conversions in MP_OBJ_TO_PTR/MP_OBJ_FROM_PTR. 2015-11-29 14:25:35 +00:00
objbool.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objboundmeth.c py: Change type of .make_new and .call args: mp_uint_t becomes size_t. 2016-01-11 00:48:41 +00:00
objcell.c py: Wrap all obj-ptr conversions in MP_OBJ_TO_PTR/MP_OBJ_FROM_PTR. 2015-11-29 14:25:35 +00:00
objclosure.c py: Change type of .make_new and .call args: mp_uint_t becomes size_t. 2016-01-11 00:48:41 +00:00
objcomplex.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objdict.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objenumerate.c py: Use new code pattern for parsing kw args with mp_arg_parse_all. 2016-01-13 15:47:56 +00:00
objexcept.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objexcept.h py: Change exception traceback data to use size_t instead of mp_uint_t. 2016-01-02 22:04:12 +00:00
objfilter.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objfloat.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objfun.c py: Extend native type-sig to use 4 bits, so uint is separate to ptr. 2016-02-02 23:16:05 +00:00
objfun.h py: Add constant table to bytecode. 2015-11-13 12:49:18 +00:00
objgenerator.c py: Change type signature of builtin funs that take variable or kw args. 2016-01-11 00:49:27 +00:00
objgenerator.h py: Move to guarded includes, everywhere in py/ core. 2015-01-01 20:32:09 +00:00
objgetitemiter.c py/objgetitemiter: Typo fix in comment. 2016-01-23 23:30:06 +02:00
objint.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objint.h py: Change mp_obj_int_is_positive to more general mp_obj_int_sign. 2016-01-07 14:29:12 +00:00
objint_longlong.c py: Change mp_obj_int_is_positive to more general mp_obj_int_sign. 2016-01-07 14:29:12 +00:00
objint_mpz.c py: Change mp_obj_int_is_positive to more general mp_obj_int_sign. 2016-01-07 14:29:12 +00:00
objlist.c py: Use new code pattern for parsing kw args with mp_arg_parse_all. 2016-01-13 15:47:56 +00:00
objlist.h py: Fix adding of traceback so that it appends to existing info. 2015-02-27 00:36:39 +00:00
objmap.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objmodule.c extmod/modurandom: Add "urandom" module. 2016-01-17 12:13:01 +02:00
objmodule.h py: Move to guarded includes, everywhere in py/ core. 2015-01-01 20:32:09 +00:00
objnamedtuple.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objnone.c py: Convert hash API to use MP_UNARY_OP_HASH instead of ad-hoc function. 2015-05-12 22:46:02 +01:00
objobject.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objpolyiter.c py/objpolyiter: Implement instance-polymorphic iterator type. 2015-12-14 23:48:12 +02:00
objproperty.c py/objproperty: Fix static struct to build with OBJ_REPR_D. 2016-01-15 11:09:20 +00:00
objrange.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objreversed.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objset.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objsingleton.c py: Wrap all obj-ptr conversions in MP_OBJ_TO_PTR/MP_OBJ_FROM_PTR. 2015-11-29 14:25:35 +00:00
objslice.c py: Wrap all obj-ptr conversions in MP_OBJ_TO_PTR/MP_OBJ_FROM_PTR. 2015-11-29 14:25:35 +00:00
objstr.c py/objarray: Implement "in" operator for bytearray. 2016-02-14 18:57:11 +02:00
objstr.h py/objarray: Implement "in" operator for bytearray. 2016-02-14 18:57:11 +02:00
objstringio.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objstrunicode.c py: Use polymorphic iterator type where possible to reduce code size. 2016-01-03 16:27:55 +00:00
objtuple.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objtuple.h py: Add MP_ROM_* macros and mp_rom_* types and use them. 2015-11-29 14:25:04 +00:00
objtype.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objtype.h py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
objzip.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
opmethods.c py: Move to guarded includes, everywhere in py/ core. 2015-01-01 20:32:09 +00:00
parse.c py: unary_op enum type fix, and a cast to remove clang warning 2016-01-12 22:06:39 +01:00
parse.h py/parse: Improve constant folding to operate on small and big ints. 2016-01-07 14:40:35 +00:00
parsenum.c py: Wrap all obj-ptr conversions in MP_OBJ_TO_PTR/MP_OBJ_FROM_PTR. 2015-11-29 14:25:35 +00:00
parsenum.h py: Parse big-int/float/imag constants directly in parser. 2015-02-08 01:57:40 +00:00
parsenumbase.c py: Parse big-int/float/imag constants directly in parser. 2015-02-08 01:57:40 +00:00
parsenumbase.h py: Move to guarded includes, everywhere in py/ core. 2015-01-01 20:32:09 +00:00
py.mk extmod/vfs_fat_ffconf: Reusable FatFs module, move from stmhal/ffconf. 2016-02-15 00:19:27 +02:00
qstr.c py/qstr: Use size_t instead of mp_uint_t when counting allocated bytes. 2015-12-17 12:41:40 +00:00
qstr.h py/qstr: Change type of qstr from mp_uint_t to size_t. 2015-12-17 12:45:22 +00:00
qstrdefs.h py/qstrdefs.h: qstrs for VfsFat. 2016-02-15 12:49:32 +02:00
repl.c py/repl: Check for an identifier char after the keyword. 2016-02-17 08:56:15 +00:00
repl.h py, readline: Add tab autocompletion for REPL. 2015-04-29 00:46:26 +01:00
runtime.c py/runtime: mp_stack_ctrl_init() should be called immediately on startup. 2016-01-29 02:13:42 +02:00
runtime.h py: Wrap all obj-ptr conversions in MP_OBJ_TO_PTR/MP_OBJ_FROM_PTR. 2015-11-29 14:25:35 +00:00
runtime0.h py: Extend native type-sig to use 4 bits, so uint is separate to ptr. 2016-02-02 23:16:05 +00:00
scope.c py: Add MICROPY_ENABLE_COMPILER and MICROPY_PY_BUILTINS_EVAL_EXEC opts. 2015-12-18 12:35:44 +00:00
scope.h py: Put all bytecode state (arg count, etc) in bytecode. 2015-11-13 12:49:18 +00:00
sequence.c py: Wrap all obj-ptr conversions in MP_OBJ_TO_PTR/MP_OBJ_FROM_PTR. 2015-11-29 14:25:35 +00:00
showbc.c py: Make UNARY_OP_NOT a first-class op, to agree with Py not semantics. 2015-12-10 22:19:48 +00:00
smallint.c py: Move to guarded includes, everywhere in py/ core. 2015-01-01 20:32:09 +00:00
smallint.h py/smallint: Allow to override MP_SMALL_INT_MIN et al. 2016-01-08 13:43:56 +00:00
stackctrl.c vm: Support strict stackless mode, with proper exception reporting. 2015-04-03 00:26:47 +03:00
stackctrl.h py: Move to guarded includes, everywhere in py/ core. 2015-01-01 20:32:09 +00:00
stream.c py: Change type signature of builtin funs that take variable or kw args. 2016-01-11 00:49:27 +00:00
stream.h py: Add mp_get_stream_raise to factor out check for stream methods. 2015-12-09 18:47:43 +00:00
unicode.c py/repl: Check for an identifier char after the keyword. 2016-02-17 08:56:15 +00:00
unicode.h py: Move to guarded includes, everywhere in py/ core. 2015-01-01 20:32:09 +00:00
vm.c py/vm: Add macros to hook into various points in the VM. 2016-02-17 09:02:19 +00:00
vmentrytable.h py: Make UNARY_OP_NOT a first-class op, to agree with Py not semantics. 2015-12-10 22:19:48 +00:00
vstr.c py: Prevent many extra vstr allocations. 2015-07-06 17:29:27 +01:00
warning.c py: Convert occurrences of non-debug printf to mp_printf. 2015-04-16 14:30:16 +00:00