summaryrefslogtreecommitdiff
path: root/py/parse.c
AgeCommit message (Collapse)Author
2014-05-25Merge branch 'keep-strings-uninterned' of github.com:pfalcon/micropython ↵Damien George
into pfalcon-keep-strings-uninterned Conflicts: py/parse.c
2014-05-21Tidy up some configuration options.Damien George
MP_ALLOC_* -> MICROPY_ALLOC_* MICROPY_PATH_MAX -> MICROPY_ALLOC_PATH_MAX MICROPY_ENABLE_REPL_HELPERS -> MICROPY_HELPER_REPL MICROPY_ENABLE_LEXER_UNIX -> MICROPY_HELPER_LEXER_UNIX MICROPY_EXTRA_* -> MICROPY_PORT_* See issue #35.
2014-05-10py: Improve handling of memory error in parser.Damien George
Parser shouldn't raise exceptions, so needs to check when memory allocation fails. This patch does that for the initial set up of the parser state. Also, we now put the parser object on the stack. It's small enough to go there instead of on the heap. This partially addresses issue #558.
2014-05-08Draft approach towards resolving ↵Paul Sokolovsky
https://github.com/micropython/micropython/issues/560#issuecomment-42213955
2014-05-06py, parser: Add commented-out code to discard doc strings.Damien George
Doesn't help with RAM reduction because doc strings are interned as soon as they are encountered, which is too soon to do any optimisations on them.
2014-05-05py: Turn down amount of RAM parser and compiler use.Damien George
There are 2 locations in parser, and 1 in compiler, where memory allocation is not precise. In the parser it's the rule stack and result stack, in the compiler it's the array for the identifiers in the current scope. All other mallocs are exact (ie they don't allocate more than is needed). This patch adds tuning options (MP_ALLOC_*) to mpconfig.h for these 3 inexact allocations. The inexact allocations in the parser should actually be close to logarithmic: you need an exponentially larger script (absent pathological cases) to use up more room on the rule and result stacks. As such, the default allocation policy for these is now to start with a modest sized stack, but grow only in small increments. For the identifier arrays in the compiler, these now start out quite small (4 entries, since most functions don't have that many ids), and grow incrementally by 6 (since if you have more ids than 4, you probably have quite a few more, but it wouldn't be exponentially more). Partially addresses issue #560.
2014-05-03Add license header to (almost) all files.Damien George
Blanket wide to all .c and .h files. Some files originating from ST are difficult to deal with (license wise) so it was left out of those. Also merged modpyb.h, modos.h, modstm.h and modtime.h in stmhal/.
2014-04-10py: Check explicitly for memory allocation failure in parser.Damien George
Previously, a failed malloc/realloc would throw an exception, which was not caught. I think it's better to keep the parser free from NLR (exception throwing), hence this patch.
2014-03-17py: Clean up includes.xbe
Remove unnecessary includes. Add includes that improve portability.
2014-03-01py: Implement bit-shift and not operations for mpz.Damien George
Implement not, shl and shr in mpz library. Add function to create mpzs on the stack, used for memory efficiency when rhs is a small int. Factor out code to parse base-prefix of number into a dedicated function.
2014-02-22parse: Refactor parse node encoding to support full range of small ints.Paul Sokolovsky
Based on suggestion by @dpgeorge at https://github.com/micropython/micropython/pull/313
2014-02-21parse: Note that fact that parser's small ints are different than VM small int.Paul Sokolovsky
Specifically, VM's small ints are 31 bit, while parser's only 28. There's already MP_OBJ_FITS_SMALL_INT(), so, for clarity, rename MP_FIT_SMALL_INT() to MP_PARSE_FITS_SMALL_INT().
2014-02-15Implement proper exception type hierarchy.Damien George
Each built-in exception is now a type, with base type BaseException. C exceptions are created by passing a pointer to the exception type to make an instance of. When raising an exception from the VM, an instance is created automatically if an exception type is raised (as opposed to an exception instance). Exception matching (RT_BINARY_OP_EXCEPTION_MATCH) is now proper. Handling of parse error changed to match new exceptions. mp_const_type renamed to mp_type_type for consistency.
2014-02-12Replace global "static" -> "STATIC", to allow "analysis builds". Part 2.Paul Sokolovsky
2014-01-29py: Fix bug with LOAD_METHOD; fix int->machine_int_t for small int.Damien George
LOAD_METHOD bug was: emitbc did not correctly calculate the amount of stack usage for a LOAD_METHOD operation. small int bug was: int was being used to pass small ints, when it should have been machine_int_t.
2014-01-25Implement mp_parse_node_free; print properly repr(string).Damien George
2014-01-25Add parse_node_free_struct() and use it to free parse tree after compilation.Paul Sokolovsky
TODO: Check lexer/parse/compile error path for leaks too.
2014-01-23py: Change macro var args in parser to be C99 compliant.Damien George
2014-01-21Revamp qstrs: they now include length and hash.Damien George
Can now have null bytes in strings. Can define ROM qstrs per port using qstrdefsport.h
2014-01-19py: Add module/function/class name to exceptions.Damien George
Exceptions know source file, line and block name. Also tidy up some debug printing functions and provide a global flag to enable/disable them.
2014-01-18Add source file name and line number to error messages.Damien George
Byte code has a map from byte-code offset to source-code line number, used to give better error messages.
2014-01-15Implement eval.Damien George
2014-01-15Convert parse errors to exceptions.Damien George
Parser no longer prints an error, but instead returns an exception ID and message.
2014-01-12Parse long Python ints properly.Paul Sokolovsky
Long int is something which doesn't fit into SMALL_INT partion of machine_int_t. But it's also something which doesn't fit into machine_int_t in the first place.
2014-01-12py: Improve memory management for parser; add lexer error for bad line cont.Damien George
2013-12-30Put unicode functions in unicode.c, and tidy their names.Damien George
2013-12-29Change memory allocation API to require size for free and realloc.Damien
2013-12-29Parse upper-case hex numbers correctly.Damien
2013-12-21Change object representation from 1 big union to individual structs.Damien
A big change. Micro Python objects are allocated as individual structs with the first element being a pointer to the type information (which is itself an object). This scheme follows CPython. Much more flexible, not necessarily slower, uses same heap memory, and can allocate objects statically. Also change name prefix, from py_ to mp_ (mp for Micro Python).
2013-11-02Add basic complex number support.Damien
2013-10-19Make grammar rules const so the go in .text section.Damien
2013-10-18Implement REPL.Damien
2013-10-12Tidy up SMALL_INT optimisations and CPython compatibility.Damien
2013-10-12Separate out mpy core and unix version.Damien
2013-10-09Improve indent/dedent error checking and reporting.Damien
2013-10-06Optimise typedargslist_name to not create a node if just an id.Damien
2013-10-06Make range of small int 24 bits.Damien
2013-10-05Add support for inline thumb assembly.Damien
2013-10-04Initial commit.Damien