summaryrefslogtreecommitdiffstatshomepage
path: root/py
Commit message (Collapse)AuthorAge
* py/compile: Optimise list/dict/set comprehensions to use stack iter.Damien George2017-02-16
|
* py/runtime: Optimise case of identity iterator so it doesn't alloc RAM.Damien George2017-02-16
|
* py: Remove unused "use_stack" argument from for_iter_end emit function.Damien George2017-02-16
|
* py: Optimise storage of iterator so it takes only 4 slots on Py stack.Damien George2017-02-16
|
* py: Make FOR_ITER opcode pop 1+4 slots from the stack when finished.Damien George2017-02-16
| | | | The extra 4 slots correspond to the iterator object stored on the stack.
* py: Allow bytecode/native to put iter_buf on stack for simple for loops.Damien George2017-02-16
| | | | | So that the "for x in it: ..." statement can now work without using the heap (so long as the iterator argument fits in an iter_buf structure).
* py: Add iter_buf to getiter type method.Damien George2017-02-16
| | | | | | | | | | | | | | | Allows to iterate over the following without allocating on the heap: - tuple - list - string, bytes - bytearray, array - dict (not dict.keys, dict.values, dict.items) - set, frozenset Allows to call the following without heap memory: - all, any, min, max, sum TODO: still need to allocate stack memory in bytecode for iter_buf.
* py/vm: Convert mp_uint_t to size_t where appropriate.Damien George2017-02-16
|
* py/objint: Convert mp_uint_t to size_t where appropriate.Damien George2017-02-16
|
* py/objexcept: Convert mp_uint_t to size_t where appropriate.Damien George2017-02-16
|
* py/objclosure: Convert mp_uint_t to size_t where appropriate.Damien George2017-02-16
|
* py/objfun: Convert mp_uint_t to size_t where appropriate.Damien George2017-02-16
|
* py/objarray: Convert mp_uint_t to size_t where appropriate.Damien George2017-02-16
|
* py/objstr: Convert mp_uint_t to size_t (and use int) where appropriate.Damien George2017-02-16
|
* py/objset: Convert mp_uint_t to size_t where appropriate.Damien George2017-02-16
|
* py/objdict: Convert mp_uint_t to size_t where appropriate.Damien George2017-02-16
|
* py/objlist: Convert mp_uint_t to size_t where appropriate.Damien George2017-02-16
|
* py/objtuple: Convert mp_uint_t to size_t where appropriate.Damien George2017-02-16
|
* py/persistentcode: Replace mp_uint_t with size_t where appropriate.Damien George2017-02-16
|
* py/mpz: Change type of "base" args from mp_uint_t to unsigned int.Damien George2017-02-16
|
* py/mpz: Remove obsolete declaration of mpz_as_str_size.Damien George2017-02-16
|
* py/mpz: Convert mp_uint_t to size_t where appropriate.Damien George2017-02-16
|
* py/runtime: Convert mp_uint_t to size_t where appropriate.Damien George2017-02-16
|
* py/vm: Add MICROPY_PY_THREAD_GIL_VM_DIVISOR option.Damien George2017-02-15
| | | | | | This improves efficiency of GIL release within the VM, by only doing the release after a fixed number of jump-opcodes have executed in the current thread.
* py/modthread: Use system-provided mutexs for _thread locks.Damien George2017-02-15
| | | | | | It's more efficient using the system mutexs instead of synthetic ones with a busy-wait loop. The system can do proper scheduling and blocking of the threads waiting on the mutex.
* py/objtype: Replace non-ASCII single-quote char with ASCII version.Damien George2017-02-14
|
* py/emitbc: Produce correct line number info for large bytecode chunks.Damien George2017-02-10
| | | | | | | | | | | | | | | Previous to this patch, for large chunks of bytecode that originated from a single source-code line, the bytecode-line mapping would generate something like (for 42 bytecode bytes and 1 line): BC_SKIP=31 LINE_SKIP=1 BC_SKIP=11 LINE_SKIP=0 This would mean that any errors in the last 11 bytecode bytes would be reported on the following line. This patch fixes it to generate instead: BC_SKIP=31 LINE_SKIP=0 BC_SKIP=11 LINE_SKIP=1
* py/objtype: Implement __delattr__ and __setattr__.dmazzella2017-02-09
| | | | | | This patch implements support for class methods __delattr__ and __setattr__ for customising attribute access. It is controlled by the config option MICROPY_PY_DELATTR_SETATTR and is disabled by default.
* py/nlr: Fix execstack builds for ARM.Dave Hylands2017-02-08
| | | | | | | | | | It seems that the gcc toolchain on the RaspberryPi likes %progbits instead of @progbits. I verified that %progbits also works under x86, so this should fix #2848 and fix #2842 I verified that unix and mpy-cross both compile on my RaspberryPi and on my x64 machine.
* py/map: Change mp_uint_t to size_t where appropriate.Damien George2017-02-08
| | | | | | | | The internal map/set functions now use size_t exclusively for computing addresses. size_t is enough to reach all of available memory when computing addresses so is the right type to use. In particular, for nanbox builds it saves quite a bit of code size and RAM compared to the original use of mp_uint_t (which is 64-bits on nanbox builds).
* py/asmxtensa.h: Explicitly cast args to 32-bits so left-shift is legal.Damien George2017-02-08
| | | | | | | For archs that have 16-bit pointers, the asmxtensa.h file can give compiler warnings about left-shift being greater than the width of the type (due to the inline functions in this header file). Explicitly casting the constants to uint32_t stops these warnings.
* py/objcomplex: Fix typo in ternary expression.Damien George2017-02-04
| | | | | This typo actually did the correct thing, but it was very obscure (came about from think in terms of Python's "x if cond else y" expression).
* py/objstr: Convert some instances of mp_uint_t to size_t.Damien George2017-02-03
|
* py/mpconfig.h: Move PY_BUILTINS_POW3 config option to diff part of file.Damien George2017-02-03
| | | | | With so many config options it's good to (at least try to) keep them grouped into logical sections.
* py/objstr: Give correct behaviour when passing a dict to %-formatting.Damien George2017-02-03
| | | | | | This patch fixes two main things: - dicts can be printed directly using '%s' % dict - %-formatting should not crash when passed a non-dict to, eg, '%(foo)s'
* py: Added optimised support for 3-argument calls to builtin.pow()Nicko van Someren2017-02-02
| | | | | | Updated modbuiltin.c to add conditional support for 3-arg calls to pow() using MICROPY_PY_BUILTINS_POW3 config parameter. Added support in objint_mpz.c for for optimised implementation.
* py/objset: Fix inplace binary ops so frozensets are not modified.Damien George2017-02-03
|
* py/objcomplex: Correctly handle case of 0j to power of something.Damien George2017-02-03
| | | | | 0j to the power of negative now raises ZeroDivisionError, and 0j to the power of positive returns 0.
* py/objfloat: Raise ZeroDivisionError for 0 to negative power.Damien George2017-02-03
|
* py/objset: Make inplace binary operators actually modify the set.Damien George2017-02-02
|
* py/objstringio: Allow to specify initial capacity by passing numeric argument.Paul Sokolovsky2017-02-02
| | | | E.g. uio.BytesIO(100) will allocate buffer with 100 bytes of space.
* unix: Make stack be non-executableDave Hylands2017-02-01
| | | | This PR is to address issue #2812.
* extmod: Remove MICROPY_FSUSERMOUNT and related files.Damien George2017-01-30
| | | | Replaced by MICROPY_VFS and the VFS sub-system.
* extmod/vfs_fat: Remove MICROPY_READER_FATFS component.Damien George2017-01-30
|
* extmod/machine_signal: Implement "signal" abstraction for machine module.Paul Sokolovsky2017-01-29
| | | | | | | | | | | A signal is like a pin, but ca also be inverted (active low). As such, it abstracts properties of various physical devices, like LEDs, buttons, relays, buzzers, etc. To instantiate a Signal: pin = machine.Pin(...) signal = machine.Signal(pin, inverted=True) signal has the same .value() and __call__() methods as a pin.
* extmod/vfs: Expose mp_vfs_mount_t type.Damien George2017-01-27
| | | | | It should only be used for low-level things and with caution, for example putting mounted VFS data in ROM or the static data section.
* extmod: Add generic VFS sub-system.Damien George2017-01-27
| | | | | | | | | | | | This provides mp_vfs_XXX functions (eg mount, open, listdir) which are agnostic to the underlying filesystem type, and just require an object with the relevant filesystem-like methods (eg .mount, .open, .listidr) which can then be mounted. These mp_vfs_XXX functions would typically be used by a port to implement the "uos" module, and mp_vfs_open would be the builtin open function. This feature is controlled by MICROPY_VFS, disabled by default.
* py/py.mk: Add CFLAGS_MOD flag to set config file for FatFs.Damien George2017-01-27
|
* py/showbc: Make sure to set the const_table before printing bytecode.Damien George2017-01-27
|
* py/objstr: Optimize string concatenation with empty string.Paul Sokolovsky2017-01-27
| | | | | | | | | | | | | | In this, don't allocate copy, just return non-empty string. This helps with a standard pattern of buffering data in case of short reads: buf = b"" while ...: s = f.read(...) buf += s ... For a typical case when single read returns all data needed, there won't be extra allocation. This optimization helps uasyncio.