Paul Sokolovsky
66c11ec581
objtype: Clarify code by consistently using common subexpression.
2015-03-16 13:36:58 +02:00
Damien George
d4bd37a561
py: Fix printing of error message when parsing malformed integer.
2015-03-16 10:42:50 +00:00
Damien George
1ef26b35c1
py, extmod: Remove include of unnecessary system headers.
2015-03-14 23:11:25 +00:00
Damien George
836e46976f
py: In pfenv_vprintf, adjust type from mp_uint_t to unsigned int.
2015-03-14 23:09:57 +00:00
Damien George
fa1edff006
py: Remove unnecessary and unused sgn argument from pfenv_print_mp_int.
2015-03-14 22:32:40 +00:00
Damien George
6837d46c1d
py: Fix builtin abs so it works for bools and bignum.
2015-03-14 22:07:30 +00:00
Damien George
42e0c59308
py: Add MICROPY_COMP_{DOUBLE,TRIPLE}_TUPLE_ASSIGN config options.
...
These allow to fine-tune the compiler to select whether it optimises
tuple assignments of the form a, b = c, d and a, b, c = d, e, f.
Sensible defaults are provided.
2015-03-14 13:11:35 +00:00
Damien George
a77ffe66b2
py: In compiler, put macro guard around potentially unused asm vars.
2015-03-14 12:59:31 +00:00
Damien George
848dd0e762
py: Make some mpz functions static and remove unused ones.
2015-03-12 22:48:45 +00:00
Peter D. Gray
b2a237d337
py: Add support for start/stop/step attributes of builtin range object.
2015-03-11 20:02:06 +00:00
Paul Sokolovsky
cb0fc063ed
objmemoryview: Introduce mp_obj_new_memoryview().
...
This follows existing pattern for object constructor API and allows to
create memoryview objects e.g. in external modules.
2015-03-06 21:37:28 +02:00
Paul Sokolovsky
24c1000741
objarray: Support array('O'), array of objects, as extension to CPython.
...
Might be useful at least for memoryview hacks.
2015-03-05 22:58:31 +02:00
Paul Sokolovsky
16b1f5e842
objarray: Fix typo in null TYPECODE_MASK.
2015-03-04 23:03:31 +02:00
Damien George
d891452a73
py: Add MICROPY_MALLOC_USES_ALLOCATED_SIZE to allow simpler malloc API.
2015-03-03 21:23:13 +00:00
Paul Sokolovsky
e104acdb8c
runtime: Typo fixes in comments.
2015-03-03 21:37:50 +02:00
Damien George
dc790977d4
py: In inline assembler, reset labels on code-size pass.
2015-03-03 17:34:49 +00:00
Damien George
3665d0b2ff
py: Simplify some inline-assembler error messages, but retain meaning.
...
Just to reduce code size. Messages are still to the point and
unambiguous.
2015-03-03 17:11:18 +00:00
Damien George
9c5cabb502
py: Give error for duplicate label in inline assembler.
2015-03-03 17:08:02 +00:00
stijn
803264bb17
py: Guard against redef of nlr_push with DEBUG + MICROPY_NLR_SETJMP.
2015-03-03 14:34:40 +00:00
Damien George
67c5f89af5
py: In inline assembler, fix branch out-of-range error reporting.
...
Should only give an error on the last pass of the assembler, since
that's when we are certain about the branch size.
2015-03-02 17:51:32 +00:00
Damien George
db1e10d5ea
py: Use SMALL_INT creation macro in builtin sum.
2015-03-02 17:19:44 +00:00
Damien George
9f142f0c84
py: For inline assembler, add bcc_n and bcc_w ops.
...
Addresses issue #1143 .
2015-03-02 14:29:52 +00:00
Damien George
a2e383820d
py: Clean up and comment out unused functions in mpz.
2015-03-02 12:58:06 +00:00
Damien George
62a3a287d9
py: Set compiler scope before folding constants so error messages work.
...
Addresses issue #1140 .
2015-03-01 12:04:05 +00:00
Damien George
7711afbb4a
py: Combine complie functions for or_test/and_test to reduce code size.
...
Saves around 60 bytes code on Thumb2 archs.
2015-02-28 15:10:18 +00:00
Damien George
63f3832e81
py: Combine emit functions for jump true/false to reduce code size.
...
Saves 116 bytes for stmhal and 56 bytes for cc3200 port.
2015-02-28 15:04:06 +00:00
Damien George
0b2fd91890
py: Combine logic for compiling and/or tests, to reduce code size.
...
Reduces code size by 72 bytes on Thumb2 archs.
2015-02-28 14:37:54 +00:00
Paul Sokolovsky
cefcbb22b2
objarray: Implement array slice assignment.
...
This is rarely used feature which takes enough code to implement, so is
controlled by MICROPY_PY_ARRAY_SLICE_ASSIGN config setting, default off.
But otherwise it may be useful, as allows to update arbitrary-sized data
buffers in-place.
Slice is yet to implement, and actually, slice assignment implemented in
such a way that RHS of assignment should be array of the exact same item
typecode as LHS. CPython has it more relaxed, where RHS can be any sequence
of compatible types (e.g. it's possible to assign list of int's to a
bytearray slice).
Overall, when all "slice write" features are implemented, it may cost ~1KB
of code.
2015-02-27 22:17:15 +02:00
Damien George
0bb971370b
py: Transform assert logic in compiler to save code space.
...
Saves about 250 code bytes for Thumb2 archs.
2015-02-27 14:25:47 +00:00
Damien George
4d77e1a034
py: Use m_{new,renew,del} consistently.
...
This is so all memory requests go through the same interface.
2015-02-27 09:34:51 +00:00
Damien George
4852e09c79
py: Fix adding of traceback so that it appends to existing info.
...
This makes exception traceback info self contained (ie doesn't rely on
list object, which was a bit of a hack), reduces code size, and reduces
RAM footprint of exception by eliminating the list object.
Addresses part of issue #1126 .
2015-02-27 00:36:39 +00:00
Damien George
12d6d777e1
py: Small optimisation of logic flow in BC_WITH_CLEANUP bytecode.
...
Slightly smaller code, and does not need to use C stack to save
temporaries.
2015-02-26 17:54:50 +00:00
Damien George
534574348e
py: Make inline assembler raise exception when branch not in range.
...
Addresses issue #1132 .
2015-02-25 15:45:55 +00:00
Damien George
993f067fa2
py: In inline assembler, add return statement to fix flow logic.
2015-02-24 22:43:01 +00:00
Damien George
e5315f7ffd
py: Factor some code in inline thumb assembler to reduce code size.
2015-02-24 16:35:37 +00:00
Damien George
e41b21c01e
py: Make more asmthumb functions inline to reduce code size.
2015-02-24 16:32:52 +00:00
Damien George
8f7976ba0d
py: Reduce code size of inline thumb assembler by using static tables.
...
Reduces stmhal by about 300 bytes ROM.
2015-02-24 16:10:58 +00:00
nhtshot
5d323defe4
py: Update parse.c&mpconfig.h to reflect rename of mp_lexer_show_token.
...
This function is only used when DEBUG_PRINTERS and USE_RULE_NAME are
enabled.
2015-02-23 21:36:05 +00:00
Paul Sokolovsky
71ebd4b7f0
py: Implement UnicodeError.
...
Still too shy to implement UnicodeEncodeError which was really needed for
micropython-lib case.
2015-02-23 23:20:16 +02:00
Damien George
5cbeacebdb
py: Make math special functions configurable and disabled by default.
...
The implementation of these functions is very large (order 4k) and they
are rarely used, so we don't enable them by default.
They are however enabled in stmhal and unix, since we have the room.
2015-02-22 14:48:18 +00:00
Paul Sokolovsky
e06cf89f04
py: Add few more special methods.
2015-02-22 01:21:08 +02:00
Damien George
eff359e114
py: Expose mp_obj_list_remove as a public function.
2015-02-21 14:47:02 +00:00
Paul Sokolovsky
8c705233f3
py: Fix mp_obj_print() to work when Python streams are not used.
2015-02-17 00:32:18 +02:00
Paul Sokolovsky
1f91e92cc6
py: Revamp mp_obj_print() to use Python streams.
...
Most of printing infrastructure now uses streams, but mp_obj_print() used
libc's printf(), which led to weird buffering issues in output. So, switch
mp_obj_print() to streams too, even though it may make sense to move it to
a separate file, as it is purely a debugging function now.
2015-02-17 00:13:01 +02:00
Damien George
eff10f66a6
py: Implement bl/bx instructions for inline Thumb assembler.
2015-02-16 18:17:07 +00:00
Damien George
42495392da
py: Implement "it" instruction for inline Thumb assembler.
2015-02-16 17:46:49 +00:00
Damien George
3d7bf5d4b1
py: More robust checking in inline assembler compiler.
2015-02-16 17:46:28 +00:00
Paul Sokolovsky
9e6c82960e
builtinimport: Revamp&refactor handling of relative imports.
...
Relative imports are based of a package, so we're currently at a module
within a package, we should get to package first.
Also, factor out path travsering operation, but this broke testing for
boundary errors with relative imports. TODO: reintroduce them, together
with proper tests.
2015-02-16 12:11:34 +02:00
Paul Sokolovsky
078172dcab
builtinimport: Improve debugging output.
2015-02-16 12:11:03 +02:00
Paul Sokolovsky
e8432b3c72
stackctrl: Encode "recursion depth exceeded" message as qstr.
...
So corresponding exception can be thrown even under tight memory conditions.
2015-02-15 22:41:14 +03:00
Paul Sokolovsky
fa3b895145
objexcept: Optimize traceback allocation for exception.
...
Traceback allocation for exception will now never lead to recursive
MemoryError exception - if there's no memory for traceback, it simply
won't be created.
2015-02-15 22:41:14 +03:00
Paul Sokolovsky
29c4f92e13
objexcept: Optimize using messages without formatting substitutions.
...
They are directly cast to str object, skipping allocation of formatting
buffer.
2015-02-15 22:41:14 +03:00
Paul Sokolovsky
3077fbff26
nlr: Add even more optional debugging logging.
...
Has to be enabled by manual editing, but at least it's there, as debugging
NLR issues may be weird.
2015-02-15 20:28:18 +03:00
Paul Sokolovsky
e89cc13e5c
nlr: If DEBUG, guard against recursive nlr_push().
...
Pushing same NLR record twice would lead to "infinite loop" in nlr_jump
(but more realistically, it will crash as soon as NLR record on stack is
overwritten).
2015-02-15 20:23:52 +03:00
Paul Sokolovsky
53e5e0fa28
py: Make old_globals part of mp_code_state structure.
...
Conceptually it is part of code state, so let it be allocated in the same way
as the rest of state.
2015-02-15 19:24:15 +03:00
Damien George
e5039c6ff8
py: Use TextIOWrapper only if PY_IO_FILEIO def'd; cast size_t for print.
2015-02-15 13:17:11 +00:00
Damien George
f6532bb9e0
py: Simplify and remove redundant code for __iter__ method lookup.
2015-02-15 01:10:13 +00:00
Damien George
d1c3788375
py: Fix loading of immediate pointer in Thumb assembler.
...
Addresses issue #1117 .
2015-02-15 00:45:28 +00:00
Damien George
0868942e77
py: Check for valid file when creating lexer for execfile.
...
Addresses issue #1119 .
2015-02-15 00:02:27 +00:00
stijn
1b8e76b8e6
py: Cleanup duplication in instance_is_callable/instance_call.
2015-02-14 23:49:04 +00:00
stijn
c1832fd206
py: Add setattr builtin.
2015-02-14 23:35:00 +00:00
Paul Sokolovsky
089c3f321e
py/asm*.c: Typo fixes in comments.
2015-02-14 02:20:35 +08:00
Damien George
192d536fe4
py: Implement clz and rbit for inline Thumb assembler.
2015-02-13 11:06:23 +00:00
Damien George
32f0b7942c
py: Implement sdiv/udiv for inline Thumb assembler.
2015-02-13 10:43:05 +00:00
Damien George
0d967b8ae4
py: Implement push/pop for inline Thumb assembler.
2015-02-13 02:30:35 +00:00
Damien George
dfe944c3e5
py: Expose compile.c:list_get as mp_parse_node_extract_list.
2015-02-13 02:29:46 +00:00
Damien George
8dfbd2d589
py: Make inline assembler raise proper SyntaxError exception on error.
...
Also gives line number of location of error. Very useful!
2015-02-13 01:00:51 +00:00
Damien George
1bf5a022fe
py: Add ldrex and strex to thumb2 inline assembler.
...
These are useful for implementing atomic lock operations.
2015-02-12 22:52:42 +00:00
Damien George
596f41da04
py: Reuse value stack in VM WITH_CLEANUP opcode to reduce C-stack size.
...
Saves 8 bytes C-stack on stmhal and 16 bytes on unix x86.
2015-02-10 13:21:42 +00:00
Damien George
ea0461dcd3
py: Add option to micropython.qstr_info() to dump actual qstrs.
2015-02-10 11:02:28 +00:00
Damien George
d0df10b2c6
py: Don't unnecessarily create a bound method.
2015-02-09 16:59:15 +00:00
Damien George
48244044a2
py: Allow subclass of native object to delegate to the native buffer_p.
...
Addresses issue #1109 .
2015-02-09 15:08:00 +00:00
Damien George
1a6721fefd
py: Remove obsolete MP_F_LOAD_CONST_{INT,DEC} from emitnative.c.
2015-02-09 14:53:16 +00:00
Paul Sokolovsky
194117a066
objstr: Fix bytes creation from array of long ints.
2015-02-09 12:11:49 +08:00
Damien George
28631537bd
py: Add MICROPY_OBJ_BASE_ALIGNMENT to help with 16-bit ports.
2015-02-08 13:42:00 +00:00
Damien George
f804833a97
py: Initialise variables in mp_parse correctly, to satisfy gcc warning.
2015-02-08 13:40:20 +00:00
Damien George
7d414a1b52
py: Parse big-int/float/imag constants directly in parser.
...
Previous to this patch, a big-int, float or imag constant was interned
(made into a qstr) and then parsed at runtime to create an object each
time it was needed. This is wasteful in RAM and not efficient. Now,
these constants are parsed straight away in the parser and turned into
objects. This allows constants with large numbers of digits (so
addresses issue #1103 ) and takes us a step closer to #722 .
2015-02-08 01:57:40 +00:00
Damien George
5f97aaeca4
py: Fix instance lookup, since object is not a real type.
2015-02-08 00:42:13 +00:00
Damien George
0bfc7638ba
py: Protect mp_parse and mp_compile with nlr push/pop block.
...
To enable parsing constants more efficiently, mp_parse should be allowed
to raise an exception, and mp_compile can already raise a MemoryError.
So these functions need to be protected by an nlr push/pop block.
This patch adds that feature in all places. This allows to simplify how
mp_parse and mp_compile are called: they now raise an exception if they
have an error and so explicit checking is not needed anymore.
2015-02-07 18:33:58 +00:00
Damien George
e1e359ff59
py: Put mp_sys_path, mp_sys_argv and gc_collected in mp_state_ctx_t.
...
Without mp_sys_path and mp_sys_argv in the root pointer section of the
state, their memory was being incorrectly collected by GC.
2015-02-07 17:24:10 +00:00
Damien George
744e767458
py: Make list.sort keep stack usage within O(log(N)) bound.
...
Also fix list.sort so it works with user-defined types, and parse the
keyword arguments properly.
Addresses issue #338 .
2015-02-02 15:14:22 +00:00
Damien George
f49782f005
py: Fix cmath.log10; fix printing of complex number with negative imag.
2015-02-02 12:52:14 +00:00
Paul Sokolovsky
98c4bc3fac
py: Add MICROPY_PY_ALL_SPECIAL_METHODS and __iadd__ special method under it.
2015-01-31 00:35:56 +02:00
Damien George
32bade19d9
py: Convert CR to LF and CR LF to LF in lexer.
...
Only noticeable difference is how newlines are encoded in triple-quoted
strings. The behaviour now matches CPython3.
2015-01-30 00:27:46 +00:00
Damien George
3da677e658
py: Implement Ellipsis object in native emitter.
2015-01-29 15:13:40 +00:00
Damien George
827b0f747b
py: Change vstr_null_terminate -> vstr_null_terminated_str, returns str.
2015-01-29 13:57:23 +00:00
Damien George
81e70a88a7
py: Make REPL printing function print repr of object, not str.
...
Addresses issue #1014 .
2015-01-28 23:53:13 +00:00
Damien George
0d3cb6726d
py: Change vstr so that it doesn't null terminate buffer by default.
...
This cleans up vstr so that it's a pure "variable buffer", and the user
can decide whether they need to add a terminating null byte. In most
places where vstr is used, the vstr did not need to be null terminated
and so this patch saves code size, a tiny bit of RAM, and makes vstr
usage more efficient. When null termination is needed it must be
done explicitly using vstr_null_terminate.
2015-01-28 23:43:01 +00:00
Paul Sokolovsky
bbd9251bac
py: bytes(): Make sure we add values as bytes, not as chars.
2015-01-28 22:29:07 +02:00
Damien George
98e3a64694
py: Remove duplicated mp_obj_str_make_new function from objstrunicode.c.
2015-01-28 14:14:57 +00:00
Damien George
16677ce311
py: Be more precise about unicode type and disabled unicode behaviour.
2015-01-28 14:07:11 +00:00
David Steinberg
0b3014ce3a
py: Add support for floats in mp_binary_{get,set}_val()
...
- This then provides support for floats in the struct package
2015-01-27 22:49:01 +02:00
Damien George
a5efcd4745
py: Specify unary/binary op name in TypeError error message.
...
Eg, "() + 1" now tells you that __add__ is not supported for tuple and
int types (before it just said the generic "binary operator"). We reuse
the table of names for slot lookup because it would be a waste of code
space to store the pretty name for each operator.
2015-01-27 18:02:25 +00:00
Damien George
a9dc9b8f6d
py: Fix comparison of minus-zero long int.
2015-01-27 17:47:38 +00:00
Damien George
8788b131ec
py: Check for NDEBUG using #ifdef rather than #if.
...
Defining NDEBUG (to any value, even 0) disables debugging. Otherwise,
if it's not defined, debugging is enabled.
2015-01-25 18:35:54 +00:00
Damien George
32444b759a
py: Don't use anonymous unions, name them instead.
...
This makes the code (more) compatible with the C99 standard.
2015-01-24 23:14:12 +00:00
Damien George
5c670acb1f
py: Be more machine-portable with size of bit fields.
2015-01-24 23:12:58 +00:00
David Steinberg
0fb17f6ef4
py: Use float-to-int classifications for mp_obj_new_int_from_float() functions
2015-01-24 20:54:28 +00:00
David Steinberg
ca377b10de
py: Add float-to-int classification function
2015-01-24 20:54:28 +00:00
David Steinberg
8d427b7ab7
py: Fix issue in mpz_set_from_float() when mp_int_t is larger than float
2015-01-24 20:54:28 +00:00