Commit Graph

1079 Commits

Author SHA1 Message Date
Damien George
3bb8bd899b Make USE_COMPUTED_GOTO a config option in mpconfig.h.
Disabled by default.  Enabled in unix port.
2014-04-14 21:20:30 +01:00
AZ Huang
b1f692e82e Use computed goto instead of switching op-codes. 2014-04-15 02:40:28 +08:00
AZ Huang
658eae308f Fix parallel build. 2014-04-15 01:47:14 +08:00
Andrew Scheller
cc83737d35 Don't allow both ENDIANNESSes to be set
See discussion on 2da81fa80c

Explicitly set `MP_ENDIANNESS_LITTLE` because that's the #define that is used in code elsewhere.
2014-04-14 02:39:56 +01:00
Paul Sokolovsky
bbae42d62f modsys: Implement sys.version.
The logic appears to be that (at least beginning of) sys.versions is the
version of reference Python language implemented, not version of particular
implementation.

Also, bump set versions at 3.4.0, based on @dpgeorge preference.
2014-04-14 01:46:45 +03:00
Paul Sokolovsky
58676fc2c7 objstr: Allow to define statically allocated str objects.
Similar to tuples, lists, dicts. Statically allocated strings don't have hash
computed.
2014-04-14 01:45:06 +03:00
Paul Sokolovsky
59e269cfec qstr, objstr: Make sure that valid hash != 0, treat 0 as "not computed".
This feature was proposed with initial hashing RFC, and is prerequisite for
seamless static str object definition.
2014-04-14 01:43:01 +03:00
Paul Sokolovsky
14de114ba8 objdict: Add __delitem__. 2014-04-13 23:55:59 +03:00
Paul Sokolovsky
cd94b384a3 objdict: Add __setitem__. 2014-04-13 23:41:49 +03:00
Damien George
777b0f32f4 py: Add property object, with basic functionality.
Enabled by MICROPY_ENABLE_PROPERTY.
2014-04-13 18:59:45 +01:00
Damien George
9dcc60d0b1 py: Detect ZeroDivisionError properly for floats. 2014-04-13 17:45:30 +01:00
Damien George
0e4ba25834 py: Fix SyntaxError exception: don't have a block name, so pass NULL. 2014-04-13 15:01:28 +01:00
Damien George
73496fbbe4 py: Fix up source-line calculation.
Should address issue #475.
2014-04-13 14:51:56 +01:00
Damien George
d240ff83c7 Merge branch 'master' of github.com:micropython/micropython 2014-04-13 13:25:27 +01:00
Damien George
b502156e22 py: Adjust #includes in lexerunix.c. 2014-04-13 13:25:05 +01:00
Paul Sokolovsky
978d2c0267 modsys: Implement sys.byteorder. 2014-04-13 15:25:00 +03:00
Paul Sokolovsky
baaaf65eaa modsys: Implement basic sys.version_info. 2014-04-13 15:25:00 +03:00
Damien George
da6c2fafb5 Merge pull request #470 from errordeveloper/misc_fix/lexerunix
py: don't look for any additional headers when lexerunix is disabled
2014-04-13 13:24:39 +01:00
Damien George
d395a0e4b1 Merge pull request #471 from errordeveloper/misc_fix/unistd
py: the entire `<unistd.h>` shouldn't be needed
2014-04-13 13:22:36 +01:00
Damien George
5bb7d99175 py: Modify makeqstrdata to recognise better the output of CPP. 2014-04-13 13:16:51 +01:00
Damien George
49f20b841d py: Add more #if's for configurable MOD_SYS. 2014-04-13 13:05:16 +01:00
Damien George
640e7e4779 Merge pull request #476 from pfalcon/static-sys
Convert sys module to static allocation
2014-04-13 12:52:39 +01:00
Damien George
f95c68e536 Merge pull request #473 from pfalcon/list-extend-iter
objlist: Make .extend accept arbitrary iterable.
2014-04-13 12:46:34 +01:00
Damien George
b9e7ed4ebc py: Oops, fix int.from_bytes to correctly convert bytes! 2014-04-13 12:40:50 +01:00
Damien George
5213eb35b5 py: Make int.from_bytes a classmethod; support arbitrary length buf. 2014-04-13 12:24:13 +01:00
Damien George
8a1cab952f py: Fix mp_get_buffer, and use it in more places.
Must use mp_obj_get_type to get the type of an object.  Can't assume
mp_obj_t is castable to mp_obj_base_t.
2014-04-13 12:08:52 +01:00
Damien George
4b01de44ba py: Add traceback info to syntax errors.
Should fix issue #463.
2014-04-13 11:56:02 +01:00
Damien George
3d484d9ad4 py: Update showbc to decode ptrs for MAKE_FUNCTION ops. 2014-04-13 11:22:44 +01:00
Damien George
df8127a17e py: Remove unique_codes from emitglue.c. Replace with pointers.
Attempt to address issue #386.  unique_code_id's have been removed and
replaced with a pointer to the "raw code" information.  This pointer is
stored in the actual byte code (aligned, so the GC can trace it), so
that raw code (ie byte code, native code and inline assembler) is kept
only for as long as it is needed.  In memory it's now like a tree: the
outer module's byte code points directly to its children's raw code.  So
when the outer code gets freed, if there are no remaining functions that
need the raw code, then the children's code gets freed as well.

This is pretty much like CPython does it, except that CPython stores
indexes in the byte code rather than machine pointers.  These indices
index the per-function constant table in order to find the relevant
code.
2014-04-13 11:04:33 +01:00
Paul Sokolovsky
68e7c5146c py: Factor out impl of special methods for builtin types into opmethods.c 2014-04-13 11:54:53 +03:00
Paul Sokolovsky
036ad76659 objset: Implement __contains__() op-method. 2014-04-13 11:34:40 +03:00
Paul Sokolovsky
1a37588e35 py: Provide more details for too few and too much args for Python fun calls. 2014-04-13 11:30:16 +03:00
Paul Sokolovsky
48fdaad824 py: Rename collections module to _collections.
We're not going to implement all the plethora of types in there in C.
Funnily, CPython implements defaultdict in C, and namedtuple in Python.
2014-04-13 10:24:00 +03:00
Paul Sokolovsky
4165cd1c0c stmhal: Update for static mod sys. 2014-04-13 07:02:57 +03:00
Paul Sokolovsky
a3e50eacca py: Move sys attribute qstrs's to core. 2014-04-13 07:02:57 +03:00
Paul Sokolovsky
5500cdeec7 py, unix: Convert sys module to static representation. 2014-04-13 07:02:56 +03:00
Paul Sokolovsky
18bef25a0c objlist: Add support for statically allocated lists.
Similar to similar support for lists.
2014-04-13 07:02:56 +03:00
Paul Sokolovsky
f130ca1f60 py: Make bytes type hashable. 2014-04-13 06:45:12 +03:00
Paul Sokolovsky
73b7027b83 objstr: Add str.encode() and bytes.decode() methods.
These largely duplicate str() & bytes() constructors' functionality,
but can be used to achieve Python2 compatibility.
2014-04-13 06:45:02 +03:00
Paul Sokolovsky
aa6666c45e objlist: Make .extend accept arbitrary iterable. 2014-04-13 03:21:31 +03:00
Damien George
8721087661 py: Big improvements to inline assembler.
Improved the Thumb assembler back end.  Added many more Thumb
instructions to the inline assembler.  Improved parsing of assembler
instructions and arguments.  Assembler functions can now be passed the
address of any object that supports the buffer protocol (to get the
address of the buffer).  Added an example of how to sum numbers from
an array in assembler.
2014-04-13 00:30:32 +01:00
Damien George
6ce4277551 py: Make all LOAD_FAST ops check for unbound local.
This is necessary to catch all cases where locals are referenced before
assignment.  We still keep the _0, _1, _2 versions of LOAD_FAST to help
reduced the byte code size in RAM.

Addresses issue #457.
2014-04-12 18:20:40 +01:00
Damien George
0a4c210586 Merge branch 'master' of github.com:micropython/micropython 2014-04-12 17:55:32 +01:00
Damien George
a26dc50968 py: Improve inline assembler; improve compiler constant folding. 2014-04-12 17:54:52 +01:00
Damien George
2813cb6043 py: Add 'static' to inline function MP_BOOL; remove category_t.
Small fixes to get it compiling with ARMCC.  I have no idea why
category_t was in the enum definition for qstrs...
2014-04-12 17:53:05 +01:00
Ilya Dmitrichenko
5630b01920 py: the entire <unistd.h> shouldn't be needed 2014-04-12 16:45:35 +01:00
Ilya Dmitrichenko
8e9482a3c3 py: don't look for any additional headers when lexerunix is disabled 2014-04-12 16:37:17 +01:00
Paul Sokolovsky
a5afc9009f builtinimport: Implement relative imports. 2014-04-12 18:25:17 +03:00
Paul Sokolovsky
faf84491ce showbc: Add quotes around (some) string args, to show empty string properly. 2014-04-12 18:25:17 +03:00
Damien George
f7e4e1c2b4 py: Fix compiler warning when floats disabled. 2014-04-12 13:04:44 +01:00
Paul Sokolovsky
42453dc98e py: Make ImportError message match CPython's. 2014-04-12 03:00:40 +03:00
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