1. 01 Oct, 2015 1 commit
  2. 26 Jun, 2015 1 commit
  3. 25 Jun, 2015 2 commits
    • Damien George's avatar
      py: Remove mp_load_const_bytes and instead load precreated bytes object. · 59fba2d6
      Damien George authored
      Previous to this patch each time a bytes object was referenced a new
      instance (with the same data) was created.  With this patch a single
      bytes object is created in the compiler and is loaded directly at execute
      time as a true constant (similar to loading bignum and float objects).
      This saves on allocating RAM and means that bytes objects can now be
      used when the memory manager is locked (eg in interrupts).
      
      The MP_BC_LOAD_CONST_BYTES bytecode was removed as part of this.
      
      Generated bytecode is slightly larger due to storing a pointer to the
      bytes object instead of the qstr identifier.
      
      Code size is reduced by about 60 bytes on Thumb2 architectures.
      59fba2d6
    • Damien George's avatar
  4. 20 Jun, 2015 1 commit
    • Damien George's avatar
      py: Use a wrapper to explicitly check self argument of builtin methods. · 06593fb0
      Damien George authored
      Previous to this patch a call such as list.append(1, 2) would lead to a
      seg fault.  This is because list.append is a builtin method and the first
      argument to such methods is always assumed to have the correct type.
      
      Now, when a builtin method is extracted like this it is wrapped in a
      checker object which checks the the type of the first argument before
      calling the builtin function.
      
      This feature is contrelled by MICROPY_BUILTIN_METHOD_CHECK_SELF_ARG and
      is enabled by default.
      
      See issue #1216.
      06593fb0
  5. 13 Jun, 2015 1 commit
  6. 03 Jun, 2015 1 commit
  7. 12 May, 2015 1 commit
    • Damien George's avatar
      py: Convert hash API to use MP_UNARY_OP_HASH instead of ad-hoc function. · c2a4e4ef
      Damien George authored
      Hashing is now done using mp_unary_op function with MP_UNARY_OP_HASH as
      the operator argument.  Hashing for int, str and bytes still go via
      fast-path in mp_unary_op since they are the most common objects which
      need to be hashed.
      
      This lead to quite a bit of code cleanup, and should be more efficient
      if anything.  It saves 176 bytes code space on Thumb2, and 360 bytes on
      x86.
      
      The only loss is that the error message "unhashable type" is now the
      more generic "unsupported type for __hash__".
      c2a4e4ef
  8. 09 May, 2015 2 commits
    • Paul Sokolovsky's avatar
      runtime: Add TODO for mp_resume() on handling .close(). · 4a60cac9
      Paul Sokolovsky authored
      Exceptions in .close() should be ignored (dumped to sys.stderr, not
      propagated), but in uPy, they are propagated. Fix would require
      nlr-wrapping .close() call, which is expensive. Bu on the other hand,
      .close() is not called often, so maybe that's not too bad (depends,
      if it's finally called and that causes stack overflow, there's nothing
      good in that). And yet on another hand, .close() can be implemented to
      catch exceptions on its side, and that should be the right choice.
      4a60cac9
    • Paul Sokolovsky's avatar
      py: iternext() may not return MP_OBJ_NULL, only MP_OBJ_STOP_ITERATION. · 4ed7b7f7
      Paul Sokolovsky authored
      Testing for incorrect value led to premature termination of generator
      containing yield from for such iterator (e.g. "yield from [1, 2]").
      4ed7b7f7
  9. 16 Apr, 2015 1 commit
  10. 11 Apr, 2015 1 commit
  11. 02 Apr, 2015 2 commits
  12. 21 Mar, 2015 1 commit
    • Damien George's avatar
      py: Combine duplicated code that converts members from a lookup. · 55b74d1f
      Damien George authored
      Despite initial guess, this code factoring does not hamper performance.
      In fact it seems to improve speed by a little: running pystone(1.2) on
      pyboard (which gives a very stable result) this patch takes pystones
      from 1729.51 up to 1742.16.  Also, pystones on x64 increase by around
      the same proportion (but it's much noisier).
      
      Taking a look at the generated machine code, stack usage with this patch
      is unchanged, and call is tail-optimised with all arguments in
      registers.  Code size decreases by about 50 bytes on Thumb2 archs.
      55b74d1f
  13. 20 Mar, 2015 1 commit
  14. 03 Mar, 2015 1 commit
  15. 15 Feb, 2015 1 commit
  16. 08 Feb, 2015 1 commit
    • 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
  17. 07 Feb, 2015 1 commit
    • Damien George's avatar
      py: Protect mp_parse and mp_compile with nlr push/pop block. · 0bfc7638
      Damien George authored
      To enable parsing constants more efficiently, mp_parse should be allowed
      to raise an exception, and mp_compile can already raise a MemoryError.
      So these functions need to be protected by an nlr push/pop block.
      
      This patch adds that feature in all places.  This allows to simplify how
      mp_parse and mp_compile are called: they now raise an exception if they
      have an error and so explicit checking is not needed anymore.
      0bfc7638
  18. 27 Jan, 2015 1 commit
    • Damien George's avatar
      py: Specify unary/binary op name in TypeError error message. · a5efcd47
      Damien George authored
      Eg, "() + 1" now tells you that __add__ is not supported for tuple and
      int types (before it just said the generic "binary operator").  We reuse
      the table of names for slot lookup because it would be a waste of code
      space to store the pretty name for each operator.
      a5efcd47
  19. 20 Jan, 2015 1 commit
  20. 16 Jan, 2015 1 commit
  21. 07 Jan, 2015 1 commit
  22. 01 Jan, 2015 1 commit
  23. 21 Dec, 2014 1 commit
  24. 09 Dec, 2014 1 commit
    • Damien George's avatar
      py: Allow builtins to be overridden. · 78d702c3
      Damien George authored
      This patch adds a configuration option (MICROPY_CAN_OVERRIDE_BUILTINS)
      which, when enabled, allows to override all names within the builtins
      module.  A builtins override dict is created the first time the user
      assigns to a name in the builtins model, and then that dict is searched
      first on subsequent lookups.  Note that this implementation doesn't
      allow deleting of names.
      
      This patch also does some refactoring of builtins code, creating the
      modbuiltins.c file.
      
      Addresses issue #959.
      78d702c3
  25. 05 Dec, 2014 1 commit
    • Damien George's avatar
      py: Optimise lexer by exposing lexer type. · a4c52c5a
      Damien George authored
      mp_lexer_t type is exposed, mp_token_t type is removed, and simple lexer
      functions (like checking current token kind) are now inlined.
      
      This saves 784 bytes ROM on 32-bit unix, 348 bytes on stmhal, and 460
      bytes on bare-arm.  It also saves a tiny bit of RAM since mp_lexer_t
      is a bit smaller.  Also will run a bit more efficiently.
      a4c52c5a
  26. 06 Nov, 2014 1 commit
  27. 02 Nov, 2014 1 commit
  28. 25 Oct, 2014 3 commits
  29. 23 Oct, 2014 1 commit
  30. 09 Oct, 2014 1 commit
  31. 07 Oct, 2014 1 commit
  32. 05 Oct, 2014 1 commit
    • Damien George's avatar
      py: Implement proper context save/restore for eval/exec; factor code. · c4d0868d
      Damien George authored
      This has benefits all round: code factoring for parse/compile/execute,
      proper context save/restore for exec, allow to sepcify globals/locals
      for eval, and reduced ROM usage by >100 bytes on stmhal and unix.
      
      Also, the call to mp_parse_compile_execute is tail call optimised for
      the import code, so it doesn't increase stack memory usage.
      c4d0868d
  33. 03 Oct, 2014 1 commit
  34. 25 Sep, 2014 2 commits