| Age | Commit message (Collapse) | Author |
|
|
|
Having a micropython.const identity function, and writing "from micropython
import const" at the start of scripts that use the const feature, allows to
write scripts which are compatible with CPython, and with uPy builds that
don't include const optimisation.
This patch adds such a function and updates the tests to do the import.
|
|
This corresponds to the change in the way exception values are stored on
the Python value stack.
|
|
|
|
|
|
|
|
When an exception is raised and is to be handled by the VM, it is stored
on the Python value stack so the bytecode can access it. CPython stores
3 objects on the stack for each exception: exc type, exc instance and
traceback. uPy followed this approach, but it turns out not to be
necessary. Instead, it is enough to store just the exception instance on
the Python value stack. The only place where the 3 values are needed
explicitly is for the __exit__ handler of a with-statement context, but
for these cases the 3 values can be extracted from the single exception
instance.
This patch removes the need to store 3 values on the stack, and instead
just stores the exception instance.
Code size is reduced by about 50-100 bytes, the compiler and VM are
slightly simpler, generate bytecode is smaller (by 2 bytes for each try
block), and the Python value stack is reduced in size for functions that
handle exceptions.
|
|
Fixes for more pedantic warnings.
|
|
|
|
This uses extension introduced in CPython 3.5: if wbits (dictionary size
code) has value 16 + 8..15, it means that gzip-formatted stream expected.
|
|
|
|
|
|
|
|
This fixes constant substitution so that only standalone identifiers are
replaced with their constant value (if they have one). I.e. don't
replace NAME in expressions like obj.NAME or NAME = expr.
|
|
|
|
LIST_APPEND, MAP_ADD and SET_ADD have been removed, and STORE_COMP has
been added in adaf0d865cd6c81fb352751566460506392ed55f.
|
|
qstrs ids are restricted to fit within 2 bytes already (eg in persistent
bytecode) so it's safe to use a uint16_t to store them in mp_arg_t. And
the flags member only needs a maximum of 2 bytes so can also use uint16_t.
Savings in code size can be significant when many mp_arg_t structs are
used for argument parsing. Eg, this patch reduces stmhal by 480 bytes.
|
|
In CPython, module-level .wrap_socket() function actually doesn't accept
(or document) this param, only SSLContext.wrap_socket() has.
|
|
When the clock is too fast for the i2c slave, it can temporarily hold
down the scl line to signal to the master that it needs to wait. The
master should check the scl line when it is releasing it after
transmitting data, and wait for it to be released.
This change has been tested with a logic analyzer and an i2c slace
implemented on an atmega328p using its twi peripheral, clocked at 8Mhz.
Without the change, the i2c communication works up to aboy 150kHz
frequency, and above that results in the slave stuck in an unresponsive
state. With this change, communication has been tested to work up to
400kHz.
|
|
|
|
|
|
|
|
|
|
vstr_extend will now only return NULL if the vstr is a fixed buffer, which
in this case it is not.
|
|
The issue-stats service is not well maintained and likely the situation
won't improve in the future. See:
https://github.com/hstove/issue_stats/issues/41
https://github.com/hstove/issue_stats/issues/46
|
|
This is required to use mbedTLS versions from various sources, e.g.
mainline vs embedded into Zephyr RTOS.
|
|
Unlike standard keyfile= and certfile=, these accept byte buffer objects
(to not depend on FS implementation).
|
|
|
|
Use mp_obj_int_get_truncated to allow the full 32-bit address range
as first parameter.
|
|
|
|
One can instead lookup __name__ in the modules dict to get the value.
|
|
Use MP_NOINLINE macro to avoid inlining of init_flash_fs. This helps
to keep stack usage of main() low.
|
|
|
|
|
|
So now ticks_ms can count up to the full 30 bits. Fixes issue #2412.
|
|
|
|
With mpy-cross built, tests can now be run by first compiling them to .mpy
files, and then executing the .mpy file. Usage: ./run-tests --via-mpy
|
|
The showbc function now no longer uses the system printf so works
correctly.
|
|
The system printf is no longer used by the core uPy code. Instead, the
platform print stream or DEBUG_printf is used. Using DEBUG_printf in the
showbc functions would mean that the code can't be tested by the test
suite, so use the normal output instead.
This patch also fixes parsing of bytecode-line-number mappings.
|
|
|
|
|
|
qstrs are always null terminated so qstr_str will stay as part of the API.
|
|
UART1 can be used even if the switch is enabled. The schematics for this
board make I2C1 available on PB8/PB9, even though it can also be mapped
to PB6/PB7.
See #2396 and #2427.
|
|
|
|
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.
|
|
With the previous patch combining 3 emit functions into 1, it now makes
sense to also combine the corresponding VM opcodes, which is what this
patch does. This eliminates 2 opcodes which simplifies the VM and reduces
code size, in bytes: bare-arm:44, minimal:64, unix(NDEBUG,x86-64):272,
stmhal:92, esp8266:200. Profiling (with a simple script that creates many
list/dict/set comprehensions) shows no measurable change in performance.
|
|
The 3 kinds of comprehensions are similar enough that merging their emit
functions reduces code size. Decreases in code size in bytes are:
bare-arm:24, minimal:96, unix(NDEBUG,x86-64):328, stmhal:80, esp8266:76.
|
|
Instead of busy-looping waiting for UART input. Not enabled by default,
needs more testing.
|
|
|
|
Based on https://github.com/micropython/micropython/pull/2210 .
|