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
Paul Sokolovsky
f26a30710c
objfun: Add local header.
...
This follows pattern already used for objtuple, etc.: objfun.h's content
is not public - each and every piece of code should not have access to it.
It's not private either - with out architecture and implementation language
(C) it doesn't make sense to keep implementation of each object strictly
private and maintain cumbersome accessors. It's "local" - intended to be
used by a small set of "friend" (in C++ terms) objects.
2014-04-17 20:27:00 +03:00
Damien George
71d3112f7e
py: Make built-in 'range' a class.
...
Addresses issue #487 .
2014-04-17 18:18:55 +01:00
Damien George
d553be5982
build: Simplify build directory layout by putting all headers in genhdr.
...
Any generated headers go in $(BUILD)/genhdr/, and are #included as
'genhdr/xxx.h'.
2014-04-17 18:03:27 +01:00
Damien George
2d1f865d16
Merge branch 'relocatable-build-dir' of github.com:lurch/micropython into lurch-relocatable-build-dir
2014-04-17 17:44:52 +01:00
Damien George
eeffbb6948
Merge pull request #507 from pfalcon/nlr-setjmp
...
nlr: Add implementation using setjmp/longjmp.
2014-04-17 17:26:19 +01:00
Damien George
5f82b50324
Merge branch 'master' of github.com:micropython/micropython
2014-04-17 17:11:58 +01:00
Damien George
dbdfee15a1
py: Add cmath module, for complex math. Disabled by default.
...
Not all functions implemented. Not enabled on pyboard.
2014-04-17 17:11:03 +01:00
Damien George
c9f6f6b8dd
py: Enable builtin 'property' by default.
2014-04-17 17:02:30 +01:00
Damien George
66ae8c9f49
py: Tidy up variables in VM, probably fixes subtle bugs.
...
Things get tricky when using the nlr code to catch exceptions. Need to
ensure that the variables (stack layout) in the exception handler are
the same as in the bit protected by the exception handler.
Prior to this patch there were a few bugs. 1) The constant
mp_const_MemoryError_obj was being preloaded to a specific location on
the stack at the start of the function. But this location on the stack
was being overwritten in the opcode loop (since it didn't think that
variable would ever be referenced again), and so when an exception
occurred, the variable holding the address of MemoryError was corrupt.
2) The FOR_ITER opcode detection in the exception handler used sp, which
may or may not contain the right value coming out of the main opcode
loop.
With this patch there is a clear separation of variables used in the
opcode loop and in the exception handler (should fix issue (2) above).
Furthermore, nlr_raise is no longer used in the opcode loop. Instead,
it jumps directly into the exception handler. This tells the C compiler
more about the possible code flow, and means that it should have the
same stack layout for the exception handler. This should fix issue (1)
above. Indeed, the generated (ARM) assembler has been checked explicitly,
and with 'goto exception_handler', the problem with &MemoryError is
fixed.
This may now fix problems with rge-sm, and probably many other subtle
bugs yet to show themselves. Incidentally, rge-sm now passes on
pyboard (with a reduced range of integration)!
Main lesson: nlr is tricky. Don't use nlr_push unless you know what you
are doing! Luckily, it's not used in many places. Using nlr_raise/jump
is fine.
2014-04-17 16:50:23 +01:00
Damien George
8bcb9861a7
py: Don't assert but go to unsupported_op in mp_binary_op for small int.
2014-04-17 16:26:50 +01:00
Damien George
8865b22b51
Merge pull request #501 from dhylands/fix-gen-fail
...
Remove generated .h file if the generation process fails.
2014-04-17 00:25:29 +01:00
Paul Sokolovsky
3a83b805fc
nlr: Add implementation using setjmp/longjmp.
...
Having an optimized asm implementation is good, but if we want portability,
that's it.
2014-04-17 00:19:18 +03:00
Andrew Scheller
70a7d7a943
build directory can now be renamed
...
The autogenerated header files have been moved about, and an extra
include dir has been added, which means you can give a custom
BUILD=newbuilddir option to make, and everything "just works"
Also tidied up the way the different Makefiles build their include-
directory flags
2014-04-16 22:16:28 +01:00
Dave Hylands
1a797edd3b
Have make remove targets if a recipie fails.
2014-04-16 11:36:44 -07:00
Damien George
ee01411036
py: Add len(bytes).
2014-04-15 23:10:00 +01:00
Damien George
897fe0c0d0
py: Add builtin functions bin and oct, and some tests for them.
2014-04-15 22:03:55 +01:00
Damien George
3b108e7699
Merge pull request #493 from aitjcize/patch
...
Move entry_table to separated header file.
2014-04-15 14:33:11 +01:00
AZ Huang
9413ca02fb
Rename header file.
2014-04-15 21:29:08 +08:00
Damien George
b013aea809
py: Fix builtin hex to print prefix.
...
I was too hasty. Still a one-liner though.
2014-04-15 12:50:21 +01:00
Damien George
5805111732
py: Add hex builtin function.
...
A one-liner, added especially for @pfalcon :)
2014-04-15 12:42:52 +01:00
AZ Huang
9309d9982f
Move entry_table to separated header file.
2014-04-15 17:08:42 +08:00
Damien George
e10da77a5c
Merge branch 'master' of github.com:micropython/micropython
2014-04-14 23:44:20 +01:00
Damien George
3683789207
py: Clean up and add comments to makeqstrdata.
2014-04-14 23:38:37 +01:00
Paul Sokolovsky
a5854d2bc5
builtinimport: Add basic support for namespace packages.
...
That was easy - just avoid erroring out on seeing candidate dir for namespace
package. That's far from being complete though - namespace packages should
support importing portions of package from different sys.path entries, here
we require first matching entry to contain all namespace package's portions.
And yet, that's a way to put parts of the same Python package into multiple
installable package - something we really need for *Micro*Python.
2014-04-15 01:30:25 +03:00
Paul Sokolovsky
75ffcaeace
py: Implement __delitem__ method for classes.
2014-04-15 01:30:25 +03:00
Damien George
3d867f5eab
Merge pull request #479 from lurch/patch-1
...
Don't allow both ENDIANNESSes to be set
2014-04-14 21:41:05 +01:00
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
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
Damien George
10072b72a5
Merge pull request #439 from lurch/makefile-tweaks
...
Makefile tweaks
2014-04-07 13:17:31 +01:00
Damien George
a28507ab2b
py: Detect unmatched tripple quote in repl helper.
2014-04-07 13:01:30 +01:00
Andrew Scheller
5e443f4b70
Merge remote-tracking branch 'upstream/master' into makefile-tweaks
2014-04-07 01:41:24 +01:00
Andrew Scheller
902d9552c5
Replace some Makefile commands with variables in py/mkenv.mk
2014-04-07 01:35:45 +01:00
Damien George
2bfd2dc770
py: Revert revert for allocation policy of set hash table.
2014-04-07 01:16:17 +01:00
Paul Sokolovsky
46bd12d57e
objset: Fix incorrect workaround against mp_set_init() munging alloc size.
...
No longer needed after recent change which guarantees that mp_set_init()
will allocate exact number of slots requested.
2014-04-07 03:08:46 +03:00
Damien George
c75427baaa
py: Revert change to allocation policy for mp_set_t.
...
Seems that this fixes all set tests.
2014-04-07 00:54:04 +01:00
Damien George
ff715429ea
py: Fix str.replace for case when arg 0 or 1 is empty string.
2014-04-07 00:39:13 +01:00
Paul Sokolovsky
7cf057aeeb
objdict: Implement equality operator.
...
Sure, it's O(n^2).
2014-04-06 21:31:42 +03:00
Paul Sokolovsky
5fedd0c3b7
py: Fix dict.copy() and low-level map/set allocation.
...
Two things: 1) set flags in copy properly; make mp_map_init() not be too
smart and do something with requested alloc size. Policy of using prime
numbers for alloc size is high-level policy which should be applied at
corresponding high levels. Low-level functions should just do what they're
asked to, because they don't have enough context to be smarter than that.
For example, munging with alloc size of course breaks dict copying (as
changing sizes requires rehashing).
2014-04-06 21:31:42 +03:00
Paul Sokolovsky
ea85a121f2
objdict: Support creating dict from another dict.
2014-04-06 20:08:56 +03:00
Damien George
cdd96dff2c
py: Implement more features in native emitter.
...
On x64, native emitter now passes 70 of the tests.
2014-04-06 12:58:40 +01:00
Damien George
65cad12d38
py: Add option to compiler to specify default code emitter.
...
Also add command line option to unix port to select emitter.
2014-04-06 11:48:15 +01:00
Damien George
deed087e2c
py: str.split: handle non-default separator.
2014-04-06 11:11:15 +01:00
Paul Sokolovsky
36dd19ae27
py: Revert mp_load_attr() to its previous state (not supporting default val).
...
Based on the discussion in #433 . mp_load_attr() is critical-path function,
so any extra check will slowdown any script. As supporting default val
required only for getattr() builtin, move correspending implementation
there (still as a separate function due to concerns of maintainability
of such almost-duplicated code instances).
2014-04-06 02:15:23 +03:00
Damien George
4e1ed82583
Merge branch 'master' of github.com:micropython/micropython
2014-04-05 23:33:37 +01:00
Damien George
d0e824387e
py: Make mp_map_lookup not allocate memory on removal.
2014-04-05 23:33:12 +01:00
Paul Sokolovsky
080d99b7a8
py: Optimize locals()/globals() implementation.
2014-04-06 01:18:58 +03:00
Damien George
09af5364d4
Merge branch 'master' of github.com:micropython/micropython
2014-04-05 23:04:22 +01:00
Damien George
27e735fd18
py: Replace stream_p with *stream_p in mp_obj_type_t.
...
This is to reduce ROM usage. stream_p is used in file and socket types
only (at the moment), so seems a good idea to make the protocol
functions a pointer instead of the actual structure.
It saves 308 bytes of ROM in the stmhal/ port, 928 in unix/.
2014-04-05 23:02:23 +01:00
Paul Sokolovsky
cc0af3d727
py: Implement globals() and locals() builtins.
2014-04-06 01:01:36 +03:00
Damien George
17520224fa
py: Make all objects and instances derive from object.
...
This makes isinstance(X, object) and issubclass(X, object) true for all
X.
2014-04-05 22:45:23 +01:00
Damien George
7efc5b3f34
py: Make globals and locals proper dictionary objects.
...
Finishes addressing issue #424 .
In the end this was a very neat refactor that now makes things a lot
more consistent across the py code base. It allowed some
simplifications in certain places, now that everything is a dict object.
Also converted builtins tables to dictionaries. This will be useful
when we need to turn builtins into a proper module.
2014-04-05 22:36:42 +01:00
Damien George
8b0535e23f
py: Change module globals from mp_map_t* to mp_obj_dict_t*.
...
Towards addressing issue #424 .
Had a small increase to ROM usage (order 60 bytes).
2014-04-05 21:53:54 +01:00
Damien George
60be1cf3b9
py: Fix float printing on stmhal.
2014-04-05 20:51:29 +01:00
Damien George
12bab72d93
Improve GC finalisation code; add option to disable it.
2014-04-05 20:35:48 +01:00
Damien George
8123a3339d
Merge pull request #425 from iabdalkader/del
...
Implement del
2014-04-05 18:49:39 +01:00
Damien George
ea13f407a3
py: Change nlr_jump to nlr_raise, to aid in debugging.
...
This does not affect code size or performance when debugging turned off.
To address issue #420 .
2014-04-05 18:32:08 +01:00
Damien George
efccbf6f27
Merge pull request #436 from dhylands/pfenv-print-int
...
Change pfenv_print_int to take machine_uint_t rather than unsinged in
2014-04-05 18:11:02 +01:00
Damien George
327a3e2faa
Merge pull request #435 from dhylands/str-modulo-float
...
Allow floating point arguments with %d,i,u,o,x,X formats
2014-04-05 18:10:11 +01:00
Damien George
23419a2f8a
Merge pull request #433 from pfalcon/getattr-3arg
...
py: Support 3-arg getattr() builtin (with default value).
2014-04-05 18:00:04 +01:00
Dave Hylands
64ef5d7f4e
Change pfenv_print_int to take machine_uint_t rather than unsinged in
...
With this change, the following works:
>>> print('%#x' % 0x1234567890abcdef)
0x1234567890abcdef
2014-04-05 09:42:20 -07:00
Damien George
6d508666ea
Merge branch 'master' of github.com:micropython/micropython
2014-04-05 17:19:03 +01:00
Damien George
95004e5114
py: Fix delete operation on map/dict and set objects.
...
Hash table can now be completely full (ie now NULL entry) before a
resize is triggered. Use sentinel value to indicate delete entry in the
table.
2014-04-05 17:17:19 +01:00
Dave Hylands
f81a49e464
Allow floating point arguments with %d,i,u,o,x,X formats
2014-04-05 08:26:51 -07:00
Paul Sokolovsky
e99841be69
mp_obj_get_int(): Add warning against adding implicit float->int conversion.
2014-04-05 17:46:47 +03:00
mux
cc849f70f4
Move del to locals
2014-04-05 15:49:03 +02:00
Damien George
09a4d8305d
py: Fix bug in DELETE_SUBSCR bytecode, decreasing sp too much.
2014-04-05 13:47:41 +01:00
Damien George
66edc5d899
py: Implement DELETE_SUBSCR bytecode; implement mp_obj_dict_delete.
2014-04-05 13:25:13 +01:00
Damien George
3c8aecf62c
Merge pull request #431 from pfalcon/unbreak-map-remove
...
map: When removing a key, don't NULL the entry, but mark as deleted.
2014-04-05 12:09:09 +01:00
Paul Sokolovsky
586bfce10d
objfun: Add equality support.
2014-04-05 13:53:39 +03:00
Paul Sokolovsky
bfb7d6a26d
py: Support 3-arg getattr() builtin (with default value).
2014-04-05 13:34:02 +03:00
Paul Sokolovsky
438d504e27
objtype: Add equality test for type types.
2014-04-05 13:10:56 +03:00
Paul Sokolovsky
91cbe6033a
py: Allow types to be hashable.
...
Quite natural to have d[int] = handle_int .
2014-04-05 12:51:58 +03:00
Paul Sokolovsky
c6813d92db
py: Put default namespace into module __main__.
...
That's how CPython has it, in particular, "import __main__" should work.
2014-04-05 12:29:15 +03:00
Paul Sokolovsky
4a088f4b61
map: When removing a key, don't NULL the entry, but mark as deleted.
...
When searching next time, such entry should be just skipped, not terminate
the search. It's known that marking techique is not efficient at the presense
of many removes, but namespace usage should not require many deletes, and
as for user dictionaries - well, open addressing map table with linear
rehashing and load factor of ~1 is not particularly efficient at all ;-).
TODO: May consider "shift other entries in cluster" approach as an
alternative.
2014-04-05 05:11:12 +03:00
Paul Sokolovsky
a0d32991ed
mp_load_name(): Optimize for outer scope where locals == globals.
2014-04-05 05:10:12 +03:00
Paul Sokolovsky
e3f58c8380
map: Add mp_map_dump() (#ifdef'ed) to be handy when debugging maps.
2014-04-05 05:10:02 +03:00
Damien George
6582a4170d
Merge pull request #421 from dhylands/git-version
...
Add the git version and build-date to the banner
2014-04-04 16:09:29 +01:00
Damien George
e8208a7f02
py: Make False and True act like 0 and 1 for integer arithmetic.
2014-04-04 15:08:23 +01:00
Damien George
d7aadcfe1b
py: Allow dict constructor to take keyword arguments.
2014-04-04 15:08:00 +01:00
Damien George
36f0ee1a54
py: Remove mp_obj_less (use mp_binary_op(MP_BINARY_OP_LESS..) instead).
2014-04-04 15:07:17 +01:00
Damien George
9b1599c663
Merge pull request #422 from dhylands/str-modulo
...
Str modulo
2014-04-04 12:37:52 +01:00
Damien George
af27259439
py: Enable optimisation of multiplying 2 small ints in compiler.
2014-04-04 11:21:58 +00:00
Damien George
ecf5b77123
py: This time, real proper overflow checking of small int power.
...
Previous overflow test was inadequate.
2014-04-04 11:13:51 +00:00
Damien George
6902eeda25
py: Add m_malloc_fail function to handle memory allocation error.
...
A malloc/realloc fail now throws MemoryError.
2014-04-04 10:52:59 +00:00
Dave Hylands
6756a37a77
Implements most of str.modulo
...
The alternate form for floating point doesn't work yet.
The %(name)s form doesn't work yet.
2014-04-03 23:55:02 -07:00
Dave Hylands
bf7d690e36
Add the git version to the banner
2014-04-03 16:55:15 -07:00
Damien George
5bf565e353
py: Handle small int power overflow correctly.
2014-04-04 00:16:32 +01:00