summaryrefslogtreecommitdiff
path: root/py
AgeCommit message (Collapse)Author
2016-12-22py/lexer: Remove unnecessary check for EOF in lexer's next_char func.Damien George
This check always fails (ie chr0 is never EOF) because the callers of this function never call it past the end of the input stream. And even if they did it would be harmless because 1) reader.readbyte must continue to return an EOF char if the stream is exhausted; 2) next_char would just count the subsequent EOF's as characters worth 1 column.
2016-12-22py/lexer: Remove unreachable code in string tokeniser.Damien George
2016-12-22tests/basics/lexer: Add a test for newline-escaping within a string.Damien George
2016-12-22extmod/modutimeq: Refactor into optimized class.Paul Sokolovsky
import utimeq, utime # Max queue size, the queue allocated statically on creation q = utimeq.utimeq(10) q.push(utime.ticks_ms(), data1, data2) res = [0, 0, 0] # Items in res are filled up with results q.pop(res)
2016-12-21py/emitglue: Refactor to remove assert(0), to improve coverage.Damien George
2016-12-21py/objint: Rename mp_obj_int_as_float to mp_obj_int_as_float_impl.Damien George
And also simplify it to remove the check for small int. This can be done because this function is only ever called if the argument is not a small int.
2016-12-20py/modbuiltins: Remove unreachable code.Damien George
2016-12-19py/compile: Add an extra pass for Xtensa inline assembler.Damien George
It needs an extra pass to compute the size of the constant table for the l32r instructions.
2016-12-15py: Add MICROPY_KBD_EXCEPTION config option to provide mp_kbd_exception.Damien George
Defining and initialising mp_kbd_exception is boiler-plate code and so the core runtime can provide it, instead of each port needing to do it themselves. The exception object is placed in the VM state rather than on the heap.
2016-12-14py/mpconfig.h: Enable MICROPY_PY_SYS_EXIT by default.Paul Sokolovsky
sys.exit() is an important function to terminate a program. In particular, the testsuite relies on it to skip tests (i.e. any other functionality may be disabled, but sys.exit() is required to at least report that properly).
2016-12-14py/runtime: Zero out fs_user_mount array in mp_init.Damien George
There's no need to force ports to copy-and-paste this initialisation code. If FSUSERMOUNT is enabled then this zeroing out must be done.
2016-12-14py/mpz: Remove unreachable code in mpn_or_neg functions.Damien George
2016-12-13py/builtinimport: Support importing packages from compiled .mpy files.Damien George
This patch ensures that __init__.mpy files are imported if their containing directory is imported as a package.
2016-12-12py/binary: Do zero extension when storing a value larger than word size.Damien George
2016-12-09py/objint: from_bytes, to_bytes: Require byteorder arg, require "little".Paul Sokolovsky
CPython requires byteorder arg, make uPy compatible. As we support only "little", error out on anything else.
2016-12-09py/asm: Fix x86 and ARM assemblers due to recent code refactoring.Damien George
2016-12-09py/asm: Remove need for dummy_data when doing initial assembler passes.Damien George
For all but the last pass the assembler only needs to count how much space is needed for the machine code, it doesn't actually need to emit anything. The dummy_data just uses unnecessary RAM and without it the code is not any more complex (and code size does not increase for Thumb and Xtensa archs).
2016-12-09py/emitinline: Move common code for end of final pass to compiler.Damien George
This patch moves some common code from the individual inline assemblers to the compiler, the code that calls the emit-glue to assign the machine code to the functions scope.
2016-12-09py/emitinline: Move inline-asm align and data methods to compiler.Damien George
These are generic methods that don't depend on the architecture and so can be handled directly by the compiler.
2016-12-09py/emitinline: Embed entire asm struct instead of a pointer to it.Damien George
This reduces fragmentation, and memory use by 1 word. But more importantly it means the emit_inline_asm_t struct now "derives" from mp_asm_base.
2016-12-09py: Add inline Xtensa assembler.Damien George
This patch adds the MICROPY_EMIT_INLINE_XTENSA option, which, when enabled, allows the @micropython.asm_xtensa decorator to be used. The following opcodes are currently supported (ax is a register, a0-a15): ret_n() callx0(ax) j(label) jx(ax) beqz(ax, label) bnez(ax, label) mov(ax, ay) movi(ax, imm) # imm can be full 32-bit, uses l32r if needed and_(ax, ay, az) or_(ax, ay, az) xor(ax, ay, az) add(ax, ay, az) sub(ax, ay, az) mull(ax, ay, az) l8ui(ax, ay, imm) l16ui(ax, ay, imm) l32i(ax, ay, imm) s8i(ax, ay, imm) s16i(ax, ay, imm) s32i(ax, ay, imm) l16si(ax, ay, imm) addi(ax, ay, imm) ball(ax, ay, label) bany(ax, ay, label) bbc(ax, ay, label) bbs(ax, ay, label) beq(ax, ay, label) bge(ax, ay, label) bgeu(ax, ay, label) blt(ax, ay, label) bnall(ax, ay, label) bne(ax, ay, label) bnone(ax, ay, label) Upon entry to the assembly function the registers a0, a12, a13, a14 are pushed to the stack and the stack pointer (a1) decreased by 16. Upon exit, these registers and the stack pointer are restored, and ret.n is executed to return to the caller (caller address is in a0). Note that the ABI for the Xtensa emitters is non-windowing.
2016-12-09py: Allow inline-assembler emitter to be generic.Damien George
This patch refactors some code so that it is easier to integrate new inline assemblers for different architectures other than ARM Thumb.
2016-12-09py: Integrate Xtensa assembler into native emitter.Damien George
The config option MICROPY_EMIT_XTENSA can now be enabled to target the Xtensa architecture with @micropython.native and @micropython.viper decorators.
2016-12-09py/asmxtensa: Add low-level Xtensa assembler.Damien George
2016-12-09py/asmbase: Add MP_PLAT_COMMIT_EXEC option for handling exec code.Damien George
If a port defines MP_PLAT_COMMIT_EXEC then this function is used to turn RAM data into executable code. For example a port may want to write the data to flash for execution. The function must return a pointer to the executable data.
2016-12-09py: Move arch-specific assembler macros from emitnative to asmXXX.h.Damien George
2016-12-09py/emit.h: Remove long-obsolete declarations for cpython emitter.Damien George
2016-12-07py/compile: Simplify configuration of native emitter.Damien George
2016-12-02py/stream: Move ad-hoc ioctl constants to stream.h and rename them.Damien George
The constants MP_IOCTL_POLL_xxx, which were stmhal-specific, are moved from stmhal/pybioctl.h (now deleted) to py/stream.h. And they are renamed to MP_STREAM_POLL_xxx to be consistent with other such constants. All uses of these constants have been updated.
2016-11-30py/asmthumb: Fix build for F7 MCUs after recent code refactoring.Damien George
2016-11-28py: Factor out common code from assemblers into asmbase.[ch].Damien George
All assemblers should "derive" from mp_asm_base_t.
2016-11-26py/compile: Remove comment about TODO for short circuiting for if-stmt.Damien George
Short circuiting is handled correctly by c_if_cond, and constants within short-circuit expressions are optimised by the parser.
2016-11-22py/objtype: Implement __call__ handling for an instance w/o heap alloc.Paul Sokolovsky
By refactoring and reusing code from objboundmeth.
2016-11-21stmhal/moduselect: Move to extmod/ for reuse by other ports.Paul Sokolovsky
2016-11-16py/lexer: Make lexer use an mp_reader as its source.Damien George
2016-11-16py/lexer: Rewrite mp_lexer_new_from_fd in terms of mp_reader.Damien George
2016-11-16py/lexer: Provide generic mp_lexer_new_from_file based on mp_reader.Damien George
If a port defines MICROPY_READER_POSIX or MICROPY_READER_FATFS then lexer.c now provides an implementation of mp_lexer_new_from_file using the mp_reader_new_file function.
2016-11-16py/lexer: Rewrite mp_lexer_new_from_str_len in terms of mp_reader_mem.Damien George
2016-11-16py: Factor out persistent-code reader into separate files.Damien George
Implementations of persistent-code reader are provided for POSIX systems and systems using FatFS. Macros to use these are MICROPY_READER_POSIX and MICROPY_READER_FATFS respectively. If an alternative implementation is needed then a port can define the function mp_reader_new_file.
2016-11-16py: Factor persistent code load/save funcs into persistentcode.[ch].Damien George
2016-11-15py/parse: Add code to fold logical constants in or/and/not operations.Damien George
Adds about 200 bytes to the code size when constant folding is enabled.
2016-11-15py/parse: Make mp_parse_node_new_leaf an inline function.Damien George
It is split into 2 functions, one to make small ints and the other to make a non-small-int leaf node. This reduces code size by 32 bytes on bare-arm, 64 bytes on unix (x64-64) and 144 bytes on stmhal.
2016-11-15py/parse: Move function to check for const parse node to parse.[ch].Damien George
2016-11-15py/*.mk: Replace uses of 'sed' with $(SED).Damien George
2016-11-15py/mkrules.mk: Rework find command so it works on OSX.Dave Hylands
The Mac version of find doesn't support -printf, so this changes things to use sed to strip off the leading path element instead.
2016-11-15py/runtime: mp_resume: Fix exception handling for nanbox port.Paul Sokolovsky
2016-11-15py/runtime: mp_resume: Handle exceptions in Python __next__().Paul Sokolovsky
This includes StopIteration and thus are important to make Python-coded iterables work with yield from/await. Exceptions in Python send() are still not handled and left for future consideration and optimization.
2016-11-14py/objexcept: Allow clearing traceback with 'exc.__traceback__ = None'.Paul Sokolovsky
We allow 'exc.__traceback__ = None' assignment as a low-level optimization of pre-allocating exception instance and raising it repeatedly - this avoids memory allocation during raise. However, uPy will keep adding traceback entries to such exception instance, so before throwing it, traceback should be cleared like above. 'exc.__traceback__ = None' syntax is CPython compatible. However, unlike it, reading that attribute or setting it to any other value is not supported (and not intended to be supported, again, the only reason for adding this feature is to allow zero-memalloc exception raising).
2016-11-14all: Remove readall() method, which is equivalent to read() w/o args.Paul Sokolovsky
Its addition was due to an early exploration on how to add CPython-like stream interface. It's clear that it's not needed and just takes up bytes in all ports.
2016-11-10py/emitnative: Fix native import emitter when in viper mode.Damien George