Skip to content
First-class REPL, ussl module, machine module for WiPy, stuffed-floats

This release brings first-class REPL support, which now has tab completion,
auto-indent, paste mode, history and _ to hold the last computed value.
There is a new ussl module, and one can now build a standalone unix binary.
The new machine API is implemented in cc3200, with the machine module and
additions to time and os modules.  stmhal contains the beginnings of this
new API, while still retaining full backwards compatibility with the original
pyb API.  unix also includes the new time functions, sleep_ms, sleep_us,
ticks_ms, ticks_us and ticks_diff.  A new object representation is available
which stores single-precision floats within a machine word (using 30-bit
precision), and allows to use float objects without the heap (not enabled in
any port).  There are also bug fixes and general improvements.

py core:
- put compiler state on the C stack
- objrange: bugfix for range_subscr() when index is a slice object
- parsenum: provide detailed error for int parsing with escaped bytes
- mpz: raise NotImplError instead of failing assertion
- mpz: force rhs of mpz_shl_inpl/mpz_shr_inpl to be unsigned
- mpz: fix bignum anding of large negative with smaller positive int
- catch all cases of integer (big and small) division by zero
- allocate parse nodes in chunks to reduce fragmentation and RAM use
- allow to enable inline assembler without native emitter
- fix edge case when constant-folding negation of integer
- emitnative: raise ViperTypeError for unsupported unary ops
- don't generate unnecessary parse nodes for assignment or kwargs
- factor logic when creating parse node from and-rule
- makeqstrdata.py: catch and report case of empty input file
- rename MP_BOOL() to mp_obj_new_bool() for consistency in naming
- add paste mode to friendly REPL, entered via CTRL-E
- rename "Micro Python" to "MicroPython" in REPL, help, readme's and misc
- objarray: allow to create array of void pointers, as extension to CPython
- move constant folding from compiler to parser
- make parser error handling cleaner, less spaghetti-like
- allow to to build MicroPython as a static library
- add support to call __init__ from a builtin module on first import
- implement ptr32 load and store in viper emitter
- fix calc of qstr memory usage, due to new qstr chunk allocation
- remove dependency on printf/fwrite in mp_plat_print
- fix with+for+return bug by popping for-iter when unwinding exc stack
- add option for inline assembler to support ARMv7-M instructions
- add support for _ in REPL to hold last computed value
- stream: allow to reuse is_nonblocking_error()
- add lsl/lsr/asr opcode support to inline Thumb2 assembler
- add mp_obj_is_float function (macro) and use it where appropriate
- move float e/pi consts to objfloat and make mp_obj_float_t private
- make float representation configurable with object representation
- add object repr "C", where 30-bit floats are stuffed in obj word
- nlrthumb: make compatible with Cortex-M0 (ARMv6M instr set)

extmod:
- add modussl, an SSL socket wrapper module based on axTLS

lib:
- axtls: add axtls git submodule, dependency of modussl
- libffi: add libffi as a submodule
- mp-readline: add n_chars argument to mp_hal_erase_line_from_cursor
- make netutils.h available to all ports by default

drivers:
- sdcard: allow up to 5 retries to initialise SD card

tools:
- upip: update to 0.5.9
- pyboard: add -c argument to run a program passed as a string

tests:
- wipy: improve robustness of time test
- wipy: improve robustness of rtc_irq test
- wipy: add machine module tests
- test slicing a range that does not start at zero
- add further tests for mpz code
- allow tests to pass against CPython 3.5
- add test for evaluation order of dictionary key/value pairs
- in pyb RTC tests, check wakeup register values
- add more tests for viper 16/32-bit load/store, and ellipsis
- jni: start adding modjni tests
- extmod: add tests for sleep_ms/us(), ticks_ms/us/diff()

unix port:
- modjni: new_jobject(): Handle null reference
- modjni: call_method(): If name doesn't match, cleanup via goto next_method
- modjni: call_method: Better resource release
- modjni: call_method: Delete done local references in loop
- modjni: implement len() for objects with java.util.List interface
- modjni: fix method argument matching
- modjni: propagate Java exceptions on list access
- modjni: convert Java's IndexOutOfBoundsException to Python's IndexError
- modjni: jobject.__str__/__repr__: Return Java .toString() value
- modjni: jclass.__str__/__repr__: Return Java .toString() value
- add support for building axtls dependency lib
- modjni: after Call*Method(), Java exception should always be checked
- modjni: allow to access fields of objects
- modjni: py2jvalue: Support bool and None values
- modsocket: fix usage of pointers to locals outside scope
- add exit and paste-mode hints to shell startup banner
- modtermios: tcsetattr: if 0 passed for "when" param, treat as TCSANOW
- modjni: call_method: check for Java exception after method return
- modjni: add iteration support for Java List objects
- allow to build against Android down to 1.5
- modos: add statvfs() function
- unix_mphal: implement HAL_Delay() and HAL_GetTick()
- modtime: implement sleep_ms(), sleep_us()
- modtime: implement ticks_ms(), ticks_us() and ticks_diff()
- modos: android Bionic lacks statvfs(), has BSD statfs()

stmhal port:
- in RTC.wakeup, fix setting of wucksel to get correct period
- fix RTC.wakeup so it correctly calculates WUT for large periods
- fix USB CDC-only mode under Windows
- enable REPL auto indent; document paste mode in help()
- allow to set bits resolution for DAC; 8 is default, can have 12
- make USB serial number actually be unique
- early version of machine module for stmhal
- add sleep_{ms,us} and ticks_{ms,us,cpu,diff} to time module
- implement os.dupterm (was pyb.repl_uart)
- uart: if char is not received within timeout, return EAGAIN error
- bring Pin class close to new machine module specification
- rtc: init uses YMD rather than backup register to detect powerup
- enable "all special methods" configuration option

cc3200 port:
- new irq API, affects all classes that provide the irq method
- new WLAN API including test
- implement support for os.dupterm()
- rename pyb module to machine
- disable uheapq and uhashlib
- make auth param positional in wlan.connect
- always reset WLAN after setting the mode
- wiPy SW v1.0.0 release
- in scan results rename 'auth' field to 'sec'
- create wipy module, remove HeartBeat class
- increase stack sizes a bit
- refactor network module to make the server a propper object
- WLAN class can retrieve the existing instance
- enable REPL autoindent
- uart.read() returns EGAIN if no chars available
- make socket.listen([backlog]) compliant with Python 3.5
- enable "all special methods" configuration option
- bump version to 1.1.0

docs:
- update esp8266 documentation to match the code
- describe properly how MCU can be woken from pyb.standby() state
- wipy: update all WiPy docs to reflect the new API
- wipy: add wipy and network.server documentation
- wipy: add wipy tutorials section
- wipy: add usocket and ussl modules' documentation
- wipy: several corrections to the classes in the machine module
- wipy: remove remaining references to 'af', which is now 'alt'
- wipy: add more tutorials and examples

misc:
- travis: build "deplibs" in unix port
- README: document "Ctrl-D" shell exit
- README: document how to enable/build external dependencies