circuitpython/py
Damien George 265500c5c8 py/objnamedtuple: Simplify and remove use of alloca building namedtuple.
Prior to this patch there were 2 paths for creating the namedtuple, one for
when no keyword args were passed, and one when there were keyword args.
And alloca was used in the keyword-arg path to temporarily create the array
of elements for the namedtuple, which would then be copied to a
heap-allocated object (the namedtuple itself).

This patch simplifies the code by combining the no-keyword and keyword
paths, and removing the need for the alloca by constructing the namedtuple
on the heap before populating it.

Heap usage in unchanged, stack usage is reduced, use of alloca is removed,
and code size is not increased and is actually reduced by between 20-30
bytes for most ports.
2017-06-29 17:40:25 +10:00
..
argcheck.c py: Use mp_raise_TypeError/mp_raise_ValueError helpers where possible. 2017-03-28 22:37:26 +11:00
asmarm.c py/asmarm: Fix assembler's PASS_EMIT constant name. 2017-01-03 15:40:50 +11:00
asmarm.h py: Move arch-specific assembler macros from emitnative to asmXXX.h. 2016-12-09 16:51:49 +11:00
asmbase.c py/asm: Remove need for dummy_data when doing initial assembler passes. 2016-12-09 22:50:58 +11:00
asmbase.h py/asm: Remove need for dummy_data when doing initial assembler passes. 2016-12-09 22:50:58 +11:00
asmthumb.c various: Spelling fixes 2017-05-29 11:36:05 +03:00
asmthumb.h py: Move arch-specific assembler macros from emitnative to asmXXX.h. 2016-12-09 16:51:49 +11:00
asmx64.c py/asm: Remove need for dummy_data when doing initial assembler passes. 2016-12-09 22:50:58 +11:00
asmx64.h py/asm: Remove need for dummy_data when doing initial assembler passes. 2016-12-09 22:50:58 +11:00
asmx86.c py/asm: Fix x86 and ARM assemblers due to recent code refactoring. 2016-12-09 22:54:45 +11:00
asmx86.h py/asm: Remove need for dummy_data when doing initial assembler passes. 2016-12-09 22:50:58 +11:00
asmxtensa.c py/asm: Remove need for dummy_data when doing initial assembler passes. 2016-12-09 22:50:58 +11:00
asmxtensa.h py/asmxtensa.h: Explicitly cast args to 32-bits so left-shift is legal. 2017-02-08 10:48:51 +11:00
bc.c py: Provide mp_decode_uint_skip() to help reduce stack usage. 2017-06-09 13:36:33 +10:00
bc.h py: Provide mp_decode_uint_skip() to help reduce stack usage. 2017-06-09 13:36:33 +10:00
bc0.h py: Add LOAD_SUPER_METHOD bytecode to allow heap-free super meth calls. 2017-04-22 23:39:20 +10:00
binary.c py/binary: Handle storing big-ints to all arrays types. 2017-05-09 10:41:00 +10: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 py: Add builtin help function to core, with default help msg. 2017-01-22 11:56:16 +11:00
builtinevex.c py: Change mp_uint_t to size_t for mp_obj_str_get_data len arg. 2017-03-29 12:56:45 +11:00
builtinhelp.c py/builtinhelp: Implement help('modules') to list available modules. 2017-01-22 12:12:54 +11:00
builtinimport.c py/builtinimport: Remove unreachable code for relative imports. 2017-06-28 12:21:29 +10:00
compile.c py/compile: Optimise emitter label indices to save a word of heap. 2017-06-22 15:05:58 +10:00
compile.h py: Allow inline-assembler emitter to be generic. 2016-12-09 17:06:21 +11:00
emit.h py: Add LOAD_SUPER_METHOD bytecode to allow heap-free super meth calls. 2017-04-22 23:39:20 +10:00
emitbc.c py/emitbc: Fix bug with BC emitter computing Python stack size. 2017-05-25 20:42:30 +10:00
emitcommon.c py/scope: Factor common code to find locals and close over them. 2016-09-30 13:53:00 +10:00
emitglue.c py/emitglue: Refactor to remove assert(0), to improve coverage. 2016-12-21 11:52:05 +11:00
emitglue.h py: Factor persistent code load/save funcs into persistentcode.[ch]. 2016-11-16 16:14:14 +11:00
emitinlinethumb.c py: Create str/bytes objects in the parser, not the compiler. 2017-02-24 13:43:43 +11:00
emitinlinextensa.c py/emitinline: Move common code for end of final pass to compiler. 2016-12-09 21:23:17 +11:00
emitnative.c py: Add LOAD_SUPER_METHOD bytecode to allow heap-free super meth calls. 2017-04-22 23:39:20 +10:00
formatfloat.c py/formatfloat: Fix number of digits and exponent sign when rounding. 2017-06-13 13:36:56 +10: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/modio: Implement uio.resource_stream(package, resource_path). 2017-05-03 01:47:08 +03:00
frozenmod.h py/frozenmod.h: Add missing header guards 2017-06-28 00:51:45 +03:00
gc.c py/gc: Execute finaliser code in a protected environment. 2017-04-12 13:52:04 +10:00
gc.h py/gc: Calculate (and report) maximum contiguous free block size. 2016-07-01 00:09:55 +03:00
grammar.h py/compile: Refactor handling of special super() call. 2017-04-22 21:46:32 +10:00
lexer.c py/lexer: Process CR earlier to allow newlines checks on chr1. 2017-05-12 15:14:24 +10:00
lexer.h py/lexer: Convert mp_uint_t to size_t where appropriate. 2017-02-17 12:44:24 +11:00
makeqstrdata.py py/makeqstrdata.py: Compute the qstr hash from bytes, not characters. 2016-09-02 14:32:47 +10:00
makeqstrdefs.py py/makeqstrdefs.py: Make script run correctly with Python 2.6. 2017-06-09 13:42:13 +10:00
makeversionhdr.py py/makeversionhdr.py: Work with backslashes in paths. 2015-10-30 11:34:53 +03:00
malloc.c py/gc: Add MICROPY_GC_CONSERVATIVE_CLEAR option to always zero memory. 2016-08-26 15:35:26 +10:00
map.c py/map: Fix bugs with deletion of elements from OrderedDict. 2017-03-03 11:21:19 +11:00
misc.h various: Spelling fixes 2017-05-29 11:36:05 +03:00
mkenv.mk various: Spelling fixes 2017-05-29 11:36:05 +03:00
mkrules.mk py/mkrules.mk: Fix auto-qstr generation when "make -B" is used. 2017-05-26 13:12:42 +10:00
modarray.c all: Remove 'name' member from mp_obj_module_t struct. 2016-09-22 00:23:16 +10:00
modbuiltins.c all: Make more use of mp_raise_{msg,TypeError,ValueError} helpers. 2017-06-15 11:54:41 +10:00
modcmath.c all: Remove 'name' member from mp_obj_module_t struct. 2016-09-22 00:23:16 +10:00
modcollections.c all: Remove 'name' member from mp_obj_module_t struct. 2016-09-22 00:23:16 +10:00
modgc.c all: Remove 'name' member from mp_obj_module_t struct. 2016-09-22 00:23:16 +10:00
modio.c py/modio: resource_stream: Implement "package" param handling. 2017-05-06 18:42:35 +03:00
modmath.c all: Make more use of mp_raise_{msg,TypeError,ValueError} helpers. 2017-06-15 11:54:41 +10:00
modmicropython.c py/modmicropython: Add micropython.kbd_intr() function. 2017-04-18 17:24:30 +10:00
modstruct.c py/binary: mp_binary_get_size: Raise error on unsupported typecodes. 2017-01-17 22:53:06 +03:00
modsys.c py/modsys: Allow to compile with obj-repr D and PY_ATTRTUPLE disabled. 2017-06-08 00:41:27 +10:00
modthread.c py/modthread: Raise RuntimeError in release() if lock is not acquired. 2017-06-14 14:43:50 +10:00
moduerrno.c py/moduerrno: Make list of errno codes configurable. 2017-02-22 12:58:11 +11:00
mpconfig.h py/mpconfig.h: Remove spaces in "Micro Python" and remove blank line. 2017-06-26 12:29:20 +10:00
mperrno.h extmod/modlwip: Fix error codes for duplicate calls to connect(). 2017-06-04 12:30:41 +03:00
mphal.h extmod/utime_mphal: Factor out implementations in terms of mp_hal_* for reuse. 2016-10-14 20:14:01 +03:00
mpprint.c py/mpprint: Fix int formatting so "+" is printed for 0-valued integer. 2017-03-15 17:25:12 +11:00
mpprint.h py/modsys: update conditionals for code referencing sys.stdout 2017-05-14 18:24:50 +03:00
mpstate.c py: Add MICROPY_DYNAMIC_COMPILER option to config compiler at runtime. 2016-02-25 10:05:46 +00:00
mpstate.h py: Make sure that static emg-exc-buffer is aligned to size of mp_obj_t. 2017-04-10 16:02:56 +10:00
mpthread.h py/mpthread: Include mpstate.h when defining GIL macros. 2016-06-28 11:28:52 +01:00
mpz.c py/mpz: In mpn_sub, use existing function to remove trailing zeros. 2017-04-25 12:22:04 +10:00
mpz.h py/mpz: Change type of "base" args from mp_uint_t to unsigned int. 2017-02-16 16:51:16 +11:00
nativeglue.c py: Add LOAD_SUPER_METHOD bytecode to allow heap-free super meth calls. 2017-04-22 23:39:20 +10:00
nlr.h py: Cleanup use of global DEBUG preprocessor definition 2017-04-30 14:28:37 +03:00
nlrsetjmp.c py/nlrsetjmp: Add check for failed NLR jump. 2017-04-12 13:50:31 +10:00
nlrthumb.c py: Fix nlrthumb.c when DEBUG=1 is defined 2016-07-21 00:54:21 +03:00
nlrx64.c py/nlrx64: Fixes to support Mac OS. 2017-03-08 22:36:02 +11:00
nlrx86.c py/nlrx86: Better check for Zephyr (requires 1.7). 2017-03-26 00:33:23 +03:00
nlrxtensa.c py/nlrxtensa: Convert from assembler to C file with inline asm. 2017-03-06 17:13:16 +11:00
obj.c all: Make more use of mp_raise_{msg,TypeError,ValueError} helpers. 2017-06-15 11:54:41 +10:00
obj.h py/objtype: mp_obj_new_super doesn't need to be public, so inline it. 2017-04-22 12:14:04 +10:00
objarray.c py: Use mp_raise_TypeError/mp_raise_ValueError helpers where possible. 2017-03-28 22:37:26 +11:00
objarray.h py/objarray: Convert mp_uint_t to size_t where appropriate. 2017-02-16 16:51:16 +11:00
objattrtuple.c py/objtuple: Convert mp_uint_t to size_t where appropriate. 2017-02-16 16:51:16 +11:00
objbool.c py/objbool: Make a slight simplification of bool constructor. 2016-09-30 17:02:07 +10:00
objboundmeth.c py/objtype: Implement __call__ handling for an instance w/o heap alloc. 2016-11-22 01:33:55 +03: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/objclosure: Convert mp_uint_t to size_t where appropriate. 2017-02-16 16:51:17 +11:00
objcomplex.c all: Make more use of mp_raise_{msg,TypeError,ValueError} helpers. 2017-06-15 11:54:41 +10:00
objdict.c py: Optimise types for common case where type has a single parent type. 2017-04-12 13:22:21 +10:00
objenumerate.c py: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11:00
objexcept.c py: Optimise types for common case where type has a single parent type. 2017-04-12 13:22:21 +10:00
objexcept.h py/objexcept: Convert mp_uint_t to size_t where appropriate. 2017-02-16 16:51:17 +11:00
objfilter.c py: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11:00
objfloat.c py: Reduce str/repr precision of float numbers when floats are 30-bit. 2017-04-21 16:21:56 +10:00
objfun.c py: Provide mp_decode_uint_skip() to help reduce stack usage. 2017-06-09 13:36:33 +10:00
objfun.h py: Add constant table to bytecode. 2015-11-13 12:49:18 +00:00
objgenerator.c py: Provide mp_decode_uint_skip() to help reduce stack usage. 2017-06-09 13:36:33 +10:00
objgenerator.h py: Move to guarded includes, everywhere in py/ core. 2015-01-01 20:32:09 +00:00
objgetitemiter.c py: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11:00
objint.c py/objint: In to_bytes(), allow length arg to be any int and check sign. 2017-06-15 14:21:02 +10:00
objint.h py/objint: Consolidate mp_obj_new_int_from_float to one implementation. 2017-04-04 16:45:49 +10:00
objint_longlong.c all: Make more use of mp_raise_{msg,TypeError,ValueError} helpers. 2017-06-15 11:54:41 +10:00
objint_mpz.c extmod/moductypes: Fix bigint handling for 32-bit ports. 2017-04-21 16:43:21 +03:00
objlist.c py: Convert mp_uint_t to size_t for tuple/list accessors. 2017-03-29 12:56:17 +11:00
objlist.h py/objlist: Convert mp_uint_t to size_t where appropriate. 2017-02-16 16:51:16 +11:00
objmap.c py/objmap: Convert mp_uint_t to size_t. 2017-03-27 12:19:24 +11:00
objmodule.c py/objmodule: Move module init/deinit code into runtime functions. 2017-01-26 23:30:38 +11:00
objmodule.h py/objmodule: Move module init/deinit code into runtime functions. 2017-01-26 23:30:38 +11:00
objnamedtuple.c py/objnamedtuple: Simplify and remove use of alloca building namedtuple. 2017-06-29 17:40:25 +10:00
objnone.c py/objnone: Use mp_generic_unary_op instead of custom one. 2016-09-19 12:28:55 +10:00
objobject.c py: Use mp_raise_TypeError/mp_raise_ValueError helpers where possible. 2017-03-28 22:37:26 +11:00
objpolyiter.c py: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11:00
objproperty.c py: Get rid of assert() in method argument checking functions. 2016-08-12 22:39:03 +03:00
objrange.c py/objrange: Fix slicing of range when step of slice is negative. 2017-05-18 17:32:42 +10:00
objreversed.c py: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11:00
objset.c py: De-optimise some uses of mp_getiter, so they don't use the C stack. 2017-02-16 19:11:34 +11: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/objstr: Allow to compile with obj-repr D, and unicode disabled. 2017-06-08 00:40:38 +10:00
objstr.h py/objstr: Convert mp_uint_t to size_t (and use int) where appropriate. 2017-02-16 16:51:16 +11:00
objstringio.c py/objstringio: If created from immutable object, follow copy on write policy. 2017-06-09 17:33:01 +03:00
objstringio.h py/objstringio: If created from immutable object, follow copy on write policy. 2017-06-09 17:33:01 +03:00
objstrunicode.c all: Make more use of mp_raise_{msg,TypeError,ValueError} helpers. 2017-06-15 11:54:41 +10:00
objtuple.c py/objtuple: Add support for inplace add (same as normal add). 2017-04-05 12:38:02 +10:00
objtuple.h py: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11:00
objtype.c py: Add LOAD_SUPER_METHOD bytecode to allow heap-free super meth calls. 2017-04-22 23:39:20 +10: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/objzip: Convert mp_uint_t to size_t. 2017-03-30 22:58:08 +11:00
opmethods.c py: Move to guarded includes, everywhere in py/ core. 2015-01-01 20:32:09 +00:00
parse.c py/parse: Simplify handling of errors by raising them directly. 2017-02-24 14:56:37 +11:00
parse.h py/parse: Make mp_parse_node_new_leaf an inline function. 2016-11-15 16:48:48 +11:00
parsenum.c py: Use mp_raise_TypeError/mp_raise_ValueError helpers where possible. 2017-03-28 22:37:26 +11:00
parsenum.h py/parsenum: Use size_t to count bytes, and int for type of base arg. 2016-03-14 22:34:03 +00:00
parsenumbase.c py/parsenum: Fix compiler warnings for no decl and signed comparison. 2016-03-14 22:52:52 +00:00
parsenumbase.h py/parsenum: Use size_t to count bytes, and int for type of base arg. 2016-03-14 22:34:03 +00:00
persistentcode.c py/persistentcode: Allow to compile with complex numbers disabled. 2017-06-08 00:28:28 +10:00
persistentcode.h py: Factor out persistent-code reader into separate files. 2016-11-16 18:13:50 +11:00
py.mk various: Spelling fixes 2017-05-29 11:36:05 +03:00
qstr.c py: Fix wrong assumption that m_renew will not move if shrinking 2016-11-02 23:15:41 +11:00
qstr.h py: Rename __QSTR_EXTRACT flag to NO_QSTR. 2016-06-16 01:42:48 +03:00
qstrdefs.h extmod: Add generic VFS sub-system. 2017-01-27 17:19:06 +11:00
reader.c py: Allow lexer to raise exceptions during construction. 2017-03-14 11:52:05 +11:00
reader.h py: Allow lexer to raise exceptions during construction. 2017-03-14 11:52:05 +11:00
repl.c py: Change mp_uint_t to size_t for mp_obj_str_get_data len arg. 2017-03-29 12:56:45 +11:00
repl.h py, readline: Add tab autocompletion for REPL. 2015-04-29 00:46:26 +01:00
ringbuf.h various: Spelling fixes 2017-05-29 11:36:05 +03:00
runtime.c py/runtime: When init'ing kbd intr exc, use tuple ptr instead of object. 2017-04-10 17:07:26 +10:00
runtime.h py: Add LOAD_SUPER_METHOD bytecode to allow heap-free super meth calls. 2017-04-22 23:39:20 +10:00
runtime0.h py: Add LOAD_SUPER_METHOD bytecode to allow heap-free super meth calls. 2017-04-22 23:39:20 +10:00
runtime_utils.c py/runtime_utils: Fix nanbox build. 2016-04-25 20:03:14 +03:00
scheduler.c py: Add micropython.schedule() function and associated runtime code. 2017-03-20 15:20:26 +11:00
scope.c py/scope: Factor common code to find locals and close over them. 2016-09-30 13:53:00 +10:00
scope.h py/scope: Factor common code to find locals and close over them. 2016-09-30 13:53:00 +10:00
sequence.c py/sequence: Fix boundary errors when slicing with a negative step. 2017-05-18 17:32:42 +10:00
showbc.c py: Add LOAD_SUPER_METHOD bytecode to allow heap-free super meth calls. 2017-04-22 23:39:20 +10: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 py: Add MP_STATE_THREAD to hold state specific to a given thread. 2016-06-28 11:09:31 +01:00
stackctrl.h py/stackctrl: Add mp_stack_set_top() to explicitly set stack top value. 2016-03-07 14:12:24 +07:00
stream.c all: Make more use of mp_raise_{msg,TypeError,ValueError} helpers. 2017-06-15 11:54:41 +10:00
stream.h py/stream: Move ad-hoc ioctl constants to stream.h and rename them. 2016-12-02 16:37:29 +11:00
unicode.c py/unicode: Comment-out unused function unichar_isprint. 2016-12-28 17:50:10 +11:00
unicode.h py: Move to guarded includes, everywhere in py/ core. 2015-01-01 20:32:09 +00:00
vm.c py: Provide mp_decode_uint_skip() to help reduce stack usage. 2017-06-09 13:36:33 +10:00
vmentrytable.h py: Add LOAD_SUPER_METHOD bytecode to allow heap-free super meth calls. 2017-04-22 23:39:20 +10:00
vstr.c py/vstr: Combine vstr_new_size with vstr_new since they are rarely used. 2016-10-14 16:46:34 +11:00
warning.c py: fix null pointer dereference in mpz.c, fix missing va_end in warning.c 2016-10-31 23:21:15 +03:00