Damien George
78035b995f
py, compiler: Clean up and compress scope/compile structures.
Convert int types to uint where sensible, and then to uint8_t or
uint16_t where possible to reduce RAM usage.
11 years ago
Damien George
495d781a36
py: implement UNPACK_EX byte code (for: a, *b, c = d)
11 years ago
Damien George
b7ffdcc1c7
py: Improve compiler syntax errors; catch more errors.
11 years ago
Damien George
cdd96dff2c
py: Implement more features in native emitter.
On x64, native emitter now passes 70 of the tests.
11 years ago
Damien George
65cad12d38
py: Add option to compiler to specify default code emitter.
Also add command line option to unix port to select emitter.
11 years ago
Damien George
af27259439
py: Enable optimisation of multiplying 2 small ints in compiler.
11 years ago
Damien George
ecf5b77123
py: This time, real proper overflow checking of small int power.
Previous overflow test was inadequate.
11 years ago
Damien George
094d450003
py: Wrap compile_scope_inline_asm in #if; remove comment from misc.h.
11 years ago
Damien George
af6edc61bd
py: Enable a jump optimisation in the compiler.
11 years ago
Damien George
882b363564
py: Move to Python 3.4.0 compatibility.
Very little has changed. In Python 3.4 they removed the opcode
STORE_LOCALS, but in Micro Python we only ever used this for CPython
compatibility, so it was a trivial thing to remove. It also allowed to
clean up some dead code (eg the 0xdeadbeef in class construction), and
now class builders use 1 less stack word.
Python 3.4.0 introduced the LOAD_CLASSDEREF opcode, which I have not
yet understood. Still, all tests (apart from bytecode test) still pass.
Bytecode tests needs some more attention, but they are not that
important anymore.
11 years ago
Damien George
3ff2d03891
py: Fix bug in optimised for .. range.
Don't store final, failing value to the loop variable. This fix also
makes for .. range a bit more efficient, as it uses less store/load
pairs for the loop variable.
11 years ago
Damien George
e337f1ef5e
py: Towards default keyword arguments.
These are default arguments after a bare *.
11 years ago
Damien George
3056509e00
py: Rename and reorder parameters in emit_make_function/closure.
In preparation for implementing default keyword arguments.
11 years ago
Paul Sokolovsky
96eec4f8a6
compile: Don't try to constant-fold division by zero.
The way it is, just crashes app. And optimizing to
"raise ZeroDivisionError" is probably too much.
11 years ago
Damien George
804760bfca
py: Fix bug in compiler for empty class bases.
Eg class A(): pass would fail an assertion.
11 years ago
Damien George
d17926db71
Rename rt_* to mp_*.
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.
11 years ago
Paul Sokolovsky
8d9cc2e669
compile: Print error messages on unimplemented relative imports.
11 years ago
Damien George
d1e443d0bc
py: Free unique_code slot for outer module.
Partly (very partly!) addresses issue #386 . Most importantly, at the
REPL command line, each invocation does not now lead to increased memory
usage (unless you define a function/lambda).
11 years ago
Paul Sokolovsky
44307d5ef8
vm: Implement "with" statement (SETUP_WITH and WITH_CLEANUP bytecodes).
11 years ago
Damien George
2326d52d20
py: Factor out code from runtime.c to emitglue.c.
11 years ago
Damien George
8dcc0c7924
py: Calculate maximum exception stack size in compiler.
11 years ago
Damien George
bdcbf0fcd1
py: Restore CPython compatibility in compiler for closures with def args.
11 years ago
Paul Sokolovsky
2447a5b582
py: Support closures with default args.
11 years ago
Rachel Dowdall
2d15deebdc
Fixed floor division on mp ints and small ints. Added a floordivide test case.
11 years ago
Rachel Dowdall
56402796d8
Fixed floor division on mp ints and small ints. Added a floordivide test case.
11 years ago
Rachel Dowdall
cde8631f15
Fixed modulo operator on ints and mp ints to agree with python. Added intdivmod.c and tests/basics/modulo.py.
11 years ago
xbe
efe3422394
py: Clean up includes.
Remove unnecessary includes. Add includes that improve portability.
11 years ago
Damien George
f41fdd05b0
py: Unify syntax error handling in compiler; check defualt arg syntax.
Checks for non-default args following default args, and errors out.
Addresses issue #328 .
11 years ago
Damien George
1dc76af7bf
py: Remove name of var arg from macros with var args.
11 years ago
Paul Sokolovsky
56e5ef203b
parse: Refactor parse node encoding to support full range of small ints.
Based on suggestion by @dpgeorge at
https://github.com/micropython/micropython/pull/313
11 years ago
Paul Sokolovsky
bbf0e2fe12
parse: Note that fact that parser's small ints are different than VM small int.
Specifically, VM's small ints are 31 bit, while parser's only 28. There's already
MP_OBJ_FITS_SMALL_INT(), so, for clarity, rename MP_FIT_SMALL_INT() to
MP_PARSE_FITS_SMALL_INT().
11 years ago
Paul Sokolovsky
a1aba36feb
compile: Add comments ergarding non-implemented relative imports.
11 years ago
Damien George
8725f8f7de
py: Pass all scope flags through to runtime.
11 years ago
Paul Sokolovsky
520e2f58a5
Replace global "static" -> "STATIC", to allow "analysis builds". Part 2.
11 years ago
Paul Sokolovsky
2f0b026a44
Clean up handling of function return type annotation.
11 years ago
Damien George
bbcd49a496
py: Fix compile of class with keyword arguments in bases.
11 years ago
Damien George
35e2a4e6bb
py: Add built-in super.
11 years ago
Damien George
9aa2a527b5
py: Tidy up BINARY_OPs; negation done by special NOT bytecode.
IS_NOT and NOT_IN are now compiled to IS + NOT and IN + NOT, with a new
special NOT bytecode.
11 years ago
Damien George
7e5fb24e3b
py: Reduce code size of compiler by a bit.
11 years ago
Damien George
cbddb279bb
py: Implement break/continue from an exception with finally.
Still todo: break/continue from within the finally block itself.
11 years ago
Paul Sokolovsky
90750029df
Implement default function arguments (for Python functions).
TODO: Decide if we really need separate bytecode for creating functions
with default arguments - we would need same for closures, then there're
keywords arguments too. Having all combinations is a small exponential
explosion, likely we need just 2 cases - simplest (no defaults, no kw),
and full - defaults & kw.
11 years ago
Damien George
08d075592f
py: Fix bug with LOAD_METHOD; fix int->machine_int_t for small int.
LOAD_METHOD bug was: emitbc did not correctly calculate the amount of
stack usage for a LOAD_METHOD operation.
small int bug was: int was being used to pass small ints, when it should
have been machine_int_t.
11 years ago
Damien George
e4b6a079b3
py: Implement 'not' in compiler, and improve rt_is_true.
11 years ago
Damien George
41d02b654e
py: Improve freeing of emitters in mp_compile.
There can be multiple emitters allocated during compile (eg byte code
and native).
11 years ago
Paul Sokolovsky
f46d87a30d
Add support for freeing code emitter objects at the end of compilation.
11 years ago
Paul Sokolovsky
fd31358505
mp_compile(): Properly free module_scope and all nested scopes.
11 years ago
Damien George
b979122dfb
py: Use C99 way of variable macro arguments.
Addresses Issue #207 .
11 years ago
Damien George
00208ce194
py: Change macro var args in parser to be C99 compliant.
11 years ago
Damien George
600ae734cf
py: Implement break and continue byte codes, and add tests.
Also fixes a bug in the for-in-range optimiser.
I hope to remove break and continue byte codes in the future and just
use jump (if possible).
11 years ago
Damien George
55baff4c9b
Revamp qstrs: they now include length and hash.
Can now have null bytes in strings. Can define ROM qstrs per port using
qstrdefsport.h
11 years ago