circuitpython/py
Damien George 1084b0f9c2 py: Store bytecode arg names in bytecode (were in own array).
This saves a lot of RAM for 2 reasons:

1. For functions that don't have default values, var args or var kw
args (which is a large number of functions in the general case), the
mp_obj_fun_bc_t type now fits in 1 GC block (previously needed 2 because
of the extra pointer to point to the arg_names array).  So this saves 16
bytes per function (32 bytes on 64-bit machines).

2. Combining separate memory regions generally saves RAM because the
unused bytes at the end of the GC block are saved for 1 of the blocks
(since that block doesn't exist on its own anymore).  So generally this
saves 8 bytes per function.

Tested by importing lots of modules:

- 64-bit Linux gave about an 8% RAM saving for 86k of used RAM.
- pyboard gave about a 6% RAM saving for 31k of used RAM.
2014-10-25 20:23:13 +01:00
..
argcheck.c py: Change uint to mp_uint_t in runtime.h, stackctrl.h, binary.h. 2014-08-30 14:59:21 +01:00
asmarm.c py: Implement native load for viper. 2014-10-12 16:59:29 +01:00
asmarm.h py: Implement native load for viper. 2014-10-12 16:59:29 +01:00
asmthumb.c py: Make macro names in assemblers consistent, and tidy up a bit. 2014-09-29 19:42:06 +01:00
asmthumb.h py: Make macro names in assemblers consistent, and tidy up a bit. 2014-09-29 19:42:06 +01:00
asmx64.c py: Implement native load for viper. 2014-10-12 16:59:29 +01:00
asmx64.h py: Implement native load for viper. 2014-10-12 16:59:29 +01:00
asmx86.c py: Implement native load for viper. 2014-10-12 16:59:29 +01:00
asmx86.h py: Implement native load for viper. 2014-10-12 16:59:29 +01:00
bc0.h Add license header to (almost) all files. 2014-05-03 23:27:38 +01:00
bc.c py: Store bytecode arg names in bytecode (were in own array). 2014-10-25 20:23:13 +01:00
bc.h py: Store bytecode arg names in bytecode (were in own array). 2014-10-25 20:23:13 +01:00
binary.c py: Make mp_binary_set_val work on big endian machine. 2014-10-06 15:05:35 +00:00
binary.h py: Make mp_binary_set_val work on big endian machine. 2014-10-06 15:05:35 +00:00
builtin.c py: Fix smallint modulo with negative arguments. 2014-10-22 23:05:50 +01:00
builtin.h extmod: Add uheapq module. 2014-10-22 23:20:15 +01:00
builtinevex.c py: Implement proper context save/restore for eval/exec; factor code. 2014-10-05 20:13:34 +01:00
builtinimport.c py: Add module weak link support. 2014-10-12 20:18:40 +01:00
builtintables.c py: Add builtin memoryview object (mostly using array code). 2014-10-23 13:34:35 +01:00
builtintables.h py: Add module weak link support. 2014-10-12 20:18:40 +01:00
compile.c py: Add more compiler optimisations for constant if/while conditions. 2014-10-17 17:57:33 +00:00
compile.h py: Implement proper context save/restore for eval/exec; factor code. 2014-10-05 20:13:34 +01:00
emit.h py: Convert [u]int to mp_[u]int_t in emit.h and associated .c files. 2014-09-08 23:05:16 +01:00
emitbc.c py: Store bytecode arg names in bytecode (were in own array). 2014-10-25 20:23:13 +01:00
emitcommon.c py: Convert [u]int to mp_[u]int_t in emit.h and associated .c files. 2014-09-08 23:05:16 +01:00
emitcpy.c py: Convert [u]int to mp_[u]int_t in emit.h and associated .c files. 2014-09-08 23:05:16 +01:00
emitglue.c py: Store bytecode arg names in bytecode (were in own array). 2014-10-25 20:23:13 +01:00
emitglue.h py: Store bytecode arg names in bytecode (were in own array). 2014-10-25 20:23:13 +01:00
emitinlinethumb.c py: Make macro names in assemblers consistent, and tidy up a bit. 2014-09-29 19:42:06 +01:00
emitnative.c py: Partially fix viper multi-comparison; add test for it. 2014-10-19 19:00:51 +01:00
emitpass1.c py: Convert [u]int to mp_[u]int_t in emit.h and associated .c files. 2014-09-08 23:05:16 +01:00
formatfloat.c formatfloat.c: Typo fix in comment. 2014-07-17 20:45:58 +03:00
formatfloat.h Add license header to (almost) all files. 2014-05-03 23:27:38 +01:00
gc.c py: Improve memory usage debugging; better GC AT dumping. 2014-10-24 23:12:25 +01:00
gc.h py: Improve memory usage debugging; better GC AT dumping. 2014-10-24 23:12:25 +01:00
grammar.h Add license header to (almost) all files. 2014-05-03 23:27:38 +01:00
lexer.c py: Add further checks for failed malloc in lexer init functions. 2014-10-09 16:53:37 +01:00
lexer.h py: Change lexer stream API to return bytes not chars. 2014-07-30 11:46:05 +01:00
lexerstr.c py: Add further checks for failed malloc in lexer init functions. 2014-10-09 16:53:37 +01:00
lexerunix.c py: Add further checks for failed malloc in lexer init functions. 2014-10-09 16:53:37 +01:00
lexerunix.h Add license header to (almost) all files. 2014-05-03 23:27:38 +01:00
makeqstrdata.py py: Use % str formatting instead of {} in makeqstrdata.py. 2014-09-05 13:16:19 +01:00
malloc.c py: Clean up edge cases of malloc/realloc/free. 2014-10-23 12:02:00 +01:00
map.c py: Make map, dict, set use mp_int_t/mp_uint_t exclusively. 2014-08-30 13:23:35 +01:00
misc.h py: Add further checks for failed malloc in lexer init functions. 2014-10-09 16:53:37 +01:00
mkenv.mk py, mk: Revert change where build variables set with ?=. 2014-06-07 13:14:45 +01:00
mkrules.mk Merge branch 'teensy-new' of github.com:dhylands/micropython into dhylands-teensy-new 2014-07-02 13:42:37 +01:00
modarray.c py: Allow to disable array module and bytearray type. 2014-06-27 21:02:04 +03:00
modcmath.c py, modcmath: Fix doc comment, and add some more of them. 2014-08-11 22:19:44 +00:00
modcollections.c py: Include mpconfig.h before all other includes. 2014-06-21 22:43:22 +03:00
modgc.c doc: Document gc, sys, math, cmath. 2014-08-10 17:50:28 +01:00
modio.c py: Include mpconfig.h before all other includes. 2014-06-21 22:43:22 +03:00
modmath.c doc: Document gc, sys, math, cmath. 2014-08-10 17:50:28 +01:00
modmicropython.c py: Make MP_OBJ_NEW_SMALL_INT cast arg to mp_int_t itself. 2014-07-31 10:49:14 +01:00
modstruct.c py: Make mp_binary_set_val work on big endian machine. 2014-10-06 15:05:35 +00:00
modsys.c py: Move definition of mp_sys_exit to core. 2014-09-15 15:53:09 +01:00
mpconfig.h py: Add builtin memoryview object (mostly using array code). 2014-10-23 13:34:35 +01:00
mpz.c py: Convert [u]int to mp_[u]int_t where appropriate. 2014-10-03 17:44:14 +00:00
mpz.h py: Convert [u]int to mp_[u]int_t where appropriate. 2014-10-03 17:44:14 +00:00
nativeglue.c py: Add casting to viper; add native mem stores to viper. 2014-09-29 22:10:41 +01:00
nlr.h py: Support arm and thumb ARM ISAs, in addition to thumb2. 2014-06-22 01:40:45 +03:00
nlrsetjmp.c Add license header to (almost) all files. 2014-05-03 23:27:38 +01:00
nlrthumb.S py: Clean up nlr*.S to make it easier to read; fix clang .bss error. 2014-09-26 13:07:26 +00:00
nlrx64.S py: Clean up nlr*.S to make it easier to read; fix clang .bss error. 2014-09-26 13:07:26 +00:00
nlrx86.S py: Clean up nlr*.S to make it easier to read; fix clang .bss error. 2014-09-26 13:07:26 +00:00
obj.c py: Rename mp_builtin_id to mp_obj_id and make it public. 2014-09-07 20:41:09 +01:00
obj.h py: Store bytecode arg names in bytecode (were in own array). 2014-10-25 20:23:13 +01:00
objarray.c py: Add builtin memoryview object (mostly using array code). 2014-10-23 13:34:35 +01:00
objarray.h py: Change uint to mp_uint_t in runtime.h, stackctrl.h, binary.h. 2014-08-30 14:59:21 +01:00
objbool.c py: Make native emitter handle multi-compare and not/is not/not in ops. 2014-09-23 14:15:45 +00:00
objboundmeth.c py: Change [u]int to mp_[u]int_t in qstr.[ch], and some other places. 2014-10-03 19:52:22 +01:00
objcell.c Add license header to (almost) all files. 2014-05-03 23:27:38 +01:00
objclosure.c objclosure: Fix printing of generator closures. 2014-10-16 00:14:01 +03:00
objcomplex.c py and libm: Add asinf,acosf; print higher precision for float. 2014-09-11 22:24:45 +01:00
objdict.c py: Add native json printing using existing print framework. 2014-09-17 22:56:34 +01:00
objenumerate.c Change some parts of the core API to use mp_uint_t instead of uint/int. 2014-08-30 00:35:11 +01:00
objexcept.c py: Remove unused and unneeded SystemError exception. 2014-10-22 19:42:55 +01:00
objfilter.c Change some parts of the core API to use mp_uint_t instead of uint/int. 2014-08-30 00:35:11 +01:00
objfloat.c py: Implement divmod, % and proper // for floating point. 2014-09-13 18:43:09 +01:00
objfun.c py: Store bytecode arg names in bytecode (were in own array). 2014-10-25 20:23:13 +01:00
objfun.h py: Store bytecode arg names in bytecode (were in own array). 2014-10-25 20:23:13 +01:00
objgenerator.c py: Store bytecode arg names in bytecode (were in own array). 2014-10-25 20:23:13 +01:00
objgenerator.h Add license header to (almost) all files. 2014-05-03 23:27:38 +01:00
objgetitemiter.c Add license header to (almost) all files. 2014-05-03 23:27:38 +01:00
objint_longlong.c py: Enable struct/binary-helper to parse q and Q sized ints. 2014-09-10 22:10:33 +01:00
objint_mpz.c py: Convert [u]int to mp_[u]int_t where appropriate. 2014-10-03 17:44:14 +00:00
objint.c py: Make int.to_bytes work on big endian machine. 2014-10-06 13:45:34 +00:00
objint.h py: Convert [u]int to mp_[u]int_t where appropriate. 2014-10-03 17:44:14 +00:00
objlist.c py: Convert [u]int to mp_[u]int_t where appropriate. 2014-10-03 17:44:14 +00:00
objlist.h Rename machine_(u)int_t to mp_(u)int_t. 2014-07-03 13:25:24 +01:00
objmap.c Change some parts of the core API to use mp_uint_t instead of uint/int. 2014-08-30 00:35:11 +01:00
objmodule.c py: Print imported module's location (__file__) if available. 2014-09-08 10:45:23 +01:00
objmodule.h Add license header to (almost) all files. 2014-05-03 23:27:38 +01:00
objnamedtuple.c py: Convert [u]int to mp_[u]int_t where appropriate. 2014-10-03 17:44:14 +00:00
objnone.c py: Add native json printing using existing print framework. 2014-09-17 22:56:34 +01:00
objobject.c Change some parts of the core API to use mp_uint_t instead of uint/int. 2014-08-30 00:35:11 +01:00
objproperty.c Change some parts of the core API to use mp_uint_t instead of uint/int. 2014-08-30 00:35:11 +01:00
objrange.c py: Convert [u]int to mp_[u]int_t where appropriate. 2014-10-03 17:44:14 +00:00
objreversed.c Change some parts of the core API to use mp_uint_t instead of uint/int. 2014-08-30 00:35:11 +01:00
objset.c py: Make map, dict, set use mp_int_t/mp_uint_t exclusively. 2014-08-30 13:23:35 +01:00
objslice.c Rename bultins config variables to MICROPY_PY_BUILTINS_*. 2014-06-01 13:32:54 +01:00
objstr.c py: Use MP_OBJ_NULL instead of NULL in a few places. 2014-10-23 12:06:53 +01:00
objstr.h py: Change [u]int to mp_[u]int_t in qstr.[ch], and some other places. 2014-10-03 19:52:22 +01:00
objstringio.c Change some parts of the core API to use mp_uint_t instead of uint/int. 2014-08-30 00:35:11 +01:00
objstrunicode.c py: Simplify JSON str printing (while still conforming to JSON spec). 2014-09-25 17:35:56 +01:00
objtuple.c py: Add native json printing using existing print framework. 2014-09-17 22:56:34 +01:00
objtuple.h Change some parts of the core API to use mp_uint_t instead of uint/int. 2014-08-30 00:35:11 +01:00
objtype.c py: Use MP_OBJ_NULL instead of NULL in a few places. 2014-10-23 12:06:53 +01:00
objtype.h Add license header to (almost) all files. 2014-05-03 23:27:38 +01:00
objzip.c py: Small simplifications in tuple and list accessors. 2014-08-30 15:17:47 +01:00
opmethods.c Add license header to (almost) all files. 2014-05-03 23:27:38 +01:00
parse.c py: Properly free string parse-node; add assertion to gc_free. 2014-10-23 14:13:05 +01:00
parse.h py: Convert [u]int to mp_[u]int_t where appropriate. 2014-10-03 17:44:14 +00:00
parsehelper.c lexer: Convert type (u)int to mp_(u)int_t. 2014-07-03 13:47:47 +01:00
parsehelper.h Add license header to (almost) all files. 2014-05-03 23:27:38 +01:00
parsenum.c parser: Convert (u)int to mp_(u)int_t. 2014-07-03 14:13:33 +01:00
parsenum.h parser: Convert (u)int to mp_(u)int_t. 2014-07-03 14:13:33 +01:00
parsenumbase.c parser: Convert (u)int to mp_(u)int_t. 2014-07-03 14:13:33 +01:00
parsenumbase.h parser: Convert (u)int to mp_(u)int_t. 2014-07-03 14:13:33 +01:00
pfenv_printf.c py: Make print() accept "file" argument, and actually print to stream. 2014-07-19 21:27:22 +03:00
pfenv.c py: Convert [u]int to mp_[u]int_t where appropriate. 2014-10-03 17:44:14 +00:00
pfenv.h py: Convert [u]int to mp_[u]int_t where appropriate. 2014-10-03 17:44:14 +00:00
py-version.sh - Let the build environment decide about the toolchain to be used, in case 2014-06-07 09:16:42 +02:00
py.mk extmod: Add uheapq module. 2014-10-22 23:20:15 +01:00
qstr.c py: Improve memory usage debugging; better GC AT dumping. 2014-10-24 23:12:25 +01:00
qstr.h py: Change [u]int to mp_[u]int_t in qstr.[ch], and some other places. 2014-10-03 19:52:22 +01:00
qstrdefs.h py: Add builtin memoryview object (mostly using array code). 2014-10-23 13:34:35 +01:00
repl.c py: Convert [u]int to mp_[u]int_t where appropriate. 2014-10-03 17:44:14 +00:00
repl.h Tidy up some configuration options. 2014-05-21 20:32:59 +01:00
runtime0.h py: Make native emitter handle multi-compare and not/is not/not in ops. 2014-09-23 14:15:45 +00:00
runtime.c py: Use MP_OBJ_NULL instead of NULL in a few places. 2014-10-23 12:06:53 +01:00
runtime.h py: Change uint to mp_uint_t in runtime.h, stackctrl.h, binary.h. 2014-08-30 14:59:21 +01:00
scope.c py: Convert [u]int to mp_[u]int_t in emit.h and associated .c files. 2014-09-08 23:05:16 +01:00
scope.h py: Convert [u]int to mp_[u]int_t in emit.h and associated .c files. 2014-09-08 23:05:16 +01:00
sequence.c py: Convert [u]int to mp_[u]int_t where appropriate. 2014-10-03 17:44:14 +00:00
showbc.c py: Store bytecode arg names in bytecode (were in own array). 2014-10-25 20:23:13 +01:00
smallint.c py: Fix smallint modulo with negative arguments. 2014-10-22 23:05:50 +01:00
smallint.h Rename machine_(u)int_t to mp_(u)int_t. 2014-07-03 13:25:24 +01:00
stackctrl.c py: Change uint to mp_uint_t in runtime.h, stackctrl.h, binary.h. 2014-08-30 14:59:21 +01:00
stackctrl.h py: Change uint to mp_uint_t in runtime.h, stackctrl.h, binary.h. 2014-08-30 14:59:21 +01:00
stream.c py: Use mp_uint_t where appropriate in stream functions. 2014-10-24 11:26:12 +00:00
stream.h unix, stmhal: Implement file.readinto() method. 2014-10-18 22:44:07 +03:00
unicode.c Rename machine_(u)int_t to mp_(u)int_t. 2014-07-03 13:25:24 +01:00
unicode.h Rename machine_(u)int_t to mp_(u)int_t. 2014-07-03 13:25:24 +01:00
vm.c py: Use variable length encoded uints in more places in bytecode. 2014-09-04 14:44:01 +01:00
vmentrytable.h Fix some unused variables, and silence a clang warning about initialization override in vmentrytable.h 2014-05-12 09:06:18 +02:00
vstr.c py: Convert [u]int to mp_[u]int_t where appropriate. 2014-10-03 17:44:14 +00:00