1. 27 Apr, 2014 2 commits
  2. 24 Apr, 2014 2 commits
  3. 23 Apr, 2014 1 commit
  4. 20 Apr, 2014 2 commits
  5. 17 Apr, 2014 4 commits
    • Damien George's avatar
      py: Rename USE_COMPUTED_GOTOS to USE_COMPUTED_GOTO and enable on stmhal. · 5b65f0c7
      Damien George authored
      On stmhal, computed gotos make the binary about 1k bigger, but makes it
      run faster, and we have the room, so why not.  All tests pass on
      pyboard using computed gotos.
    • Damien George's avatar
      py: Add MP_OBJ_STOP_ITERATION and make good use of it. · ea8d06c3
      Damien George authored
      Also make consistent use of MP_OBJ_NOT_SUPPORTED and MP_OBJ_NULL.
      This helps a lot in debugging and understanding of function API.
    • Damien George's avatar
      py: Merge BINARY_OP_SUBSCR and store_subscr (w/ delete) into subscr. · 729f7b42
      Damien George authored
      mp_obj_t->subscr now does load/store/delete.
    • Damien George's avatar
      py: Tidy up variables in VM, probably fixes subtle bugs. · 66ae8c9f
      Damien George authored
      Things get tricky when using the nlr code to catch exceptions.  Need to
      ensure that the variables (stack layout) in the exception handler are
      the same as in the bit protected by the exception handler.
      Prior to this patch there were a few bugs.  1) The constant
      mp_const_MemoryError_obj was being preloaded to a specific location on
      the stack at the start of the function.  But this location on the stack
      was being overwritten in the opcode loop (since it didn't think that
      variable would ever be referenced again), and so when an exception
      occurred, the variable holding the address of MemoryError was corrupt.
      2) The FOR_ITER opcode detection in the exception handler used sp, which
      may or may not contain the right value coming out of the main opcode
      With this patch there is a clear separation of variables used in the
      opcode loop and in the exception handler (should fix issue (2) above).
      Furthermore, nlr_raise is no longer used in the opcode loop.  Instead,
      it jumps directly into the exception handler.  This tells the C compiler
      more about the possible code flow, and means that it should have the
      same stack layout for the exception handler.  This should fix issue (1)
      above.  Indeed, the generated (ARM) assembler has been checked explicitly,
      and with 'goto exception_handler', the problem with &MemoryError is
      This may now fix problems with rge-sm, and probably many other subtle
      bugs yet to show themselves.  Incidentally, rge-sm now passes on
      pyboard (with a reduced range of integration)!
      Main lesson: nlr is tricky.  Don't use nlr_push unless you know what you
      are doing!  Luckily, it's not used in many places.  Using nlr_raise/jump
      is fine.
  6. 15 Apr, 2014 2 commits
  7. 14 Apr, 2014 2 commits
  8. 13 Apr, 2014 1 commit
    • Damien George's avatar
      py: Remove unique_codes from emitglue.c. Replace with pointers. · df8127a1
      Damien George authored
      Attempt to address issue #386.  unique_code_id's have been removed and
      replaced with a pointer to the "raw code" information.  This pointer is
      stored in the actual byte code (aligned, so the GC can trace it), so
      that raw code (ie byte code, native code and inline assembler) is kept
      only for as long as it is needed.  In memory it's now like a tree: the
      outer module's byte code points directly to its children's raw code.  So
      when the outer code gets freed, if there are no remaining functions that
      need the raw code, then the children's code gets freed as well.
      This is pretty much like CPython does it, except that CPython stores
      indexes in the byte code rather than machine pointers.  These indices
      index the per-function constant table in order to find the relevant
  9. 12 Apr, 2014 1 commit
  10. 11 Apr, 2014 1 commit
    • Damien George's avatar
      py: Change compile order for default positional and keyword args. · 69b89d21
      Damien George authored
      This simplifies the compiler a little, since now it can do 1 pass over
      a function declaration, to determine default arguments.  I would have
      done this originally, but CPython 3.3 somehow had the default keyword
      args compiled before the default position args (even though they appear
      in the other order in the text of the script), and I thought it was
      important to have the same order of execution when evaluating default
      arguments.  CPython 3.4 has changed the order to the more obvious one,
      so we can also change.
  11. 10 Apr, 2014 2 commits
  12. 09 Apr, 2014 2 commits
  13. 08 Apr, 2014 4 commits
  14. 06 Apr, 2014 1 commit
  15. 05 Apr, 2014 3 commits
  16. 04 Apr, 2014 1 commit
  17. 31 Mar, 2014 4 commits
  18. 30 Mar, 2014 5 commits