1. 21 Sep, 2016 1 commit
  2. 02 Sep, 2016 1 commit
  3. 12 Aug, 2016 1 commit
  4. 28 Jun, 2016 1 commit
  5. 07 May, 2016 1 commit
  6. 21 Apr, 2016 1 commit
  7. 14 Mar, 2016 1 commit
  8. 29 Jan, 2016 1 commit
    • Paul Sokolovsky's avatar
      py/runtime: mp_stack_ctrl_init() should be called immediately on startup. · d3b1f0b6
      Paul Sokolovsky authored
      Calling it from mp_init() is too late for some ports (like Unix), and leads
      to incomplete stack frame being captured, with following GC issues. So, now
      each port should call mp_stack_ctrl_init() on its own, ASAP after startup,
      and taking special precautions so it really was called before stack variables
      get allocated (because if such variable with a pointer is missed, it may lead
      to over-collecting (typical symptom is segfaulting)).
  9. 11 Jan, 2016 1 commit
  10. 08 Jan, 2016 1 commit
  11. 26 Dec, 2015 1 commit
    • Damien George's avatar
      py: Be more restrictive binding self when looking up instance attrs. · 78913211
      Damien George authored
      When looking up and extracting an attribute of an instance, some
      attributes must bind self as the first argument to make a working method
      call.  Previously to this patch, any attribute that was callable had self
      bound as the first argument.  But Python specs require the check to be
      more restrictive, and only functions, closures and generators should have
      self bound as the first argument
      Addresses issue #1675.
  12. 18 Dec, 2015 1 commit
    • Damien George's avatar
      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.
  13. 10 Dec, 2015 1 commit
    • Damien George's avatar
      py: Make UNARY_OP_NOT a first-class op, to agree with Py not semantics. · bdbe8c9a
      Damien George authored
      Fixes #1684 and makes "not" match Python semantics.  The code is also
      simplified (the separate MP_BC_NOT opcode is removed) and the patch saves
      68 bytes for bare-arm/ and 52 bytes for minimal/.
      Previously "not x" was implemented as !mp_unary_op(x, MP_UNARY_OP_BOOL),
      so any given object only needs to implement MP_UNARY_OP_BOOL (and the VM
      had a special opcode to do the ! bit).
      With this patch "not x" is implemented as mp_unary_op(x, MP_UNARY_OP_NOT),
      but this operation is caught at the start of mp_unary_op and dispatched as
      !mp_obj_is_true(x).  mp_obj_is_true has special logic to test for
      truthness, and is the correct way to handle the not operation.
  14. 09 Dec, 2015 1 commit
  15. 03 Dec, 2015 1 commit
  16. 29 Nov, 2015 1 commit
    • Damien George's avatar
      py: Wrap all obj-ptr conversions in MP_OBJ_TO_PTR/MP_OBJ_FROM_PTR. · 999cedb9
      Damien George authored
      This allows the mp_obj_t type to be configured to something other than a
      pointer-sized primitive type.
      This patch also includes additional changes to allow the code to compile
      when sizeof(mp_uint_t) != sizeof(void*), such as using size_t instead of
      mp_uint_t, and various casts.
  17. 20 Oct, 2015 1 commit
  18. 11 Oct, 2015 1 commit
  19. 01 Oct, 2015 2 commits
  20. 26 Jun, 2015 1 commit
  21. 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.
    • Damien George's avatar
  22. 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.
  23. 13 Jun, 2015 1 commit
  24. 03 Jun, 2015 1 commit
  25. 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
      The only loss is that the error message "unhashable type" is now the
      more generic "unsupported type for __hash__".
  26. 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.
    • 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]").
  27. 16 Apr, 2015 1 commit
  28. 11 Apr, 2015 1 commit
  29. 02 Apr, 2015 2 commits
  30. 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.
  31. 20 Mar, 2015 1 commit
  32. 03 Mar, 2015 1 commit
  33. 15 Feb, 2015 1 commit
  34. 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.
  35. 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.
  36. 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.