Paul Sokolovsky
ff8da0b835
vm: Detect stack underflow in addition to overflow.
2014-05-31 18:14:54 +03:00
Paul Sokolovsky
ae9c82d5f3
objstr: str_uni_istype(): Spurious whitespace on empty lines.
2014-05-31 11:00:25 +03:00
Paul Sokolovsky
f69b9d379c
objstr: str_uni_istype(): Codestyle.
2014-05-31 10:59:34 +03:00
Kim Bauters
a3f4b83018
add methods isspace(), isalpha(), isdigit(), isupper() and islower() to str
2014-05-31 07:30:57 +01:00
Paul Sokolovsky
1f07b7e3c3
py: Reformat few long functions argument lists for clarity.
2014-05-31 03:36:37 +03:00
Paul Sokolovsky
b30a777ace
objfun: Typo fixes in comments.
2014-05-31 02:24:47 +03:00
Damien George
25c84643b6
py: Fix break from within a for loop.
...
Needed to pop the iterator object when breaking out of a for loop. Need
also to be careful to unwind exception handler before popping iterator.
Addresses issue #635 .
2014-05-30 15:20:41 +01:00
Paul Sokolovsky
8827682b35
objstr: *strip(): If nothing is stripped, don't create dup string.
2014-05-30 03:15:17 +03:00
Paul Sokolovsky
bcdffe53c6
objstr: *strip(): Fix handling of one-char subject strings.
2014-05-30 03:15:17 +03:00
Damien George
f55cf10101
py: Implement bignum '&' with negatives on lhs and rhs.
...
Needs proper coverage testing. Doesn't implement -ve & -ve.
Addresses issue #611 .
2014-05-29 15:01:49 +01:00
Damien George
d1e355ea8e
py: Fix check of small-int overflow when parsing ints.
...
Also unifies use of SMALL_INT_FITS macro across parser and runtime.
2014-05-28 14:51:12 +01:00
Damien George
813ed3bda6
py: Make int(<longint>) work by just returning the longint.
2014-05-28 14:09:46 +01:00
Damien George
503d611033
py: Implement long int parsing in int(...).
...
Addresses issue #627 .
2014-05-28 14:07:21 +01:00
Damien George
d8675541a9
py, vm: Where possible, make variables local to each opcode.
...
This helps the compiler do its optimisation, makes it clear which
variables are local per opcode and which global, and makes it consistent
when extra variables are needed in an opcode (in addition to old obj1,
obj2 pair, for example).
Could also make unum local, but that's for another time.
2014-05-25 22:58:04 +01:00
Damien George
f600a6a085
py: Slightly improve efficiency of mp_obj_new_str; rename str_new.
...
Reorder interning logic in mp_obj_new_str, to be more efficient.
str_new is globally accessible, so should be prefixed with mp_obj_.
2014-05-25 22:34:34 +01:00
Damien George
2617eebf2f
Change const byte* to const char* where sensible.
...
This removes need for some casts (at least, more than it adds need
for new casts!).
2014-05-25 22:27:57 +01:00
Damien George
f88fc7bd23
Merge branch 'pfalcon-keep-strings-uninterned'
2014-05-25 22:13:47 +01:00
Damien George
5042bce8fb
py: Don't automatically intern strings in parser.
...
This completes non-automatic interning of strings in the parser, so that
doc strings don't take up RAM. It complicates the parser and compiler,
and bloats stmhal by about 300 bytes. It's complicated because now
there are 2 kinds of parse-nodes that can be strings: interned leaves
and non-interned structs.
2014-05-25 22:06:06 +01:00
Paul Sokolovsky
5fd5af98d0
objlist: Implement support for arbitrary (3-arg) slices.
2014-05-25 22:12:56 +03:00
Paul Sokolovsky
de4b9329f9
py: Refactor slice helpers, preparing to support arbitrary slicing.
2014-05-25 21:21:57 +03:00
Damien George
3aaabd11a0
Merge branch 'keep-strings-uninterned' of github.com:pfalcon/micropython into pfalcon-keep-strings-uninterned
...
Conflicts:
py/parse.c
2014-05-25 13:19:31 +01:00
Paul Sokolovsky
ff4b6daa4f
sequence: Throw exception for not implemented slice steps.
2014-05-25 03:02:57 +03:00
Paul Sokolovsky
2705f4c782
objlist: Implement growing slice assignment.
...
This means that complete slice operations are supported for lists (but not
for bytearray's and array.array's).
2014-05-25 02:36:12 +03:00
Paul Sokolovsky
69d081a7cf
py: Handle case of slice start > stop in common sequence function.
2014-05-25 02:29:40 +03:00
Paul Sokolovsky
afaaf535e6
objslice: Support arbitrary objects start, stop, and step.
...
Older int-only encoding is not expressive enough to support arbitrary slice
assignment operations.
2014-05-25 01:42:24 +03:00
Damien George
7a4ddd2428
Add SystemExit exception and use it in unix/ and stmhal/ ports.
...
Addresses issue #598 .
2014-05-24 23:32:19 +01:00
Damien George
ee3fd46f13
Rename configuration variables controling Python features.
...
Now of the form MICROPY_PY_*. See issue #35 .
2014-05-24 23:03:12 +01:00
Paul Sokolovsky
d098c6bf85
objstr: Implement .endswith().
2014-05-24 22:46:51 +03:00
Paul Sokolovsky
561789d718
unix modsocket: Make .makefile() method more compliant.
...
.makefile() should allow to specify which stream time to create - byte
or text.
2014-05-24 21:24:37 +03:00
Paul Sokolovsky
806ea1f6ca
py: Initial attempts to actually allow implementing __new__ in Python.
...
Caveat is that __new__ should recurse to base class __new__, and ultimately,
object.__new__ is what handles instance allocation.
2014-05-22 00:32:00 +03:00
Paul Sokolovsky
0c937fa25a
objobject: Fix arguments to __init__().
2014-05-21 23:10:48 +03:00
Damien George
90886807a1
Merge branch 'master' of github.com:micropython/micropython
2014-05-21 20:35:02 +01:00
Damien George
58ebde4664
Tidy up some configuration options.
...
MP_ALLOC_* -> MICROPY_ALLOC_*
MICROPY_PATH_MAX -> MICROPY_ALLOC_PATH_MAX
MICROPY_ENABLE_REPL_HELPERS -> MICROPY_HELPER_REPL
MICROPY_ENABLE_LEXER_UNIX -> MICROPY_HELPER_LEXER_UNIX
MICROPY_EXTRA_* -> MICROPY_PORT_*
See issue #35 .
2014-05-21 20:32:59 +01:00
Paul Sokolovsky
a8408a8abe
objtype: super: Fall back to "object" lookup as last resort.
...
Also, define object.__init__() (semantically empty, purely CPython compat
measure). Addresses #520 .
2014-05-21 22:27:03 +03:00
Paul Sokolovsky
6a410789b8
objtype: super: Add stop condition for looking up in base types.
2014-05-21 22:27:03 +03:00
Damien George
0fd01683c6
Merge pull request #607 from Anton-2/osx-clang
...
Allow compilation of unix port under clang on OS X
2014-05-21 19:51:05 +01:00
Damien George
6ac5dced24
py: Rename MP_OBJ_NOT_SUPPORTED to MP_OBJ_NULL.
...
See issue #608 for justification.
2014-05-21 19:42:43 +01:00
Paul Sokolovsky
053765414c
modstruct: struct_calcsize: Fix case of uninitialized var.
2014-05-20 16:34:05 +03:00
Paul Sokolovsky
9e29666bf9
py: Implement proper separation between io.FileIO and io.TextIOWrapper.
...
io.FileIO is binary I/O, ans actually optional. Default file type is
io.TextIOWrapper, which provides str results. CPython3 explicitly describes
io.TextIOWrapper as buffered I/O, but we don't have buffering support yet
anyway.
2014-05-19 21:56:07 +03:00
Paul Sokolovsky
52386cafa0
objexcept: Implement explicit __init__ method, useful for subclasses.
2014-05-19 21:56:07 +03:00
Paul Sokolovsky
13684fd60b
objtype: Separate __new__ and __init__ methods.
...
Now schedule is: for native types, we call ->make_new() C-level method, which
should perform actions of __new__ and __init__ (note that this is not
compliant, but is efficient), but for user types, __new__ and __init__ are
called as expected.
Also, make sure we convert scalar attribute value to a bound-pair tight in
mp_obj_class_lookup() method, which avoids converting it again and again in
its callers.
2014-05-19 21:56:06 +03:00
Sven Wegener
7ba0fedf13
py: Fix mp_obj_t -> mp_const_obj_t for mp_obj_int_get_checked()
...
Signed-off-by: Sven Wegener <sven.wegener@stealer.net>
2014-05-17 11:21:12 +02:00
Paul Sokolovsky
bf27140193
py: More mp_identity usage.
2014-05-17 11:20:10 +03:00
Paul Sokolovsky
ab7bf28489
py: More const usage.
2014-05-17 11:20:10 +03:00
Paul Sokolovsky
c18ef2a9dd
objstr: startswith(): Accept optional "start" arg.
2014-05-15 21:33:18 +03:00
Paul Sokolovsky
70328e419a
py: Implement more complete bytes comparison handling.
2014-05-15 20:58:40 +03:00
Paul Sokolovsky
ad3baec12f
sequence: Fix yet another case of improper sequence comparison.
...
This time, in mp_seq_cmp_bytes(). How many more cases are still lurking?
2014-05-15 19:09:06 +03:00
Paul Sokolovsky
a47b64ae2d
objstringio: Implement io.BytesIO.
...
Done in generalized manner, allowing any stream class to be specified as
working with bytes.
2014-05-15 07:28:19 +03:00
Paul Sokolovsky
2a27365854
objstr.c: Partial implementation of .rsplit().
...
sep=None is TODO.
2014-05-14 02:42:20 +03:00
Damien George
51fab28e94
py: Improve mpz_and function.
...
This should now have correct (and optimal) behaviour.
2014-05-13 22:58:00 +01:00
Paul Sokolovsky
da9f0924ef
py, unix: Add copyright for modules I worked closely on.
2014-05-13 18:41:25 +03:00
Damien George
561e425903
py: Fix bug in mpz_and function.
...
Addresses issue #610 .
2014-05-12 23:27:29 +01:00
Damien George
915197a8f9
py: Remove emit_glue init and deinit. Needed only for debugging.
...
Debugging output for emit_glue now simplified so that the init and
deinit functions are no longer needed.
2014-05-12 23:11:14 +01:00
Damien George
97f9a2813e
py: Add support for __debug__ constant.
...
__debug__ now resolves to True or False. Its value needs to be set by
mp_set_debug().
TODO: call mp_set_debug in unix/ port.
TODO: optimise away "if False:" statements in compiler.
2014-05-12 23:07:34 +01:00
Damien George
96f137b24a
py: Rename BYTE_CODE to BYTECODE (this was missed in previous rename).
2014-05-12 22:35:37 +01:00
Paul Sokolovsky
df94b717b4
modstruct: Implement count specifier for strings (e.g. "100s").
...
Infra for counts of other types is there, need last mile to be implemented.
2014-05-12 23:45:50 +03:00
Antonin ENFRUN
da1fffaa09
Fix some unused variables, and silence a clang warning about initialization override in vmentrytable.h
2014-05-12 09:06:18 +02:00
Antonin ENFRUN
6caae0bcb1
unix: Create __bss_start and _end symbols for Mach-O targets.
...
It's a hack, but can't find a cleaner way to do it.
2014-05-12 00:13:10 +02:00
Paul Sokolovsky
147c80bf7c
modstruct: Use MP_OBJ_FUN_ARGS_MAX instead of -1.
2014-05-11 22:50:27 +03:00
Paul Sokolovsky
5ebd5f0f19
objstr: Slice indexing: support bytes properly.
2014-05-11 21:22:59 +03:00
Paul Sokolovsky
bfb8819c0c
objstr: Make .split() support bytes.
2014-05-11 21:17:28 +03:00
Paul Sokolovsky
5e5d69b35e
objstr: Make .join() support bytes.
2014-05-11 21:13:01 +03:00
Paul Sokolovsky
7e7940c39d
py: Fix __len__ special method result handling.
...
Having both MP_OBJ_NOT_SUPPORTED and MP_OBJ_NULL is arguably confusing.
2014-05-11 20:51:31 +03:00
Paul Sokolovsky
c48d6f7add
py: Don't expect that type->getiter() always returns iterator, check for NULL.
...
This is better than forcing each getiter() implementation to raise exception.
2014-05-11 20:51:31 +03:00
Paul Sokolovsky
0f570cfccf
showbc: Decode MAP_ADD.
2014-05-11 20:51:31 +03:00
Paul Sokolovsky
ff30666c69
py: Add basic implementation of hasattr() function.
2014-05-11 20:51:30 +03:00
Damien George
ee7a880d6e
py: Use mp_arg_check_num in more places.
...
Updated functions now do proper checking that n_kw==0, and are simpler
because they don't have to explicitly raise an exception. Down side is
that the error messages no longer include the function name, but that's
acceptable.
Saves order 300 text bytes on x64 and ARM.
2014-05-11 18:37:21 +01:00
Damien George
1d34e32431
py: frozenset() creates an empty frozenset.
2014-05-11 18:28:48 +01:00
Damien George
2323ef9182
py: Rename globally-accessible tuple functions, prefix with mp_obj_.
...
Likely there are other functions that should be renamed, but this is a
start.
2014-05-11 18:00:45 +01:00
Damien George
c59af52e84
py: Rename some unichar functions for consistency.
2014-05-11 17:53:11 +01:00
Damien George
89755ae67f
py: Rename MICROPY_SYS_EXIT to MICROPY_MOD_SYS_EXIT.
...
For consistency with MICROPY_MOD_SYS_STDFILES, etc.
2014-05-11 17:35:43 +01:00
Paul Sokolovsky
eea0118654
py: Give up and make mp_obj_str_get_data() deal with bytes too.
...
This is not fully correct re: error handling, because we should check that
that types are used consistently (only str's or only bytes), but magically
makes lot of functions support bytes.
2014-05-11 13:51:24 +03:00
Paul Sokolovsky
b2d4fc06fc
objstr: Make *strip() accept bytes.
2014-05-11 13:17:29 +03:00
Paul Sokolovsky
ea9708092e
objtuple: Go out of the way to support comparison of subclasses.
...
Two things are handled here: allow to compare native subtypes of tuple,
e.g. namedtuple (TODO: should compare type too, currently compared
duck-typedly by content). Secondly, allow user sunclasses of tuples
(and its subtypes) be compared either. "Magic" I did previously in
objtype.c covers only one argument (lhs is many), so we're in trouble
when lhs is native type - there's no other option besides handling
rhs in special manner. Fortunately, this patch outlines approach with
fast path for native types.
2014-05-11 03:33:19 +03:00
Paul Sokolovsky
9511f60f01
py: Don't try to "bind" types store as attributes of objects.
...
This was hit when trying to make urlparse.py from stdlib run. Took
quite some time to debug.
TODO: Reconsile bound method creation process better, maybe callable is
to generic type to bind at all?
2014-05-11 03:33:19 +03:00
Paul Sokolovsky
69f3eb2c96
objstr: Make .[r]partition() work with bytes.
2014-05-11 03:33:19 +03:00
Paul Sokolovsky
285683d203
objboundmeth: If detailed reporting enabled, print object content.
...
Similar to closure and cell.
2014-05-11 02:27:42 +03:00
Paul Sokolovsky
7aca1cae34
py: Start making good use of mp_const_obj_t.
2014-05-11 02:26:42 +03:00
Paul Sokolovsky
3f8d34ca83
objlist: Support list slice deletion.
2014-05-10 23:03:30 +03:00
Paul Sokolovsky
94d8246272
objlist: Implement non-growing slice assignment.
...
Slice value to assign can be only a list so far too.
2014-05-10 22:24:31 +03:00
Paul Sokolovsky
d915a52eb6
py: Fix prefix on few sequence helpers, was incorrectly "mp_".
2014-05-10 21:36:33 +03:00
Paul Sokolovsky
aa4d19a05c
objtype: Comments for duplicating code in runtime.c.
2014-05-10 21:26:08 +03:00
Paul Sokolovsky
1a7403bb74
objtype: Implement ->getiter() method for instances.
...
Includes support for native bases.
2014-05-10 21:26:08 +03:00
Paul Sokolovsky
0bc15941c2
py: Make mp_obj_print() handle null object w/o segfault if debug build.
...
Happens regularly when used for debugging.
2014-05-10 21:26:07 +03:00
Paul Sokolovsky
7067d69bcc
objnamedtuple: Support iteration.
2014-05-10 21:26:07 +03:00
Damien George
0fb80c303a
py: Compress a little the bytecode emitter structure.
2014-05-10 18:16:21 +01:00
Damien George
9597771fe4
py, emitters: Fix dummy_data size for bytecode and thumb.
...
Thumb uses a bit less RAM, bytecode uses a tiny bit more, to avoid
overflow of the dummy buffer in certain cases.
Addresses issue #599 .
2014-05-10 18:07:08 +01:00
Damien George
7db57bf6b2
Merge branch 'master' of github.com:micropython/micropython
2014-05-10 17:50:05 +01:00
Paul Sokolovsky
6913521911
objstr: Implement .lower() and .upper().
2014-05-10 19:49:07 +03:00
Damien George
e1199ecf10
py, lexer: Add allocation policy config; return NULL if can't allocate.
2014-05-10 17:48:01 +01:00
Damien George
1b82e9af5c
py: Improve handling of memory error in parser.
...
Parser shouldn't raise exceptions, so needs to check when memory
allocation fails. This patch does that for the initial set up of the
parser state.
Also, we now put the parser object on the stack. It's small enough to
go there instead of on the heap.
This partially addresses issue #558 .
2014-05-10 17:36:41 +01:00
Paul Sokolovsky
ad6178bb08
builtinimport: Fix broken namespace imports due to dup vstr_cut_tail_bytes().
2014-05-10 19:00:03 +03:00
Paul Sokolovsky
f9589d2f23
builtinimport: Fix comment orphaned by one of previous commits.
2014-05-10 18:46:02 +03:00
Paul Sokolovsky
deaeaac469
modsys: Enable sys.exit() per port after all.
2014-05-10 17:26:47 +03:00
Paul Sokolovsky
d99e9083cb
modsys, unix: Add sys.exit(), should be implemented by a port.
2014-05-10 16:56:21 +03:00
Paul Sokolovsky
d80e2476c7
py: Disable frozenset by default, enable on unix.
...
Takes 416 text bytes on x86.
2014-05-10 16:56:20 +03:00
Paul Sokolovsky
b181b581aa
objset: Give up and implement frozenset.
...
Tired of patching CPython stdlib for it.
2014-05-10 16:56:20 +03:00
Paul Sokolovsky
d86020ac4f
objtype: Don't treat inheritance from "object" as from native type.
...
"object" type in MicroPython currently doesn't implement any methods, and
hopefully, we'll try to stay like that for as long as possible. Even if we
have to add something eventually, look up from there might be handled in
adhoc manner, as last resort (that's not compliant with Python3 MRO, but
we're already non-compliant). Hence: 1) no need to spend type trying to
lookup anything in object; 2) no need to allocate subobject when explicitly
inheriting from object; 3) and having multiple bases inheriting from object
is not a case of incompatible multiple inheritance.
2014-05-10 16:56:20 +03:00
Damien George
d0a5bf34f7
py: Tidy up returning NULL which should be MP_OBJ_NOT_SUPPORTED.
2014-05-10 13:55:11 +01:00
Damien George
ccc85ea0da
py: Combine native emitters to 1 glue function; distinguish viper.
...
This patch simplifies the glue between native emitter and runtime,
and handles viper code like inline assember: return values are
converted to Python objects.
Fixes issue #531 .
2014-05-10 13:40:46 +01:00
Damien George
3417bc2f25
py: Rename byte_code to bytecode everywhere.
...
bytecode is the more widely used. See issue #590 .
2014-05-10 10:36:38 +01:00
Paul Sokolovsky
6e8085b425
py: Fix base "detection" for int('0<hexdigit>', 16).
2014-05-10 04:45:15 +03:00
Paul Sokolovsky
7b0f9a7d9b
bytes: Implement comparison and other binary operations.
...
Should support everything supported by strings.
2014-05-10 04:45:02 +03:00
Paul Sokolovsky
070c78af5d
runtime0.h: Group binary ops by fives.
...
So one has some chance to convert numeric op code into symbol.
2014-05-10 04:44:55 +03:00
stijn
5ed284a15e
windows: Add modtime implementation
2014-05-09 13:58:15 +02:00
Damien George
8c1c7488b2
Add gc.enable, gc.disable; remove pyb.gc.
2014-05-08 23:04:49 +01:00
Paul Sokolovsky
62b5f42d81
Merge pull request #568 from stinos/windows-msvc-port
...
Windows MS Visual C port
2014-05-09 00:03:42 +03:00
Paul Sokolovsky
9e76b1181b
Draft approach towards resolving https://github.com/micropython/micropython/issues/560#issuecomment-42213955
2014-05-08 22:43:46 +03:00
Damien George
ffae48d750
py, compiler: Add basic support for A=const(123).
...
You can now do:
X = const(123)
Y = const(456 + X)
and the compiler will replace X and Y with their values.
See discussion in issue #266 and issue #573 .
2014-05-08 15:58:39 +00:00
stijn
01d6be4d51
Windows MSVC port
...
Extend the windows port so it compiles with the toolchain from Visual Studio 2013
2014-05-08 10:06:43 +02:00
Damien George
d509ac25f9
py: Fix stack access in thumb native emitter.
2014-05-07 23:27:45 +01:00
Damien George
c3602e159c
py: Fix emitcpy, to work with latest changes to PASS variables.
2014-05-07 18:57:32 +01:00
Damien George
a32c1e41cc
py: Improve native emitter; now supports more opcodes.
2014-05-07 18:30:52 +01:00
Damien George
36db6bcf54
py, compiler: Improve passes; add an extra pass for native emitter.
2014-05-07 17:24:22 +01:00
Damien George
ca25c15d56
py, compiler: Start adding support for compile-time constants.
...
Just a start, no working code yet. As per issue #573 .
2014-05-07 15:42:03 +01:00
Paul Sokolovsky
0ef015b253
stream: Make non-blcoking stream support configurable.
...
Enable only on unix. To avoid unpleasant surprises with error codes.
2014-05-07 02:25:45 +03:00
Paul Sokolovsky
b9be45e421
stream: Use standard name of DEFAULT_BUFFER_SIZE.
2014-05-07 02:17:14 +03:00
Paul Sokolovsky
6e73143de8
stream: Add compliant handling of non-blocking readall().
2014-05-07 02:17:14 +03:00
Paul Sokolovsky
a592104acd
stream: Add compliant handling of non-blocking read()/write().
...
In case of empty non-blocking read()/write(), both return None. read()
cannot return 0, as that means EOF, so returns another value, and then
write() just follows. This is still pretty unexpected, and typical
"if not len:" check would treat this as EOF. Well, non-blocking files
require special handling!
This also kind of makes it depending on POSIX, but well, anything else
should emulate POSIX anyway ;-).
2014-05-07 02:17:14 +03:00
Damien George
93afa230a4
py, parser: Add commented-out code to discard doc strings.
...
Doesn't help with RAM reduction because doc strings are interned as soon
as they are encountered, which is too soon to do any optimisations on
them.
2014-05-06 21:44:11 +01:00
Damien George
c53b408f28
Merge branch 'master' of https://github.com/micropython/micropython
...
Conflicts:
py/argcheck.c
py/objenumerate.c
py/runtime.h
2014-05-06 16:52:35 +00:00
Damien George
491cbd6a7c
py: Add keyword arg support to enumerate constructor.
...
Need to have a policy as to how far we go adding keyword support to
built ins. It's nice to have, and gets better CPython compatibility,
but hurts the micro nature of uPy.
Addresses issue #577 .
2014-05-06 16:38:54 +00:00
Paul Sokolovsky
b473d0ae86
py: bytes(), str(): Add NotImplementedError for kwargs.
...
Addresses #567 .
2014-05-06 19:31:58 +03:00
Paul Sokolovsky
47d3bd3b31
py: enumerate(): Add NotImplementedError for kwargs.
...
Addresses #577 .
2014-05-06 19:31:49 +03:00
Paul Sokolovsky
f9e54e0ea5
modgc: Add new module for GC-related functionality.
2014-05-06 02:28:49 +03:00
stijn
912ca7701d
py: Comment exc_state member from mp_obj_gen_instance_t as it gives trouble
...
...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.
2014-05-05 22:56:27 +03:00
Paul Sokolovsky
179977a0da
py-version.sh: Use --always option of git describe.
2014-05-05 21:28:12 +03:00
Damien George
66e18f04d8
py: Turn down amount of RAM parser and compiler use.
...
There are 2 locations in parser, and 1 in compiler, where memory
allocation is not precise. In the parser it's the rule stack and result
stack, in the compiler it's the array for the identifiers in the current
scope. All other mallocs are exact (ie they don't allocate more than is
needed).
This patch adds tuning options (MP_ALLOC_*) to mpconfig.h for these 3
inexact allocations.
The inexact allocations in the parser should actually be close to
logarithmic: you need an exponentially larger script (absent pathological
cases) to use up more room on the rule and result stacks. As such, the
default allocation policy for these is now to start with a modest sized
stack, but grow only in small increments.
For the identifier arrays in the compiler, these now start out quite
small (4 entries, since most functions don't have that many ids), and
grow incrementally by 6 (since if you have more ids than 4, you probably
have quite a few more, but it wouldn't be exponentially more).
Partially addresses issue #560 .
2014-05-05 13:19:03 +01:00
Paul Sokolovsky
22a0d67c0f
py-version.sh: Make it work in case no git tag is present.
2014-05-05 01:01:01 +03:00
Paul Sokolovsky
6b344d7816
py, unix: Add -v option, print bytecode dump if used.
...
This will work if MICROPY_DEBUG_PRINTERS is defined, which is only for
unix/windows ports. This makes it convenient to user uPy normally, but
easily get bytecode dump on the spot if needed, without constant recompiles
back and forth.
TODO: Add more useful debug output, adjust verbosity level on which
specifically bytecode dump happens.
2014-05-05 00:57:00 +03:00
Paul Sokolovsky
4187068cad
showbc: Quote block name, so it was easily visible.
2014-05-04 22:42:11 +03:00
Damien George
04b9147e15
Add license header to (almost) all files.
...
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/.
2014-05-03 23:27:38 +01:00
Damien George
ff380c2558
Merge pull request #535 from pfalcon/blurb
...
Proposed license/copyright file header.
2014-05-03 22:56:50 +01:00
Damien George
cff638a43a
Merge branch 'mingw-float-printf' of github.com:stinos/micropython into stinos-mingw-float-printf
2014-05-03 22:41:40 +01:00
Damien George
d5f5b2f766
py, stream: Implement readlines for a stream.
2014-05-03 22:01:32 +01:00
Damien George
349e4c4a2f
py: Add --dirty flag to git describe.
2014-05-03 21:15:32 +01:00
stijn
72521a1c17
mingw: Fix number of exponent digits in floating point formatting
...
By default mingw outputs 3 digits instead of the standard 2 so all float
tests using printf fail. Using setenv at the start of the program fixes this.
To accomodate calling platform specific initialization a
MICROPY_MAIN_INIT_FUNC macro is used which is called in mp_init()
2014-05-03 20:15:15 +02:00
Damien George
977a0ce287
py: Print tag/version/git describe in uPy banner.
2014-05-03 19:02:14 +01:00
Damien George
93e51b594a
stmhal: Enable cmath module.
2014-05-03 18:40:50 +01:00
Damien George
9c5fc83e6a
py, objtype.c: Rename class_ to instance_ following change of typedef.
...
This follows up 0a7e01ae3c
.
2014-05-03 17:19:35 +01:00
Damien George
c12242e9df
Merge pull request #546 from stinos/relax-makeqstrdata
...
More relaxed parsing of preprocessed qstr header
2014-05-03 13:27:04 +01:00
Paul Sokolovsky
7a14022604
Merge pull request #552 from stinos/mingw-alloca
...
py: Use <alloca.h> for alloca()
2014-05-03 14:39:47 +03:00
Paul Sokolovsky
418aca976c
objclosure, objcell: Print detailed representation if was requested.
...
Well, it is bound to "detailed error reporting", but that's closest what we
have now without creating new entities.
2014-05-03 14:16:11 +03:00
stijn
1dc7f0427b
More relaxed parsing of preprocessed qstr header
...
The original parsing would error out on any C declarations that are not typedefs
or extern variables. This limits what can go in mpconfig.h and mpconfigport.h,
as they are included in qstr.h. For instance even a function declaration would be
rejected and including system headers is a complete no-go.
That seems too limiting for a global config header, so makeqstrdata now
ignores everything that does not match a qstr definition.
2014-05-03 10:26:31 +02:00
stijn
98e2ee0ec1
py: Use <alloca.h> for alloca()
...
alloca() is declared in alloca.h which als happens to be included by stdlib.h.
On mingw however it resides in malloc.h only.
So if we include alloca.h directly, and add an alloca.h for mingw in it's port
directory we can get rid of the mingw-specific define to include malloc.h
and the other ports are happy as well.
2014-05-03 10:14:53 +02:00
Paul Sokolovsky
f54bcbf099
py, unix: Make "mpconfig.h" be first included, as other headers depend on it.
...
Specifically, nlr.h does.
2014-05-02 17:48:40 +03:00
Paul Sokolovsky
e0954d426f
objtype: Work around stupid strict aliasing check.
2014-05-02 17:48:40 +03:00
Paul Sokolovsky
91e556af23
objexcept: Support tracebacks for user Exception subclasses.
2014-05-02 02:31:30 +03:00
Paul Sokolovsky
0a7e01ae3c
objtype: Rename mp_obj_class_t -> mp_obj_instance_t and move to local header.
...
TODO: Rename methods.
2014-05-02 02:14:38 +03:00
Paul Sokolovsky
d8351ca8a0
objtype: .print() Exception instances in adhoc way.
...
This is ugly, just as expected.
2014-05-02 02:00:47 +03:00
Paul Sokolovsky
28dfbc2ba2
Merge pull request #544 from lurch/fix-minmax
...
Fix the builtin min() and max() functions (and add tests).
2014-05-01 23:42:18 +03:00
Paul Sokolovsky
7917b731f6
objfun: More debug logging.
2014-05-01 23:22:11 +03:00
Paul Sokolovsky
5ba58f4a1a
objgenerator: Fix check for too few args passed to gen function.
2014-05-01 23:22:11 +03:00
Paul Sokolovsky
c3103b55c1
objgenerator: .print(): Output real underlying function name.
2014-05-01 23:22:11 +03:00
Andrew Scheller
37067666ee
Fix the builtin min() and max() functions (and add tests).
...
Fixes #539
2014-05-01 21:21:43 +01:00
Paul Sokolovsky
d32bab27bb
py: Add copyright/license header to each file.
2014-05-01 02:54:16 +03:00
Paul Sokolovsky
1f85d6255d
py: Add tentative scheme for error messages configuration.
2014-05-01 01:50:35 +03:00
Paul Sokolovsky
68551a8428
objfun: Add function name accessor and .print slot method.
2014-05-01 01:50:35 +03:00
Damien George
37977b7b27
Merge pull request #528 from pfalcon/native-subclass1
...
Initial support for subclassing native types
2014-04-30 21:02:50 +01:00
Paul Sokolovsky
22d0598818
objfun: Factor out function to report positional args mismatch.
2014-04-30 05:37:28 +03:00
Paul Sokolovsky
e908591baa
py: Abstract no-return attribute for functions a bit.
2014-04-30 05:35:18 +03:00
Paul Sokolovsky
b1ce37d32e
py: If setjmp NLR implementation is forced, omit native versions.
2014-04-30 04:19:20 +03:00
Paul Sokolovsky
851c856585
nlr.h: As we treat all warnings as errors, can't use #warning.
...
And this is not good.
2014-04-30 04:14:31 +03:00
Paul Sokolovsky
7f0419c0e5
objtype: Support calling normal methods inherited from native base class.
...
Biggest part of this support is refactoring mp_obj_class_lookup() to return
standard "bound member" pair (mp_obj_t[2]). Actual support of inherited
native methods is 3 lines then. Some inherited features may be not supported
yet (e.g. native class methods, native properties, etc., etc.). There may
be opportunities for further optimization too.
2014-04-30 02:14:30 +03:00
Paul Sokolovsky
443857de98
objtype: Add support for looking up non-method attrs in native base class.
2014-04-29 20:31:13 +03:00
Paul Sokolovsky
6ead0d2fbc
objtype: Implement basic framework for subclassing native types.
...
This implements checking of base types, allocation and basic initialization,
and optimized support for special method lookups. Other features are not yet
supported.
2014-04-29 20:31:13 +03:00
Damien George
186e463a9e
py: Fix bug in map lookup of interned string vs non-interned.
...
Had choice of either interning or forcing full equality comparison, and
chose latter. See comments in mp_map_lookup.
Addresses issue #523 .
2014-04-28 12:11:57 +01:00
Damien George
185f9c1c46
py: Fix lexerunix, where not all data may be read from a file.
...
Addresses issue #526 .
2014-04-28 11:43:28 +01:00
Damien George
0c8fcb9c49
py: Remove silly comment about interning keywords.
...
Of course, keywords are turned into lexer tokens in the lexer, so will
never need to be interned (unless you do something like x="def").
As it is now, the following on pyboard makes no new qstrs:
import pyb
pyb.info()
2014-04-28 09:56:31 +01:00
Paul Sokolovsky
a224067846
py: Clear allocated, but unused memory in containers.
...
Also, clear up freed slots in containers.
As a follow up to 32bef315be
.
2014-04-28 00:33:21 +03:00
Paul Sokolovsky
7ce6a8fe46
objlist: We no longer need to assert on mem alloc results.
...
They either succeed or raise exception.
2014-04-28 00:33:21 +03:00
Paul Sokolovsky
48bf6b3bd0
objlist: Use static small int constructor.
2014-04-28 00:33:21 +03:00
Damien George
708c073250
py: Add '*' qstr for 'import *'; use blank qstr for comprehension arg.
2014-04-27 19:23:46 +01:00
Damien George
968bf34c4c
py: Remove unnecessary LOAD_CONST_ID bytecode.
...
It's the same as LOAD_CONST_STR.
2014-04-27 19:12:05 +01:00
Damien George
db12891918
py: Eliminate 'op' variable in VM dispatch loop.
...
Remembering the last op is rarely needed, and when it is, can simply use
*save_ip.
2014-04-27 18:19:06 +01:00
Damien George
9d181f62dc
py: Save some ROM by shortening compiler error messages.
...
Messages are still explanatory, while taking a little less ROM.
2014-04-27 16:55:27 +01:00
Damien George
2c0842b3c5
py: Change the way function arguments are compiled.
...
New way uses slightly less ROM and RAM, should be slightly faster, and,
most importantly, allows to catch the error "non-keyword arg following
keyword arg".
Addresses issue #466 .
2014-04-27 16:46:51 +01:00
Damien George
2827d62e8b
py: Implement keyword-only args.
...
Implements 'def f(*, a)' and 'def f(*a, b)', but not default
keyword-only args, eg 'def f(*, a=1)'.
Partially addresses issue #524 .
2014-04-27 15:50:52 +01:00
Damien George
36cbd0db7e
Merge branch 'master' of github.com:micropython/micropython
2014-04-26 22:24:45 +01:00
Damien George
32bef315be
py, gc: Only zero out the extra bytes at the end of the heap chunk.
...
This is a small optimisation to zero out only the additional bytes that
the caller did not ask for.
2014-04-26 22:23:42 +01:00
Paul Sokolovsky
27f5bdd6d4
py: "read" & "write" are so common that make them core.
...
Few other strings move to core, but make depend on "io" module.
2014-04-26 21:15:56 +03:00
Paul Sokolovsky
100cd36a0e
objstringio: Compile only if MICROPY_ENABLE_MOD_IO defined.
2014-04-26 20:59:39 +03:00
Paul Sokolovsky
cb9dc086a3
modio: Implement io.StringIO class.
2014-04-26 20:26:14 +03:00
Damien George
dbc81df5d4
Simplify names for argcheck.c / arg parsing.
2014-04-26 11:19:17 +01:00
Damien George
6d3c5e4301
Add ARRAY_SIZE macro, and use it where possible.
2014-04-26 10:47:29 +01:00
Damien George
d139c489ba
Merge branch 'master' of github.com:micropython/micropython
2014-04-26 10:31:58 +01:00
Damien George
107c9fb235
py: Make collections module configurable, enabled by default.
2014-04-26 10:31:15 +01:00
Paul Sokolovsky
e14d096cb7
objstr: Optimize .rstrip() by scanning string from end.
2014-04-26 06:48:31 +03:00
Paul Sokolovsky
881078403e
objstr: Implement .lstrip() & .rstrip().
...
Share code with .strip(). TODO: optimize .rstrip().
2014-04-26 06:20:08 +03:00
Paul Sokolovsky
45fb143ba6
streams: Make .write() support arbitrary objects with buffer interface.
...
This in particular fixes writing str vs bytes.
2014-04-26 05:54:16 +03:00
Damien George
1463c1fa82
py: Add MICROPY_ENABLE_DOC_STRING, disabled by default.
...
Also add a few STATIC's to some compile functions that should have them.
Addresses issue #521 .
2014-04-25 23:52:57 +01:00
Damien George
c492cf1f44
Merge branch 'master' of github.com:micropython/micropython
2014-04-25 23:45:52 +01:00
Damien George
daab651c5c
py, gc: Zero out newly allocated blocks in the GC.
...
Also add some more debugging output to gc_dump_alloc_table().
Now that newly allocated heap is always zero'd, maybe we just make this
a policy for the uPy API to keep it simple (ie any new implementation of
memory allocation must zero all allocations). This follows the D
language philosophy.
Before this patch, a previously used memory block which had pointers in
it may still retain those pointers if the new user of that block does
not actually use the entire block. Eg, if I want 5 blocks worth of
heap, I actually get 8 (round up to nearest 4). Then I never use the
last 3, so they keep their old values, which may be pointers pointing to
the heap, hence preventing GC.
In rare (or maybe not that rare) cases, this leads to long, unintentional
"linked lists" within the GC'd heap, filling it up completely. It's
pretty rare, because you have to reuse exactly that memory which is part
of this "linked list", and reuse it in just the right way.
This should fix issue #522 , and might have something to do with
issue #510 .
2014-04-25 23:37:55 +01:00
Paul Sokolovsky
755565d2cb
py: Support instance __call__ method.
2014-04-25 21:17:42 +03:00
Damien George
410f30772f
py, gc: Fix old gc_realloc for case when NULL is passed in as ptr.
2014-04-25 11:44:53 +00:00
Damien George
c0dc7c3dfa
py, vm: Fix recent bug where state is freed too early.
2014-04-24 15:42:05 +01:00
Damien George
d5e8482c4a
py, vm: Free heap-allocated state if it was allocated on the heap.
2014-04-24 13:52:06 +01:00
Damien George
978939156d
Merge pull request #519 from pfalcon/exc-no-ptr-to-field
...
objexcept: Don't store args tuple within exception object.
2014-04-24 11:14:18 +01:00
Damien George
1cbb99d1db
Merge pull request #518 from pfalcon/vm-trace
...
vm: Add rudimentary bytecode execution tracing capability.
2014-04-24 11:06:10 +01:00
Paul Sokolovsky
1c1d902cd3
Makefile: Allow to override "super optimization" options used for some files.
...
To help with debugging issue like #510 for example.
2014-04-24 02:59:43 +03:00
Paul Sokolovsky
1acf22f17b
objexcept: Don't store args tuple within exception object.
...
To avoid pointer-to-field GC problem.
2014-04-23 04:07:00 +03:00
Paul Sokolovsky
c5e32c6995
vm: Add rudimentary bytecode execution tracing capability.
2014-04-23 03:46:00 +03:00
Paul Sokolovsky
4c6b375960
showbc: MAKE_CLOSURE*: Update for new closed-over encoding.
2014-04-23 03:23:39 +03:00
Paul Sokolovsky
5e3e2d00ea
emitglue: Typo fix in var name.
2014-04-23 03:23:32 +03:00
Paul Sokolovsky
20e9ed3916
builtinimport: If there was error compiling imported module, raise exception.
2014-04-22 02:53:20 +03:00
Paul Sokolovsky
dec31bb872
objexcept: Add mp_obj_new_exception_arg1() convenience function.
2014-04-22 00:02:51 +03:00
Damien George
e5f8a77db6
py: Add 'align' and 'data' meta-instructions to inline assembler.
2014-04-21 13:33:15 +01:00
Damien George
806f4aef9a
py: Fix super() bug, where it didn't allow instance access.
...
This is a one-liner fix. It gets the class-super.py test passing, but
is probably not a complete fix.
2014-04-21 02:11:07 +01:00
Damien George
0ae21a81f7
Merge branch 'master' of github.com:micropython/micropython
2014-04-21 01:18:05 +01:00
Damien George
64ba6ca127
py: Small change to mp_arg_parse_all.
2014-04-21 00:09:44 +01:00
Paul Sokolovsky
353b0289f3
py: Add win32-specific header for alloca().
2014-04-20 22:24:44 +03:00
Paul Sokolovsky
41809a1ced
nlrx86.S: Another ifdef for win32 symbol underscoring issues.
2014-04-20 22:24:44 +03:00
Paul Sokolovsky
26905259d0
objarray: Slice subscription operation: properly test for op subtype.
...
Also, checked that both bytearray and array.array actually support generic
(a-la list) slice assignment and deletion. Added TODOs.
2014-04-20 20:58:33 +03:00
Paul Sokolovsky
5b991ae2d3
gc: gc_realloc(): Fix byte-to-block calculation.
2014-04-20 20:46:39 +03:00
Damien George
dde739d364
py, gc: Further simplify coding-style of gc_realloc.
...
No logic changes, just coding style to make it easy to read.
2014-04-20 18:16:25 +01:00
Damien George
5f6a25fc50
py: Wrap #if's around emitter functions that are used only by emitcpy.
...
3 emitter functions are needed only for emitcpy, and so we can #if them
out when compiling with emitcpy support.
Also remove unused SETUP_LOOP bytecode.
2014-04-20 18:02:27 +01:00
Damien George
3558f62fb5
py: Making closures now passes pointer to stack, not a tuple for vars.
...
Closed over variables are now passed on the stack, instead of creating a
tuple and passing that. This way memory for the closed over variables
can be allocated within the closure object itself. See issue #510 for
background.
2014-04-20 17:50:40 +01:00
Paul Sokolovsky
bc5f0c1977
objclosure: Store reference to entire closed variables tuple.
...
Avoids pointer-to-field garbage collection issue. Fixes #510 .
2014-04-20 13:08:33 +03:00
Paul Sokolovsky
2758b7d3e2
objcell: Add disabled by default print method for debugging.
2014-04-20 13:08:33 +03:00
Paul Sokolovsky
c86889dafb
gc: "new" gc_realloc: Rewrite in plain C, fixing bunch of bugs.
...
There were typos, various rounding errors trying to do concurrent counting
in bytes vs blocks, complex conditional paths, superfluous variables, etc.,
etc., all leading to obscure segfaults.
2014-04-20 13:08:33 +03:00
Paul Sokolovsky
ed162b5ef2
gc: Recover simple gc_realloc implementation, make easier to switch between.
2014-04-20 13:08:33 +03:00
Paul Sokolovsky
0f836ef893
modstruct: Add 'O' typecode for passing mp_obj_t.
...
Useful as callback data, etc.
2014-04-20 13:08:33 +03:00
Paul Sokolovsky
4e4fa94c4c
modstruct: Use proper int accessor which checks input value type.
2014-04-20 13:08:33 +03:00
Damien George
53775026e7
Merge branch 'master' of github.com:micropython/micropython
2014-04-20 01:26:25 +01:00
Damien George
f87b35e779
py: Fix mp_arg_parse_all.
2014-04-20 01:25:15 +01:00
Damien George
a3f94e0030
py: Add arg checking helper functions.
...
These are to assist in writing native C functions that take positional
and keyword arguments. mp_arg_check_num is for just checking the
number of arguments is correct. mp_arg_parse_all is for parsing
positional and keyword arguments with default values.
2014-04-20 00:13:22 +01:00
Paul Sokolovsky
d6e12723ed
objarray: Implement slice subscription.
2014-04-19 20:06:57 +03:00
Paul Sokolovsky
6204460461
modstruct: Initial implementation of struct.pack().
2014-04-19 03:22:08 +03:00
Paul Sokolovsky
504e23388c
objstr: Init hash in mp_obj_str_builder_start() to 0.
2014-04-19 03:21:06 +03:00
Paul Sokolovsky
4602b9a79f
obj.h: Typo fix in comment.
2014-04-19 03:21:06 +03:00
Paul Sokolovsky
1355cf42f2
modstruct: Fix .calcsize() to account for struct type/alignment.
2014-04-19 03:21:06 +03:00
Paul Sokolovsky
5695e07256
modstruct: Support 'q' & 'Q' type codes.
2014-04-19 03:18:14 +03:00
Damien George
561f83c9cf
Merge branch 'master' of github.com:micropython/micropython
2014-04-18 23:35:24 +01:00
Damien George
71e9bfa20d
py: Add mp_binary_set_val_array_from_int, to store an int directly.
2014-04-18 23:28:12 +01:00
Damien George
b11b85adaa
py: Allow to pass buffer protocol flags to get_buffer helper funcs.
2014-04-18 22:59:24 +01:00
Damien George
57a4b4f178
py: Add typecode to buffer protocol.
...
When querying an object that supports the buffer protocol, that object
must now return a typecode (as per binary.[ch]). This does not have to
be honoured by the caller, but can be useful for determining element
size.
2014-04-18 22:29:21 +01:00
Damien George
3fd2d7fad2
py: Tidy up function argument error messages.
...
We are not as verbose as CPython, and maybe a bit too cryptic sometimes.
2014-04-18 22:06:55 +01:00
Damien George
32ca164992
py: Tidy up array.array; add more error handling.
2014-04-18 22:04:06 +01:00
Paul Sokolovsky
0fc4775cd6
sequence: Further simplify sequence comparison.
2014-04-18 21:47:58 +03:00
Paul Sokolovsky
83eba5dec5
sequence: Fix glaring bug in sequence comparison.
2014-04-18 21:42:54 +03:00
Paul Sokolovsky
7de5377ca7
objfloat: Try to achieve the same float printing format as CPython does.
...
Test usecase I used is print(time.time()) and print(time.time() - time.time()).
On Linux/Glibc they now give the same output as CPython 3.3. Specifically,
time.time() gives non-exponential output with 7 decimal digits, and subtraction
gives exponential output e-06/e-07.
2014-04-18 21:21:59 +03:00
Damien George
90edf9e13b
inlinethumb: Add wfi, cpsid and cpsie instructions.
2014-04-18 16:56:54 +01:00
Paul Sokolovsky
599bbc111c
py: from import * should not import symbols starting with underscore.
...
I skipped implementing this initially, but then it causes __name__
of current module be overwritten and relative imports fail.
2014-04-18 04:20:17 +03:00
Damien George
5b65f0c7d3
py: Rename USE_COMPUTED_GOTOS to USE_COMPUTED_GOTO and enable on stmhal.
...
On stmhal, computed gotos make the binary about 1k bigger, but makes it
run faster, and we have the room, so why not. All tests pass on
pyboard using computed gotos.
2014-04-17 23:24:13 +01:00
Damien George
ea8d06c39d
py: Add MP_OBJ_STOP_ITERATION and make good use of it.
...
Also make consistent use of MP_OBJ_NOT_SUPPORTED and MP_OBJ_NULL.
This helps a lot in debugging and understanding of function API.
2014-04-17 23:19:36 +01:00
Damien George
729f7b42d6
py: Merge BINARY_OP_SUBSCR and store_subscr (w/ delete) into subscr.
...
mp_obj_t->subscr now does load/store/delete.
2014-04-17 22:10:53 +01:00
Damien George
de7c425139
py: Simplify objfun/objgenerator connection, no need to call bc_get.
2014-04-17 19:16:11 +01:00
Damien George
d89b69eb3a
Merge branch 'master' of github.com:micropython/micropython
2014-04-17 18:58:46 +01:00
Damien George
d0f9f6cd3f
py: Fix pfenv_print_strn to return correct number of chars printed.
...
With this fix, all tests in tests/basics pass on pyboard.
2014-04-17 18:58:09 +01:00
Paul Sokolovsky
b7e90ea078
objgenerator: Generator must execute in its defining lexical context.
...
I.e. with its own globals. So, just as for functions, we need to switch
globals when resuming a generator.
2014-04-17 20:27:00 +03:00