Paul Sokolovsky
2ff3d9d0b2
builtinimport: Set __path__ attribute ASAP as it's clear we have a package.
...
This helps with handling "recursive" imports in sane manner, for example
when foo/__init__.py has something like "from foo import submod".
2014-04-12 02:55:18 +03:00
Paul Sokolovsky
69f1867da5
builtinimport: Fix thinko passing 0 vs NULL.
2014-04-12 02:55:18 +03:00
Damien George
8f19317540
py: Remove useless implementations of NOT_EQUAL in binary_op's.
...
I'm pretty sure these are never reached, since NOT_EQUAL is always
converted into EQUAL in mp_binary_op. No one should call
type.binary_op directly, they should always go through mp_binary_op
(or mp_obj_is_equal).
2014-04-12 00:20:39 +01:00
Damien George
db049c2e00
py: Change inline to static inline for 2 functions.
2014-04-12 00:08:40 +01:00
Damien George
7b4330191f
py, compiler: Fix up creation of default positionals tuple.
...
With new order of evaluation of defaults, creating the tuple was done in
the wrong spot.
2014-04-12 00:05:49 +01:00
Damien George
c42e4b6c53
Merge branch 'master' of github.com:micropython/micropython
2014-04-11 23:26:18 +01:00
Damien George
8b19db00aa
py, compiler: Fix compiling of keyword args following named star.
2014-04-11 23:25:34 +01:00
Paul Sokolovsky
b9b1c00c8a
showbs: Dump LOAD_CONST_BYTES.
2014-04-12 00:39:55 +03:00
Paul Sokolovsky
00a9d138b2
showbc: Dump LOAD_NULL.
2014-04-12 00:39:55 +03:00
Paul Sokolovsky
af620abcb5
py: Implement "from pkg import mod" variant of import.
2014-04-12 00:39:55 +03:00
Paul Sokolovsky
13d52df4c5
builtinimport: Set __path__ attribute on packages.
...
Per https://docs.python.org/3.3/reference/import.html , this is the way to
tell module from package: "Specifically, any module that contains a __path__
attribute is considered a package." And it for sure will be needed to
implement relative imports.
2014-04-12 00:39:55 +03:00
Paul Sokolovsky
e081329098
builtinimport: Elaborate debug output support.
2014-04-12 00:39:55 +03:00
Paul Sokolovsky
a925cb54f1
py: Preprocess qstrdefs.h before feeding to makeqstrdata.py.
...
This is alternative implementation of supporting conditionals in qstrdefs.h,
hard to say if it's much cleaner than munging #ifdef's in Python code...
2014-04-12 00:39:55 +03:00
Paul Sokolovsky
6ea0e928d8
Revert "makeqstrdata.py: Add support for conditionally defined qstrs."
...
This reverts commit acb133d1b1
.
Conditionals will be suported using C preprocessor.
2014-04-12 00:39:54 +03:00
Damien George
1184094839
py: Revert some inline functions back to macros, since they bloat stmhal.
2014-04-11 22:30:09 +01:00
Damien George
69b89d21b2
py: Change compile order for default positional and keyword args.
...
This simplifies the compiler a little, since now it can do 1 pass over
a function declaration, to determine default arguments. I would have
done this originally, but CPython 3.3 somehow had the default keyword
args compiled before the default position args (even though they appear
in the other order in the text of the script), and I thought it was
important to have the same order of execution when evaluating default
arguments. CPython 3.4 has changed the order to the more obvious one,
so we can also change.
2014-04-11 13:38:30 +00:00
Damien George
0e3329a6b8
py, compiler: Allow lambda's to yield.
2014-04-11 13:10:21 +00:00
Damien George
0288cf020e
py: Implement compiling of *-expr within parenthesis.
2014-04-11 11:53:00 +00:00
Damien George
a5c82a8187
py: Convert some macros to inline functions (in obj.h).
...
Also convert mp_obj_is_integer to an inline function.
Overall this decreased code size (at least on 32-bit x86 machine).
2014-04-11 11:16:53 +00:00
Damien George
e22d76e73b
py: Fix up object equality test.
...
It regressed a bit after implementing float/complex equality. Now it
should be improved, and support more equality tests.
2014-04-11 10:52:06 +00:00
Damien George
a9ddd6d9df
py: Simplify and improve mp_get_index.
...
It has (again) a fast path for ints, and a simplified "slow" path for
everything else.
Also simplify the way str indexing is done (now matches tuple and list).
2014-04-11 10:40:38 +00:00
Damien George
5f3fe3aa14
Merge branch 'master' of github.com:micropython/micropython
2014-04-11 10:11:07 +01:00
Damien George
b8a053aeb1
py: Implement float and complex == and !=.
...
Addresses issue #462 .
2014-04-11 10:10:37 +01:00
Damien George
87e380b7ea
Merge pull request #461 from lurch/patch-1
...
Update mkrules.mk
2014-04-11 09:55:50 +01:00
Damien George
686afc5c0a
py: Check that sequence has 2 elements for dict iterable constructor.
2014-04-11 09:13:30 +01:00
Paul Sokolovsky
be019ce063
objdict: Implement construction from iterable of pairs.
...
Pairs are limited to tuples so far.
2014-04-11 07:01:15 +03:00
Paul Sokolovsky
12a04392b9
objdict: Implement __getitem__ method.
2014-04-11 05:24:44 +03:00
Paul Sokolovsky
0c43cf9154
modstruct: Basic implementation of native struct alignment and types.
2014-04-11 03:59:16 +03:00
Paul Sokolovsky
ef9124f5ff
binary: Rename array accessors for clarity.
2014-04-11 03:58:49 +03:00
Paul Sokolovsky
2da81fa80c
mpconfig.h: Add basic support for target endianness configuration.
...
A specific target can define either MP_ENDIANNESS_LITTLE or MP_ENDIANNESS_BIG
to 1. Default is MP_ENDIANNESS_LITTLE.
TODO: Autodetect based on compiler predefined macros?
2014-04-11 03:58:49 +03:00
Paul Sokolovsky
6582d64d01
modstruct: Refactor to support both LE and BE packed structs.
2014-04-11 03:58:49 +03:00
Andrew Scheller
83346749da
Update mkrules.mk
...
make 'make clean' cleaner ;-)
2014-04-11 00:41:59 +01:00
Damien George
57e99ebc86
py: Add simple way of looking up constants in compiler.
...
Working towards trying to support compile-time constants (see discussion
in issue #227 ), this patch allows the compiler to look inside arbitrary
uPy objects at compile time. The objects to search are given by the
macro MICROPY_EXTRA_CONSTANTS (so they must be constant/ROM objects),
and the constant folding occures on forms base.attr (both base and attr
must be id's).
It works, but it breaks strict CPython compatibility, since the lookup
will succeed even without importing the namespace.
2014-04-10 22:42:11 +01:00
Damien George
ae491055fa
py: Fix float/complex binop returning NULL; implement complex power.
2014-04-10 20:08:11 +01:00
Damien George
d66ae18640
py: Simplify stack get/set to become stack adjust in emitters.
...
Can do this now that the stack size calculation is improved.
2014-04-10 17:28:54 +00:00
Damien George
069a35e3a5
py, compiler: Improve stack depth counting.
...
Much less of a hack now. Hopefully it's correct!
2014-04-10 17:22:19 +00:00
Damien George
190d1ba297
py: Make sure state/stack of byte code function has at least 1 slot.
2014-04-10 16:59:56 +00:00
Damien George
a1ef441d18
py: Fix VM stack overflow detection.
2014-04-10 16:59:44 +00:00
Damien George
e90be0ddf5
py: Add option to VM to detect stack overflow.
2014-04-10 16:21:34 +00:00
Damien George
c90717a3e4
py: Add missing dummy functions to pass 1 emitter.
2014-04-10 15:40:38 +00:00
Damien George
58ba4c3b4c
py: Check explicitly for memory allocation failure in parser.
...
Previously, a failed malloc/realloc would throw an exception, which was
not caught. I think it's better to keep the parser free from NLR
(exception throwing), hence this patch.
2014-04-10 14:27:31 +00:00
Damien George
ffa9bddfc4
Make lexerunix not allocate RAM for the entire script.
...
Now reads in small chunks at a time.
2014-04-10 15:00:58 +01:00
Damien George
f0954e3fac
py: Add emergency exception object for when heap allocation fails.
2014-04-10 14:38:25 +01:00
Damien George
6f355fd3b9
py: Make labels unsigned ints (converted from int).
...
Labels should never be negative, and this modified type signature
reflects that.
2014-04-10 14:11:31 +01:00
Damien George
bf8ae4d96e
py: Fix modstruct to compile on 64-bit machine.
2014-04-10 13:53:31 +01:00
Damien George
3a8b1607fc
Merge branch 'master' of github.com:micropython/micropython
2014-04-10 12:58:31 +01:00
Damien George
635543c72c
py, compiler: Implement compiling of relative imports.
2014-04-10 12:56:52 +01:00
Damien George
2e9eb2d207
py: Fix lexer so it doesn't allow ! and ..
2014-04-10 12:19:33 +01:00
Damien George
175cecfa87
py: Make form-feed character a space (following C isspace).
...
Eg, in CPython stdlib, email/header.py has a form-feed character.
2014-04-10 11:39:36 +01:00
Damien George
a91f41407b
py, lexer: Fix parsing of raw strings (allow escaping of quote).
2014-04-10 11:30:55 +01:00
Paul Sokolovsky
978607aeff
objfun: Fix default arguments filling loop, was broken in presense of kwargs.
2014-04-10 05:39:38 +03:00
Paul Sokolovsky
41e2dea4ca
objfun: More debug logging when calling a bytecode function.
2014-04-10 05:37:58 +03:00
Paul Sokolovsky
e9db840480
py: Start implementing "struct" module.
...
Only calcsize() and unpack() functions provided so far, for little-endian
byte order. Format strings don't support repition spec (like "2b3i").
Unfortunately, dealing with all the various binary type sizes and alignments
will lead to quite a bloated "binary" helper functions - if optimizing for
speed. Need to think if using dynamic parametrized algos makes more sense.
2014-04-10 03:58:03 +03:00
Paul Sokolovsky
acb133d1b1
makeqstrdata.py: Add support for conditionally defined qstrs.
...
Syntax is usual C #if*/#endif, but each qstr must be wrapped individually.
2014-04-10 03:38:42 +03:00
Paul Sokolovsky
881d9af05e
objstr: Add TODO-optimize for using .join with arbitrary iterable.
2014-04-10 01:42:40 +03:00
Damien George
1d2ba5ddf9
Merge pull request #455 from lurch/exception-messages
...
Remove exception name from inside the exception message
2014-04-09 20:49:35 +01:00
Damien George
038fd52faa
Merge branch 'str-index' of github.com:xbe/micropython into xbe-str-index
2014-04-09 20:44:37 +01:00
Damien George
5589db88c7
py: Implement complex division.
2014-04-09 20:21:00 +01:00
Damien George
e2835c16f4
py: Oops, fix emitcpy to compile with latest changes.
2014-04-09 20:20:34 +01:00
Andrew Scheller
f78cfaf8b5
Remove exception name from inside the exception message
...
This prevents micropython printing exception messages like
ImportError: ImportError: No module named 'foo'
2014-04-09 19:56:38 +01:00
Damien George
b5fbd0ba87
py: Add mp_obj_is_integer; make mp_get_index check for long int.
...
mp_obj_is_integer should be used to check if an object is of integral
type. It returns true for bool, small int and long int.
2014-04-09 19:55:33 +01:00
Damien George
d99944acdd
py: Clear state to MP_OBJ_NULL before executing byte code.
2014-04-09 19:53:31 +01:00
Damien George
a157e4caba
py: str.join can now take arbitrary iterable as argument.
2014-04-09 19:17:53 +01:00
Damien George
13d6739cc7
py: Generators can have their locals closed over.
2014-04-09 19:01:45 +01:00
Damien George
2bf7c09222
py: Properly implement deletion of locals and derefs, and detect errors.
...
Needed to reinstate 2 delete opcodes, to specifically check that a local
is not deleted twice.
2014-04-09 15:26:46 +01:00
Damien George
11d8cd54c9
py, compiler: Turn id_info_t.param into a set of flags.
...
So we can add more flags.
2014-04-09 14:42:51 +01:00
Damien George
b140bff877
py, compile: Simplify initialisation of compiler structure.
2014-04-09 12:54:21 +01:00
Damien George
02a4c05c5f
py, compile: Reduce size of compiler structure.
2014-04-09 12:50:58 +01:00
Damien George
922ddd6415
py, compile: Combine have_star_arg, have_dbl_star_arg into star_flags.
...
Small reduction in ROM, heap and stack usage.
2014-04-09 12:43:17 +01:00
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.
2014-04-09 12:27:39 +01:00
Paul Sokolovsky
03b9ad7b01
gc.c: Remove superfluous typedef (bute defined in misc.h).
2014-04-09 04:13:21 +03:00
Damien George
88d7bba961
py: Make it so that printing a small int does not allocate heap memory.
...
With the implementation of proper string formatting, code to print a
small int was delegated to mpz_as_str_inpl (after first converting the
small int to an mpz using stack memory). But mpz_as_str_inpl allocates
heap memory to do the conversion, so small ints needed heap memory just
to be printed.
This fix has a separate function to print small ints, which does not
allocate heap, and allocates less stack.
String formatting, printf and pfenv are now large beasts, with some
semi-duplicated code.
2014-04-08 23:30:46 +01:00
Damien George
803b9263ab
Merge branch 'master' of github.com:micropython/micropython
2014-04-08 23:11:51 +01:00
Damien George
eec91057b8
py: Add comment mpz function, and free memory used for string printing.
2014-04-08 23:11:00 +01:00
Paul Sokolovsky
a985b4593d
objint: Implement int.from_bytes() class method and .to_bytes() method.
...
These two are apprerently the most concise and efficient way to convert
int to/from bytes in Python. The alternatives are struct and array modules,
but methods using them are more verbose in Python code and less efficient
in memory/cycles.
2014-04-09 01:07:37 +03:00
Paul Sokolovsky
3aa8ee7c9e
py: Add mp_get_buffer(), mp_get_buffer_raise() convenience functions to API.
2014-04-09 01:07:37 +03:00
Damien George
348435d279
py: Reinstate old pfenv_print_int function for stmhal's printf.
2014-04-08 22:10:37 +01:00
Damien George
a9837bbf8b
py: Remove obsolete mp_delete_subscr declaration.
2014-04-08 22:06:31 +01:00
Damien George
f4c9b33abf
py: Remove DELETE_SUBSCR opcode, combine with STORE_SUBSCR.
...
This makes the runtime and object APIs more consistent. mp_store_subscr
functionality now moved into objects (ie list and dict store_item).
2014-04-08 21:32:29 +01:00
Damien George
4671392d90
Merge branch 'master' of github.com:micropython/micropython
2014-04-08 21:13:04 +01:00
Damien George
1d24ea5207
py: Finish implementation of all del opcodes.
...
At this point, all opcodes are now implemented!
Some del opcodes have been combined with store opcodes, with the value
to store being MP_OBJ_NULL.
2014-04-08 21:11:49 +01:00
Paul Sokolovsky
4dcb605ac4
py: Make bytearray a proper type.
2014-04-08 22:11:40 +03:00
xbe
3d9a39e211
py: Implement str.[r]index() and add tests for them.
2014-04-08 11:51:41 -07:00
xbe
729be9b3c7
py: Update comment in str.replace().
2014-04-08 11:25:32 -07:00
Damien George
134c10e776
Merge branch 'master' of github.com:micropython/micropython
2014-04-08 18:29:50 +01:00
Damien George
47e1b85d9c
py: Improve inline assembler; add a few more opcodes.
2014-04-08 18:28:33 +01:00
Damien George
495d781a36
py: implement UNPACK_EX byte code (for: a, *b, c = d)
2014-04-08 17:51:47 +01:00
Paul Sokolovsky
7a70a3ae9a
bytes: Support buffer protocol.
2014-04-08 19:08:34 +03:00
Paul Sokolovsky
b9cf3d3730
bytearray: Support bytearray(int) constructor.
...
To create bytearray of given length.
2014-04-08 19:08:34 +03:00
Damien George
e753d916c0
py: Raise exception for unimplemented byte codes.
2014-04-08 16:49:28 +01:00
Damien George
b7ffdcc1c7
py: Improve compiler syntax errors; catch more errors.
2014-04-08 16:41:02 +01:00
Damien George
26cf55ae05
Add a check for NULL nlr_top in nlr_jump.
...
If no nlr_buf has been pushed, and an nlr_jump is called, then control
is transferred to nlr_jump_fail (which should bail out with a fatal
error).
2014-04-08 14:08:14 +00:00
Damien George
73c79b9925
py: Continue line if last character is backslash.
2014-04-08 11:33:28 +00:00
Damien George
443e018a3f
py: Improve GC locking/unlocking, and make it part of the API.
2014-04-08 11:31:21 +00:00
Damien George
ff5639fd42
Merge pull request #451 from lurch/repr-fixes
...
Display \r and \t escape codes in string repr
2014-04-08 12:11:40 +01:00
Damien George
97790455fe
Improve REPL detecting when input needs to continue.
...
Full CPython compatibility with this requires actually parsing the
input so far collected, and if it fails parsing due to lack of tokens,
then continue collecting input. It's not worth doing it this way. Not
having compatibility at this level does not hurt the goals of Micro
Python.
2014-04-08 11:04:29 +00:00
Andrew Scheller
12968fb6b2
Display \r and \t escape codes in string repr
2014-04-08 02:42:50 +01:00
Damien George
a12a0f78b0
py: Rename pfenv_print_int to pfenv_print_mp_int, and add back former.
...
stmhal relies on pfenv_* to implement its printf. Thus, it needs a
pfenv_print_int which prints a proper 32-bit integer. With latest
change to pfenv, this function became one that took mp_obj_t, and
extracted the integer value from that object.
To fix temporarily, pfenv_print_int has been renamed to
pfenv_print_mp_int (to indicate it takes a mp_obj_t for the int), and
pfenv_print_int has been added (which takes a normal C int). Currently,
pfenv_print_int proxies to pfenv_print_mp_int, but this means it looses
the MSB. Need to find a way to fix this, but the only way I can think
of will duplicate lots of code.
2014-04-08 01:29:53 +01:00
Dave Hylands
23dc6d0ace
Fix truncation problem when using longlong implementation.
2014-04-07 13:47:04 -07:00
Dave Hylands
c4029e5079
Add string formatting support for longlong and mpz.
2014-04-07 11:38:45 -07:00