| Commit message (Collapse) | Author | Age |
|
|
|
|
|
| |
Code-info size, block name, source name, n_state and n_exc_stack now use
variable length encoded uints. This saves 7-9 bytes per bytecode
function for most functions.
|
|
|
|
| |
Addressing issue #50, still some way to go yet.
|
|
|
|
| |
See discussion in issue #50.
|
| |
|
| |
|
|
|
|
|
|
| |
This reduces stack usage by 16 words (64 bytes) for stmhal/ port.
See issue #640.
|
|
|
|
|
|
|
| |
This improves stack usage in callers to mp_execute_bytecode2, and is step
forward towards unifying execution interface for function and generators
(which is important because generators don't even support full forms
of arguments passing (keywords, etc.)).
|
| |
|
| |
|
| |
|
|
|
|
| |
bytecode is the more widely used. See issue #590.
|
|
|
|
|
|
|
| |
...to some compilers who can't process 2 zero-sized arrays in structs. It's
never referenced directly anyway.
See disussion on #568 as well.
|
|
|
|
|
|
|
| |
Blanket wide to all .c and .h files. Some files originating from ST are
difficult to deal with (license wise) so it was left out of those.
Also merged modpyb.h, modos.h, modstm.h and modtime.h in stmhal/.
|
|
|
|
| |
Specifically, nlr.h does.
|
| |
|
|
|
|
|
| |
Also make consistent use of MP_OBJ_NOT_SUPPORTED and MP_OBJ_NULL.
This helps a lot in debugging and understanding of function API.
|
| |
|
|
|
|
|
| |
I.e. with its own globals. So, just as for functions, we need to switch
globals when resuming a generator.
|
| |
|
| |
|
|
|
|
|
|
| |
This does not affect code size or performance when debugging turned off.
To address issue #420.
|
|
|
|
|
|
|
|
|
| |
.throw() propagates any exceptions, and .close() swallows them. Yielding
in reponse to .throw(GeneratorExit) is still fatal, and we need to
handle it for .throw() case separately (previously it was handled only
for .close() case).
Obscure corner cases due to test_pep380.py.
|
| |
|
| |
|
|\
| |
| | |
objgenerator: Handle default args to generator functions.
|
| |
| |
| |
| | |
Addresses #397.
|
|/
|
|
| |
Iterators and ducktype objects can now be arguments of yield from.
|
|
|
|
|
|
| |
Pretty much everyone needs to include map.h, since it's such an integral
part of the Micro Python object implementation. Thus, the definitions
are now in obj.h instead. map.h is removed.
|
|
|
|
|
|
|
| |
Mostly just a global search and replace. Except rt_is_true which
becomes mp_obj_is_true.
Still would like to tidy up some of the names, but this will do for now.
|
|
|
|
| |
Caught by CPython test_pep380.py.
|
|
|
|
| |
According to PEP380 and caught by CPython test_pep380.py .
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Addresses issue #388.
|
|
|
|
|
| |
To comply with Python semantics and allow use of mp_obj_is_subclass_fast()
for exception matching.
|
|
|
|
|
|
|
|
|
|
|
| |
Rationale: setting up the stack (state for locals and exceptions) is
really part of the "code", it's the prelude of the function. For
example, native code adjusts the stack pointer on entry to the function.
Native code doesn't need to know n_state for any other reason. So
putting the state size in the bytecode prelude is sensible.
It reduced ROM usage on STM by about 30 bytes :) And makes it easier to
pass information about the bytecode between functions.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Originally, .methods was used for methods in a ROM class, and
locals_dict for methods in a user-created class. That distinction is
unnecessary, and we can use locals_dict for ROM classes now that we have
ROMable maps.
This removes an entry in the bloated mp_obj_type_t struct, saving a word
for each ROM object and each RAM object. ROM objects that have a
methods table (now a locals_dict) need an extra word in total (removed
the methods pointer (1 word), no longer need the sentinel (2 words), but
now need an mp_obj_dict_t wrapper (4 words)). But RAM objects save a
word because they never used the methods entry.
Overall the ROM usage is down by a few hundred bytes, and RAM usage is
down 1 word per user-defined type/class.
There is less code (no need to check 2 tables), and now consistent with
the way ROM modules have their tables initialised.
Efficiency is very close to equivaluent.
|
|
|
|
| |
Addresses issue #377.
|
|
|
|
| |
Just to keep things consistent :)
|
| |
|
| |
|
|
|
|
|
|
| |
Return with value gets converted to StopIteration(value). Implementation
keeps optimizing against creating of possibly unneeded exception objects,
so there're considerable refactoring to implement these features.
|
| |
|
| |
|
| |
|
|
|
|
| |
This is required to properly handle exceptions across yields.
|
|
|
|
| |
Remove unnecessary includes. Add includes that improve portability.
|