Damien George
d7592a1c3f
py: Fix reraise logic.
2014-03-30 00:54:48 +00:00
Paul Sokolovsky
0c904df8e6
vm: Save current active exception on opening new try block.
...
Required to reraise correct exceptions in except block, regardless if more
try blocks with active exceptions happen in the same except block.
P.S. This "automagic reraise" appears to be quite wasteful feature of Python
- we need to save pending exception just in case it *might* be reraised.
Instead, programmer could explcitly capture exception to a variable using
"except ... as var", and reraise that. So, consider disabling argless raise
support as an optimization.
2014-03-30 01:01:35 +02:00
Paul Sokolovsky
69975df3ff
vm: WITH_CLEANUP: use POP_EXC_BLOCK().
2014-03-30 01:00:51 +02:00
Paul Sokolovsky
a0ad77ba08
vm: Establish macros PUSH_EXC_BLOCK & POP_EXC_BLOCK to deal with exc stack.
...
E.g. to handle currently_in_except_block restoring properly.
2014-03-29 23:18:59 +02:00
Paul Sokolovsky
d109676ec0
py: Reraising exception possible only in except block.
2014-03-29 23:18:59 +02:00
Damien George
2bce0bd750
Merge branch 'master' of github.com:micropython/micropython
2014-03-29 17:28:59 +00:00
Damien George
0aa5d51cf1
py: Support mpz -op- float, mpz -op- complex, and complex -op- mpz.
2014-03-29 17:28:20 +00:00
Paul Sokolovsky
40d6d29af6
vm: Elaborate comments for WITH_CLEANUP, other cosmetic fixes.
2014-03-29 18:46:04 +02:00
Damien George
c689c19471
py: Make MP_BC_SETUP_WITH use the bytecode stack for load_method.
...
The compiler allocates 7 entries on the stack for a with statement
(following CPython, but probably can be reduced). This is enough for
the method load and call in SETUP_WITH.
2014-03-29 14:06:14 +00:00
Damien George
21a07dc50f
Merge pull request #389 from pfalcon/with-statement
...
With statement implementation
2014-03-29 14:00:03 +00:00
Damien George
b04be056fe
py: Fix regress with GeneratorExit object becoming truly const.
2014-03-29 13:52:51 +00:00
Damien George
3e1a5c10c5
py: Rename old const type objects to mp_type_* for consistency.
2014-03-29 13:43:38 +00:00
Damien George
07ddab529c
py: Change mp_const_* objects to macros.
...
Addresses issue #388 .
2014-03-29 13:15:08 +00:00
Damien George
da51a399cf
Merge pull request #383 from pfalcon/yield-from
...
Implement "yield from"
2014-03-29 12:18:14 +00:00
Damien George
6e54fcfd12
py: Fix typo printing complex numbers that are purely imaginary.
2014-03-29 11:41:38 +00:00
Damien George
d1e443d0bc
py: Free unique_code slot for outer module.
...
Partly (very partly!) addresses issue #386 . Most importantly, at the
REPL command line, each invocation does not now lead to increased memory
usage (unless you define a function/lambda).
2014-03-29 11:39:36 +00:00
Paul Sokolovsky
44307d5ef8
vm: Implement "with" statement (SETUP_WITH and WITH_CLEANUP bytecodes).
2014-03-29 04:39:24 +02:00
Paul Sokolovsky
682f9e639d
vm: Make sure that exception triple is <type, instance, traceback>.
...
This reduntant triple is one of the ugliest parts of Python, which they
chickened out to fix in Python3. We really should consider passing just
as single exception instance (without breaking Python-level APIs of course),
but until we do, let's follow CPython layout.
2014-03-29 04:35:36 +02:00
Paul Sokolovsky
4fff26a35c
vm: Factor out exception block setup to a macro.
...
Will be reused in WITH bytecodes.
2014-03-29 04:35:23 +02:00
Damien George
1d7553311c
Merge pull request #382 from pfalcon/genexit-inst
...
objgenerator: close(): Throw instance of GeneratorExit (not type).
2014-03-29 01:25:05 +00:00
Damien George
440f041525
py: Fix bugs with debugging output.
...
show_bc now decodes the prelude correctly. Moved WRITE_FILE stuff from
runtime.c to emitglue.c.
Addresses issue #385 .
2014-03-28 18:38:20 +00:00
Paul Sokolovsky
55234f4617
py: yield from: Elaborate GeneratorExit (gen.close()) handling.
...
Handling of GeneratorExit is really peculiar - it subverts normal exception
propagation rules.
2014-03-28 02:50:56 +02:00
Paul Sokolovsky
cf21a4e7f4
py: Core "yield from" implementation.
2014-03-28 02:50:56 +02:00
Paul Sokolovsky
c4d589e2bb
objgenerator: close(): Throw instance of GeneratorExit (not type).
...
To comply with Python semantics and allow use of mp_obj_is_subclass_fast()
for exception matching.
2014-03-28 02:40:26 +02:00
Paul Sokolovsky
182c31a208
showbc: Add few bytecodes related to "with".
2014-03-28 02:20:21 +02:00
Damien George
c63f984647
py: Thin out predefined exceptions.
...
Only exceptions that are actually used are left prefedined. Hierarchy
is still there, and removed exceptions are just commented out.
2014-03-27 23:49:06 +00:00
Damien George
01b877d16d
py: Fix typo printing complex numbers.
2014-03-27 23:35:31 +00:00
Damien George
ce8f07adcd
py: Rename emit_pre so they have globally unique names.
2014-03-27 23:30:26 +00:00
Damien George
2326d52d20
py: Factor out code from runtime.c to emitglue.c.
2014-03-27 23:26:35 +00:00
Damien George
8767d0710e
py: complex_print uses format_float if single precision fp used.
2014-03-27 22:17:49 +00:00
Damien George
bee17b00e3
py: Put n_state for bytecode in the bytecode prelude.
...
Rationale: setting up the stack (state for locals and exceptions) is
really part of the "code", it's the prelude of the function. For
example, native code adjusts the stack pointer on entry to the function.
Native code doesn't need to know n_state for any other reason. So
putting the state size in the bytecode prelude is sensible.
It reduced ROM usage on STM by about 30 bytes :) And makes it easier to
pass information about the bytecode between functions.
2014-03-27 11:07:04 +00:00
Damien George
8dcc0c7924
py: Calculate maximum exception stack size in compiler.
2014-03-27 10:55:21 +00:00
Damien George
945a01c4e3
py: Fix bug in type_store_attr, trying to store to ROM.
2014-03-27 09:32:26 +00:00
Damien George
bdcbf0fcd1
py: Restore CPython compatibility in compiler for closures with def args.
2014-03-26 23:15:35 +00:00
Damien George
d6f9434091
Merge pull request #381 from pfalcon/closure-defargs
...
py: Support closures with default args.
2014-03-26 23:09:14 +00:00
Damien George
f61a072f68
Merge branch 'master' of github.com:micropython/micropython
2014-03-26 22:36:43 +00:00
Damien George
c3f1126ee8
py: Fix logic bugs in object attribute/method extraction.
2014-03-26 22:35:10 +00:00
Damien George
6022d9d478
py: Improved builtin dir.
2014-03-26 22:35:00 +00:00
Paul Sokolovsky
e9137b94f2
py: Implement getattr() builtin.
2014-03-27 00:11:36 +02:00
Damien George
9b196cddab
Remove mp_obj_type_t.methods entry and use .locals_dict instead.
...
Originally, .methods was used for methods in a ROM class, and
locals_dict for methods in a user-created class. That distinction is
unnecessary, and we can use locals_dict for ROM classes now that we have
ROMable maps.
This removes an entry in the bloated mp_obj_type_t struct, saving a word
for each ROM object and each RAM object. ROM objects that have a
methods table (now a locals_dict) need an extra word in total (removed
the methods pointer (1 word), no longer need the sentinel (2 words), but
now need an mp_obj_dict_t wrapper (4 words)). But RAM objects save a
word because they never used the methods entry.
Overall the ROM usage is down by a few hundred bytes, and RAM usage is
down 1 word per user-defined type/class.
There is less code (no need to check 2 tables), and now consistent with
the way ROM modules have their tables initialised.
Efficiency is very close to equivaluent.
2014-03-26 21:47:19 +00:00
Paul Sokolovsky
2447a5b582
py: Support closures with default args.
2014-03-26 23:17:44 +02:00
Damien George
c12b2213c1
Change mp_method_t.name from const char * to qstr.
...
Addresses issue #377 .
2014-03-26 20:15:40 +00:00
Damien George
69b3ba0df3
py: Swap around the double return value of mp_obj_gen_resume.
...
Just to keep things consistent :)
2014-03-26 19:33:23 +00:00
Damien George
66eaf84b8c
py: Replace mp_const_stop_iteration object with MP_OBJ_NULL.
2014-03-26 19:27:58 +00:00
Damien George
688e220d26
Merge pull request #379 from pfalcon/reraise
...
vm: Implement raise statement w/o args (reraising last exception).
2014-03-26 18:59:15 +00:00
Damien George
9c817b9465
Merge branch 'master' of github.com:micropython/micropython
2014-03-26 18:56:02 +00:00
Damien George
548e76cfd6
py: Use _is_subclass_fast instead of _exception_match.
2014-03-26 18:55:29 +00:00
Damien George
752ba554cc
Merge branch 'gen-close-ret-val' of github.com:pfalcon/micropython into pfalcon-gen-close-ret-val
2014-03-26 18:46:06 +00:00
Damien George
9e6e935df0
py: Add support for user-defined iterators via __iter__, __next__.
2014-03-26 18:37:06 +00:00
Paul Sokolovsky
af1ae30399
objexcept: Add mp_obj_exception_get_value() convenience function.
...
This gets "value" of exceptions in the sense as it's defined for
StopIteration.value (i.e. args[0] or None).
TODO: This really should be inline function.
2014-03-26 19:29:36 +02:00
Paul Sokolovsky
c403076ef8
vm: Implement raise statement w/o args (reraising last exception).
2014-03-26 17:32:02 +02:00
Paul Sokolovsky
962b1cd1b1
objgenerator: Implement return with value and .close() method.
...
Return with value gets converted to StopIteration(value). Implementation
keeps optimizing against creating of possibly unneeded exception objects,
so there're considerable refactoring to implement these features.
2014-03-26 15:40:58 +02:00
Damien George
681d0a9ca7
Merge pull request #370 from xbe/str-rfind
...
py/objstr.c: Implement str.rfind() and add tests for it, refactor find_subbytes().
2014-03-25 15:51:15 +00:00
Damien George
6e628c49ca
py: Replace naive and teribble hash function with djb2.
2014-03-25 15:27:15 +00:00
Damien George
ffb5cfc8d8
py: Removed some unnecessary exception objects.
...
They still exist in commented-out form in objexcept.c if they are ever
needed.
2014-03-25 14:29:40 +00:00
Damien George
caac542b23
Proper support for registering builtin modules in ROM.
...
Comes with some refactoring of code and renaming of files. All modules
are now named mod*.[ch].
2014-03-25 14:18:18 +00:00
Damien George
1dfde891e3
Merge pull request #373 from iabdalkader/module_register
...
Add mp_obj_module_register
2014-03-25 13:21:51 +00:00
Paul Sokolovsky
9512e9e817
objexcept: Add "args" exception attribute, as well as StopIteration.value.
2014-03-25 01:42:01 +02:00
Paul Sokolovsky
7f8b31345b
rt_load_method(): Add missing qstr_str() when getting type name.
2014-03-25 01:39:10 +02:00
mux
89d45248ee
Add mp_obj_module_register
...
* Add function to load static modules.
* Use module_register to pyb module.
2014-03-25 00:25:27 +02:00
Damien George
a82d7ef29d
Merge branch 'master' of github.com:micropython/micropython
2014-03-24 11:49:32 +00:00
Damien George
24ff063e80
py: Remove obsolete declarations; make mp_obj_get_array consistent.
2014-03-24 10:47:13 +00:00
xbe
17a5a83fb4
Implement str.rfind() and add tests for it.
2014-03-24 01:00:00 -07:00
xbe
8562de6c48
py/objstr.c: Remove done TODOs.
2014-03-23 22:56:21 -07:00
Paul Sokolovsky
f909034400
py: Implement support for "except Exception as var" clause.
...
For this, needed to implement DELETE_NAME bytecode (because var bound
in except clause is automatically deleted at its end).
http://docs.python.org/3/reference/compound_stmts.html#except :
"When an exception has been assigned using as target, it is cleared at
the end of the except clause."
2014-03-23 22:00:04 +02:00
Paul Sokolovsky
4b2b7ceca7
runtime: RT_BINARY_OP_EXCEPTION_MATCH: don't fall thru in case of wrong types.
2014-03-23 21:45:19 +02:00
Paul Sokolovsky
1673420053
vm: Abstract working with tagged pointers in VM using macro accessors.
...
Based on issues raised during recent review and inconsistency of different
implementations.
2014-03-23 21:41:29 +02:00
Damien George
d67441de18
Merge pull request #365 from xbe/tgamma
...
py/builtinmath.c: use tgamma() instead of gamma().
2014-03-23 13:59:14 +00:00
xbe
1ea8fcfae4
py/builtinmath.c: use tgamma() instead of gamma().
...
gamma() is now deprecated.
2014-03-23 02:46:10 -07:00
xbe
606821007a
Fix OS X detection.
...
Switch to checking for the __APPLE__ and __MACH__ macros.
2014-03-22 17:37:20 -07:00
Damien George
196990b8b1
Merge pull request #364 from pfalcon/mpz-unbreak-int-long
...
objint_mpz: Quick&dirty implementation of bitwise operations.
2014-03-23 00:30:14 +00:00
Damien George
badc9d4a95
py: Improve dir(): extract names from type->methods table.
2014-03-23 00:03:11 +00:00
Paul Sokolovsky
57207b8818
objint_mpz: Quick&dirty implementation of bitwise operations.
...
Made solely to unbreak int-long.py test which in turn uncovered thinko
with implementation of inplace ops. On mpz level, bitwise ops implemented
only for same-sign numbers, and are not efficient (unconditional calling of
mpn_cmp() is apparently superfluous).
2014-03-23 01:59:11 +02:00
Damien George
e254809505
Merge branch 'master' of github.com:micropython/micropython
2014-03-22 23:55:11 +00:00
Damien George
c91097223d
py: Remove some unnecessary exception objects.
2014-03-22 23:40:02 +00:00
Paul Sokolovsky
8dc768b96f
objgenerator: Add comments for latest mp_obj_gen_instance_t refactors.
2014-03-22 23:42:22 +02:00
Damien George
3ec0a1a32d
py: Add 'object' object.
2014-03-22 21:31:28 +00:00
Damien George
eabdf6718a
py: Add function to convert long int to float.
2014-03-22 20:54:01 +00:00
Damien George
6280587320
py: Fix types in new math functions.
2014-03-22 20:44:15 +00:00
Damien George
ffa37db5c5
py: Fix int -> machine_uint_t.
2014-03-22 20:43:45 +00:00
Damien George
26a4506da7
Merge pull request #360 from rjdowdall/master
...
Fixed some math functions and added more exceptions.
2014-03-22 20:34:43 +00:00
Rachel Dowdall
2d15deebdc
Fixed floor division on mp ints and small ints. Added a floordivide test case.
2014-03-22 20:29:56 +00:00
Damien George
a6d53188b7
Merge pull request #359 from rjdowdall/master
...
Fixed some math functions and added more exceptions.
2014-03-22 20:26:17 +00:00
Rachel Dowdall
56402796d8
Fixed floor division on mp ints and small ints. Added a floordivide test case.
2014-03-22 20:19:24 +00:00
Rachel Dowdall
cde8631f15
Fixed modulo operator on ints and mp ints to agree with python. Added intdivmod.c and tests/basics/modulo.py.
2014-03-22 17:29:27 +00:00
Paul Sokolovsky
48caa09a9d
objgenerator: Implement .throw() method to throw exceptions into generator.
2014-03-22 17:55:42 +02:00
Paul Sokolovsky
61fd20f168
objgenerator: Implement throwing exceptions out of generator.
2014-03-22 17:55:42 +02:00
Paul Sokolovsky
c0abc28aa1
objgenerator: Keep exception stack within generator object, like value stack.
...
This is required to properly handle exceptions across yields.
2014-03-22 17:55:42 +02:00
Rachel Dowdall
721c55dced
Added exception hierarchy except for OSError and UnicodeError (requires arguments). Comment out the errors that aren't needed if memory becomes an issue.
2014-03-22 15:28:16 +00:00
Rachel Dowdall
249b9c761d
Fixed broken math functions that return bool and added some more.
2014-03-22 14:39:33 +00:00
Rachel Dowdall
17f45d41fe
Merge remote-tracking branch 'upstream/master'
2014-03-22 12:17:36 +00:00
Paul Sokolovsky
da8d21e0dd
showbc: Dump YIELD_FROM.
2014-03-22 13:52:08 +02:00
Paul Sokolovsky
1ecea7c753
py: Make 'bytes' be a proper type, support standard constructor args.
2014-03-22 00:07:04 +02:00
Paul Sokolovsky
be020c27a8
py: Make 'str' be a proper type, support standard constructor args.
2014-03-22 00:07:04 +02:00
Paul Sokolovsky
5972b4c05f
objstr: Switch from in-object string data to ptr to separate memory area.
...
This is pre-requisite for having efficient implementation of str<->bytes
conversion, and having that efficient is required with unfortunare
str vs bytes dichotomy in Python3.
2014-03-22 00:07:04 +02:00
Damien George
c070ff24a9
Disable some math functions until they work correctly.
2014-03-21 20:52:54 +00:00
Damien George
7b4b78bc33
py: Put back proper ValueError for badly parsed integers.
2014-03-21 20:46:38 +00:00
Damien George
b035db355a
py: Make str.[r]partition more efficient.
2014-03-21 20:39:40 +00:00
Damien George
e3e7c2bafb
Merge pull request #351 from xbe/str-partition
...
Implement str.partition and add tests for it.
2014-03-21 20:19:30 +00:00
Damien George
dfbafabf6f
py: Improve mp_parse_num_integer; make it self contained.
2014-03-21 12:15:59 +00:00