circuitpython/py
Damien George 5255255fb9 py: Create str/bytes objects in the parser, not the compiler.
Previous to this patch any non-interned str/bytes objects would create a
special parse node that held a copy of the str/bytes data.  Then in the
compiler this data would be turned into a str/bytes object.  This actually
lead to 2 copies of the data, one in the parse node and one in the object.
The parse node's copy of the data would be freed at the end of the compile
stage but nevertheless it meant that the peak memory usage of the
parse/compile stage was higher than it needed to be (by an amount equal to
the number of bytes in all the non-interned str/bytes objects).

This patch changes the behaviour so that str/bytes objects are created
directly in the parser and the object stored in a const-object parse node
(which already exists for bignum, float and complex const objects).  This
reduces peak RAM usage of the parse/compile stage, simplifies the parser
and compiler, and reduces code size by about 170 bytes on Thumb2 archs,
and by about 300 bytes on Xtensa archs.
2017-02-24 13:43:43 +11:00
..
argcheck.c py: Use mp_raise_msg helper function where appropriate. 2016-10-17 12:17:37 +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 py/asm: Remove need for dummy_data when doing initial assembler passes. 2016-12-09 22:50:58 +11: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
bc0.h py: Allow bytecode/native to put iter_buf on stack for simple for loops. 2017-02-16 18:38:06 +11:00
bc.c py: Use mp_raise_msg helper function where appropriate. 2016-10-17 12:17:37 +11:00
bc.h py/showbc: Make sure to set the const_table before printing bytecode. 2017-01-27 12:34:09 +11:00
binary.c py/binary: mp_binary_get_size: Raise error on unsupported typecodes. 2017-01-17 22:53:06 +03: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: Use mp_raise_msg helper function where appropriate. 2016-10-17 12:17:37 +11:00
builtinhelp.c py/builtinhelp: Implement help('modules') to list available modules. 2017-01-22 12:12:54 +11:00
builtinimport.c py: Move weak-link map to objmodule.c, and expose module maps as public. 2017-01-22 11:59:29 +11:00
compile.c py: Create str/bytes objects in the parser, not the compiler. 2017-02-24 13:43:43 +11:00
compile.h py: Allow inline-assembler emitter to be generic. 2016-12-09 17:06:21 +11:00
emit.h py: Remove unused "use_stack" argument from for_iter_end emit function. 2017-02-16 18:38:06 +11:00
emitbc.c py: Remove unused "use_stack" argument from for_iter_end emit function. 2017-02-16 18:38:06 +11: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: Remove unused "use_stack" argument from for_iter_end emit function. 2017-02-16 18:38:06 +11:00
formatfloat.c py/formatfloat: Remove unreachable code. 2017-01-19 23:32:16 +11: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: Allow to stat and import frozen mpy files using new frozen "VFS". 2016-05-23 12:42:23 +01:00
frozenmod.h py/{builtinimport,frozenmod}: Rework frozen modules support to support packages. 2016-05-21 21:38:50 +03:00
gc.c py/gc: Add MICROPY_GC_CONSERVATIVE_CLEAR option to always zero memory. 2016-08-26 15:35:26 +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/grammar: Remove unused rule. 2017-02-17 12:48:45 +11:00
lexer.c py/lexer: Convert mp_uint_t to size_t where appropriate. 2017-02-17 12:44:24 +11: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: Use python 2.6 syntax for set creation. 2016-09-09 23:01:23 +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: Change mp_uint_t to size_t where appropriate. 2017-02-08 11:00:15 +11:00
misc.h cc3200: Re-add support for UART REPL (MICROPY_STDIO_UART setting). 2016-12-27 01:05:37 +03:00
mkenv.mk py: Move frozen bytecode Makefile rules from ports to common mk files. 2016-11-08 14:28:30 +11:00
mkrules.mk py/mkrules.mk: Add MPY_CROSS_FLAGS option to pass flags to mpy-cross. 2017-01-05 15:51:36 +11:00
modarray.c all: Remove 'name' member from mp_obj_module_t struct. 2016-09-22 00:23:16 +10:00
modbuiltins.c py: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11: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: Add mp_raise_OSError(errno) helper function. 2016-10-07 13:31:59 +11:00
modmath.c py: Add MICROPY_FLOAT_CONST macro for defining float constants. 2016-11-03 12:33:01 +11:00
modmicropython.c py/modmicropython: Add micropython.opt_level([value]) function. 2016-10-11 10:56:22 +11:00
modstruct.c py/binary: mp_binary_get_size: Raise error on unsupported typecodes. 2017-01-17 22:53:06 +03:00
modsys.c all: Remove 'name' member from mp_obj_module_t struct. 2016-09-22 00:23:16 +10:00
modthread.c py/modthread: Use system-provided mutexs for _thread locks. 2017-02-15 11:28:02 +11:00
moduerrno.c py/moduerrno: Make list of errno codes configurable. 2017-02-22 12:58:11 +11:00
mpconfig.h py/moduerrno: Make uerrno.errorcode dict configurable. 2017-02-22 12:58:11 +11:00
mperrno.h py/moduerrno: Add ECONNREFUSED, one of frequent networking errors. 2016-05-28 00:17:19 +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: Add assertion for, and comment about, valid base values. 2016-12-28 12:45:33 +11:00
mpprint.h lib/utils/pyhelp.c: Use mp_printf() instead of printf() 2016-10-21 18:30:58 +11:00
mpstate.c py: Add MICROPY_DYNAMIC_COMPILER option to config compiler at runtime. 2016-02-25 10:05:46 +00:00
mpstate.h extmod: Remove MICROPY_FSUSERMOUNT and related files. 2017-01-30 12:26:07 +11:00
mpthread.h py/mpthread: Include mpstate.h when defining GIL macros. 2016-06-28 11:28:52 +01:00
mpz.c py/mpz: Change type of "base" args from mp_uint_t to unsigned int. 2017-02-16 16:51:16 +11: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: Optimise storage of iterator so it takes only 4 slots on Py stack. 2017-02-16 18:38:06 +11:00
nlr.h py/nlrsetjmp: Update to take into account new location of nlr_top. 2016-06-28 11:28:52 +01:00
nlrsetjmp.c py/nlrsetjmp: Update to take into account new location of nlr_top. 2016-06-28 11:28:52 +01:00
nlrthumb.c py: Fix nlrthumb.c when DEBUG=1 is defined 2016-07-21 00:54:21 +03:00
nlrx64.S py/nlr: Fix execstack builds for ARM. 2017-02-08 11:12:26 +11:00
nlrx86.S py/nlr: Fix execstack builds for ARM. 2017-02-08 11:12:26 +11:00
nlrxtensa.S py/nlr: Fix execstack builds for ARM. 2017-02-08 11:12:26 +11:00
obj.c py: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11:00
obj.h py: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11:00
objarray.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
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 py/objcomplex: Fix typo in ternary expression. 2017-02-04 00:23:56 +11:00
objdict.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
objenumerate.c py: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11:00
objexcept.c py/objexcept: Convert mp_uint_t to size_t where appropriate. 2017-02-16 16:51:17 +11: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/objfloat: Raise ZeroDivisionError for 0 to negative power. 2017-02-03 00:01:37 +11:00
objfun.c py/objfun: Convert mp_uint_t to size_t where appropriate. 2017-02-16 16:51:16 +11:00
objfun.h py: Add constant table to bytecode. 2015-11-13 12:49:18 +00:00
objgenerator.c py: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11: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_longlong.c py/objint: Convert mp_uint_t to size_t where appropriate. 2017-02-16 16:51:17 +11:00
objint_mpz.c py/objint: Convert mp_uint_t to size_t where appropriate. 2017-02-16 16:51:17 +11:00
objint.c py/objint: Convert mp_uint_t to size_t where appropriate. 2017-02-16 16:51:17 +11:00
objint.h py: Added optimised support for 3-argument calls to builtin.pow() 2017-02-02 22:23:10 +03:00
objlist.c py/objlist: For list slice assignment, allow RHS to be a tuple or list. 2017-02-20 15:09:59 +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: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +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: Use mp_raise_msg helper function where appropriate. 2016-10-17 12:17:37 +11: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_msg helper function where appropriate. 2016-10-17 12:17:37 +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: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11: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: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11: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: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11:00
objstringio.h extmod/modujson: Implement ujson.load() to load JSON from a stream. 2016-10-13 11:46:14 +11:00
objstrunicode.c py: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11:00
objtuple.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
objtuple.h py: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11:00
objtype.c py: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11: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: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +11:00
opmethods.c py: Move to guarded includes, everywhere in py/ core. 2015-01-01 20:32:09 +00:00
parse.c py: Create str/bytes objects in the parser, not the compiler. 2017-02-24 13:43:43 +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/parsenum: Fix warning for signed/unsigned comparison. 2016-12-28 12:25:00 +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: Bump .mpy version due to change in bytecode. 2017-02-17 00:19:34 +11:00
persistentcode.h py: Factor out persistent-code reader into separate files. 2016-11-16 18:13:50 +11:00
py.mk extmod: Remove MICROPY_FSUSERMOUNT and related files. 2017-01-30 12:26:07 +11: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/lexer: Rewrite mp_lexer_new_from_fd in terms of mp_reader. 2016-11-16 18:13:51 +11:00
reader.h py/lexer: Rewrite mp_lexer_new_from_fd in terms of mp_reader. 2016-11-16 18:13:51 +11:00
repl.c py: Declare constant data as properly constant. 2016-05-20 12:46:20 +01:00
repl.h py, readline: Add tab autocompletion for REPL. 2015-04-29 00:46:26 +01:00
ringbuf.h py/ringbuf.h: Add reusable ring buffer class. 2016-03-30 14:48:31 +03:00
runtime0.h py: Optimise storage of iterator so it takes only 4 slots on Py stack. 2017-02-16 18:38:06 +11:00
runtime_utils.c py/runtime_utils: Fix nanbox build. 2016-04-25 20:03:14 +03:00
runtime.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
runtime.h py: Add iter_buf to getiter type method. 2017-02-16 18:38:06 +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 reverse slicing of lists. 2016-10-30 15:54:19 -02:00
showbc.c py: Allow bytecode/native to put iter_buf on stack for simple for loops. 2017-02-16 18:38:06 +11: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: Remove readall() method, which is equivalent to read() w/o args. 2016-11-14 00:24:22 +03: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: Optimise storage of iterator so it takes only 4 slots on Py stack. 2017-02-16 18:38:06 +11:00
vmentrytable.h py: Allow bytecode/native to put iter_buf on stack for simple for loops. 2017-02-16 18:38:06 +11: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