Skip to content
Snippets Groups Projects
  1. Feb 17, 2017
    • Damien George's avatar
    • Damien George's avatar
      py: Do adjacent str/bytes literal concatenation in lexer, not compiler. · 534b7c36
      Damien George authored
      It's much more efficient in RAM and code size to do implicit literal string
      concatenation in the lexer, as opposed to the compiler.
      
      RAM usage is reduced because the concatenation can be done right away in the
      tokeniser by just accumulating the string/bytes literals into the lexer's
      vstr.  Prior to this patch adjacent strings/bytes would create a parse tree
      (one node per string/bytes) and then in the compiler a whole new chunk of
      memory was allocated to store the concatenated string, which used more than
      double the memory compared to just accumulating in the lexer.
      
      This patch also significantly reduces code size:
      
      bare-arm: -204
      minimal:  -204
      unix x64: -328
      stmhal:   -208
      esp8266:  -284
      cc3200:   -224
      534b7c36
    • Damien George's avatar
      py/lexer: Simplify handling of line-continuation error. · 773278ec
      Damien George authored
      Previous to this patch there was an explicit check for errors with line
      continuation (where backslash was not immediately followed by a newline).
      
      But this check is not necessary: if there is an error then the remaining
      logic of the tokeniser will reject the backslash and correctly produce a
      syntax error.
      773278ec
    • Damien George's avatar
      py/lexer: Use strcmp to make keyword searching more efficient. · ae436797
      Damien George authored
      Since the table of keywords is sorted, we can use strcmp to do the search
      and stop part way through the search if the comparison is less-than.
      
      Because all tokens that are names are subject to this search, this
      optimisation will improve the overall speed of the lexer when processing
      a script.
      
      The change also decreases code size by a little bit because we now use
      strcmp instead of the custom str_strn_equal function.
      ae436797
  2. Feb 16, 2017
  3. Jan 30, 2017
  4. Jan 27, 2017
    • Damien George's avatar
      extmod: Add generic VFS sub-system. · dcb9ea72
      Damien George authored
      This provides mp_vfs_XXX functions (eg mount, open, listdir) which are
      agnostic to the underlying filesystem type, and just require an object with
      the relevant filesystem-like methods (eg .mount, .open, .listidr) which can
      then be mounted.
      
      These mp_vfs_XXX functions would typically be used by a port to implement
      the "uos" module, and mp_vfs_open would be the builtin open function.
      
      This feature is controlled by MICROPY_VFS, disabled by default.
      dcb9ea72
  5. Dec 21, 2016
  6. Nov 16, 2016
  7. Oct 12, 2016
    • Damien George's avatar
      py/lexer: Remove unnecessary code, and unreachable code. · 31101d91
      Damien George authored
      Setting emit_dent=0 is unnecessary because arriving in that part of the
      if-logic will guarantee that emit_dent is already zero.
      
      The block to check indent_top(lex)>0 is unreachable because a newline is
      always inserted an the end of the input stream, and hence dedents are
      always processed before EOF.
      31101d91
  8. Sep 19, 2016
    • Damien George's avatar
      py/vstr: Remove vstr.had_error flag and inline basic vstr functions. · 5da0d29d
      Damien George authored
      The vstr.had_error flag was a relic from the very early days which assumed
      that the malloc functions (eg m_new, m_renew) returned NULL if they failed
      to allocate.  But that's no longer the case: these functions will raise an
      exception if they fail.
      
      Since it was impossible for had_error to be set, this patch introduces no
      change in behaviour.
      
      An alternative option would be to change the malloc calls to the _maybe
      variants, which return NULL instead of raising, but then a lot of code
      will need to explicitly check if the vstr had an error and raise if it
      did.
      
      The code-size savings for this patch are, in bytes: bare-arm:188,
      minimal:456, unix(NDEBUG,x86-64):368, stmhal:228, esp8266:360.
      5da0d29d
  9. May 20, 2016
  10. Apr 13, 2016
    • pohmelie's avatar
      py: add async/await/async for/async with syntax · 81ebba7e
      pohmelie authored
      They are sugar for marking function as generator, "yield from"
      and pep492 python "semantically equivalents" respectively.
      
      @dpgeorge was the original author of this patch, but @pohmelie made
      changes to implement `async for` and `async with`.
      81ebba7e
  11. Feb 25, 2016
    • Damien George's avatar
      py: Add MICROPY_DYNAMIC_COMPILER option to config compiler at runtime. · ea235204
      Damien George authored
      This new compile-time option allows to make the bytecode compiler
      configurable at runtime by setting the fields in the mp_dynamic_compiler
      structure.  By using this feature, the compiler can generate bytecode
      that targets any MicroPython runtime/VM, regardless of the host and
      target compile-time settings.
      
      Options so far that fall under this dynamic setting are:
      - maximum number of bits that a small int can hold;
      - whether caching of lookups is used in the bytecode;
      - whether to use unicode strings or not (lexer behaviour differs, and
        therefore generated string constants differ).
      ea235204
  12. Dec 18, 2015
    • Damien George's avatar
      py: Add MICROPY_ENABLE_COMPILER and MICROPY_PY_BUILTINS_EVAL_EXEC opts. · dd5353a4
      Damien George authored
      MICROPY_ENABLE_COMPILER can be used to enable/disable the entire compiler,
      which is useful when only loading of pre-compiled bytecode is supported.
      It is enabled by default.
      
      MICROPY_PY_BUILTINS_EVAL_EXEC controls support of eval and exec builtin
      functions.  By default they are only included if MICROPY_ENABLE_COMPILER
      is enabled.
      
      Disabling both options saves about 40k of code size on 32-bit x86.
      dd5353a4
  13. Sep 07, 2015
  14. Jul 23, 2015
  15. Jun 22, 2015
  16. Jun 09, 2015
  17. May 20, 2015
  18. Mar 19, 2015
  19. Feb 08, 2015
    • Damien George's avatar
      py: Parse big-int/float/imag constants directly in parser. · 7d414a1b
      Damien George authored
      Previous to this patch, a big-int, float or imag constant was interned
      (made into a qstr) and then parsed at runtime to create an object each
      time it was needed.  This is wasteful in RAM and not efficient.  Now,
      these constants are parsed straight away in the parser and turned into
      objects.  This allows constants with large numbers of digits (so
      addresses issue #1103) and takes us a step closer to #722.
      7d414a1b
  20. Jan 30, 2015
  21. Jan 28, 2015
  22. Jan 16, 2015
  23. Jan 07, 2015
  24. Jan 01, 2015
  25. Dec 05, 2014
  26. Oct 09, 2014
Loading