micropython/tests/basics
Damien George 7c1584aef1 py/compile: Fix scope of assignment expression target in comprehensions.
When := is used in a comprehension the target variable is bound to the
parent scope, so it's either a global or a nonlocal.  Prior to this commit
that was handled by simply using the parent scope's id_info for the
target variable.  That's completely wrong because it uses the slot number
for the parent's Python stack to store the variable, rather than the slot
number for the comprehension.  This will in most cases lead to incorrect
behaviour or memory faults.

This commit fixes the scoping of the target variable by explicitly
declaring it a global or nonlocal, depending on whether the parent is the
global scope or not.  Then the id_info of the comprehension can be used to
access the target variable.  This fixes a lot of cases of using := in a
comprehension.

Code size change for this commit:

       bare-arm:    +0 +0.000%
    minimal x86:    +0 +0.000%
       unix x64:  +152 +0.019% standard
          stm32:   +96 +0.024% PYBV10
         cc3200:   +96 +0.052%
        esp8266:  +196 +0.028% GENERIC
          esp32:  +156 +0.010% GENERIC[incl +8(data)]
         mimxrt:   +96 +0.027% TEENSY40
     renesas-ra:   +88 +0.014% RA6M2_EK
            nrf:   +88 +0.048% pca10040
            rp2:  +104 +0.020% PICO
           samd:   +88 +0.033% ADAFRUIT_ITSYBITSY_M4_EXPRESS

Fixes issue #10895.

Signed-off-by: Damien George <damien@micropython.org>
2023-03-09 12:13:12 +11:00
..
0prelim.py
andor.py
annotate_var.py
annotate_var.py.exp
array1.py py/objarray: Implement more/less comparisons for array. 2021-05-13 22:16:14 +10:00
array_add.py
array_construct.py
array_construct2.py
array_construct_endian.py
array_intbig.py
array_micropython.py py/objarray: Prohibit comparison of mismatching types. 2021-05-13 22:16:14 +10:00
array_micropython.py.exp
assign1.py
assign_expr.py py/emitnative: Initialise locals as Python object type for native code. 2022-12-16 11:44:10 +11:00
assign_expr.py.exp py/emitnative: Initialise locals as Python object type for native code. 2022-12-16 11:44:10 +11:00
assign_expr_scope.py py/compile: Fix scope of assignment expression target in comprehensions. 2023-03-09 12:13:12 +11:00
assign_expr_scope.py.exp py/compile: Fix scope of assignment expression target in comprehensions. 2023-03-09 12:13:12 +11:00
assign_expr_syntaxerror.py py/compile: Fix scope of assignment expression target in comprehensions. 2023-03-09 12:13:12 +11:00
assign_expr_syntaxerror.py.exp py/compile: Fix scope of assignment expression target in comprehensions. 2023-03-09 12:13:12 +11:00
async_await.py
async_await.py.exp
async_await2.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
async_await2.py.exp
async_def.py
async_def.py.exp
async_for.py py/compile: Don't await __aiter__ special method in async-for. 2020-07-25 00:58:18 +10:00
async_for.py.exp
async_for2.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
async_for2.py.exp py/compile: Don't await __aiter__ special method in async-for. 2020-07-25 00:58:18 +10:00
async_syntaxerror.py py/compile: Raise an error on async with/for outside an async function. 2021-05-30 10:38:48 +10:00
async_syntaxerror.py.exp py/compile: Raise an error on async with/for outside an async function. 2021-05-30 10:38:48 +10:00
async_with.py
async_with.py.exp
async_with2.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
async_with2.py.exp
async_with_break.py
async_with_break.py.exp
async_with_return.py
async_with_return.py.exp
attrtuple1.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
bool1.py
boundmeth1.py
break.py
builtin_abs.py
builtin_abs_intbig.py
builtin_allany.py
builtin_bin.py
builtin_bin_intbig.py
builtin_callable.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
builtin_chr.py
builtin_compile.py py/runtime: Fix builtin compile() in "single" mode so it prints exprs. 2020-08-22 11:38:46 +10:00
builtin_delattr.py
builtin_dir.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
builtin_divmod.py
builtin_divmod_intbig.py
builtin_ellipsis.py
builtin_enumerate.py
builtin_eval.py
builtin_eval_buffer.py
builtin_eval_error.py
builtin_exec.py
builtin_exec_buffer.py
builtin_filter.py
builtin_getattr.py
builtin_hasattr.py
builtin_hash.py
builtin_hash_gen.py
builtin_hash_intbig.py
builtin_help.py
builtin_help.py.exp
builtin_hex.py
builtin_hex_intbig.py
builtin_id.py
builtin_issubclass.py
builtin_len1.py
builtin_locals.py
builtin_map.py
builtin_minmax.py
builtin_next_arg2.py
builtin_oct.py
builtin_oct_intbig.py
builtin_ord.py
builtin_override.py
builtin_pow.py
builtin_pow3.py
builtin_pow3_intbig.py
builtin_print.py
builtin_property.py
builtin_property_inherit.py
builtin_range.py
builtin_range_attrs.py
builtin_range_binop.py
builtin_reversed.py
builtin_round.py
builtin_round_int.py
builtin_round_intbig.py
builtin_setattr.py
builtin_slice.py
builtin_sorted.py
builtin_str_hex.py tests/extmod/ubinascii: Add tests for bytes.hex etc. 2022-08-12 12:44:30 +10:00
builtin_str_hex.py.exp tests/basics: Add exp file for builtin_str_hex test. 2022-11-10 11:44:49 +11:00
builtin_sum.py
builtin_type.py
builtin_zip.py
bytearray1.py py/objarray: Implement more/less comparisons for array. 2021-05-13 22:16:14 +10:00
bytearray_add.py
bytearray_append.py
bytearray_byte_operations.py py/objstr: Consolidate methods for str/bytes/bytearray/array. 2022-08-11 23:18:02 +10:00
bytearray_center.py py/objstr: Consolidate methods for str/bytes/bytearray/array. 2022-08-11 23:18:02 +10:00
bytearray_construct.py py/objarray: Detect bytearray(str) without an encoding. 2022-11-08 23:09:22 +11:00
bytearray_construct_array.py
bytearray_construct_endian.py
bytearray_count.py py/objstr: Consolidate methods for str/bytes/bytearray/array. 2022-08-11 23:18:02 +10:00
bytearray_decode.py
bytearray_intbig.py
bytearray_partition.py py/objstr: Consolidate methods for str/bytes/bytearray/array. 2022-08-11 23:18:02 +10:00
bytearray_slice_assign.py
bytes.py
bytes_add.py
bytes_add_array.py
bytes_add_bytearray.py
bytes_add_endian.py
bytes_center.py py/objstr: Consolidate methods for str/bytes/bytearray/array. 2022-08-11 23:18:02 +10:00
bytes_compare.py
bytes_compare2.py
bytes_compare3.py
bytes_compare3.py.exp
bytes_compare_array.py
bytes_compare_bytearray.py
bytes_construct.py
bytes_construct_array.py
bytes_construct_bytearray.py
bytes_construct_endian.py
bytes_construct_intbig.py
bytes_count.py py/objstr: Don't treat bytes as unicode in str.count. 2022-09-26 00:54:18 +10:00
bytes_find.py
bytes_format_modulo.py
bytes_format_modulo.py.exp
bytes_gen.py
bytes_large.py
bytes_mult.py
bytes_partition.py
bytes_replace.py
bytes_split.py
bytes_strip.py
bytes_subscr.py
class1.py
class2.py
class3.py
class_bases.py
class_bind_self.py py: Rework mp_convert_member_lookup to properly handle built-ins. 2020-06-30 23:55:32 +10:00
class_binop.py
class_call.py
class_contains.py py/objtype: Convert result of user __contains__ method to bool. 2022-04-20 15:44:46 +10:00
class_delattr_setattr.py
class_descriptor.py
class_dict.py py/objtype: Handle __dict__ attribute when type has no locals. 2020-10-10 00:16:32 +11:00
class_emptybases.py
class_getattr.py
class_inherit1.py
class_inherit_mul.py
class_inplace_op.py
class_inplace_op2.py tests/basics: Add test for MICROPY_PY_ALL_INPLACE_SPECIAL_METHODS ops. 2020-09-18 18:40:42 +10:00
class_inplace_op2.py.exp tests/basics: Add test for MICROPY_PY_ALL_INPLACE_SPECIAL_METHODS ops. 2020-09-18 18:40:42 +10:00
class_instance_override.py
class_item.py
class_misc.py
class_new.py
class_notimpl.py
class_number.py
class_ordereddict.py py/objtype: Support passing in an OrderedDict to type() as the locals. 2020-06-24 12:05:40 +10:00
class_ordereddict.py.exp py/objtype: Support passing in an OrderedDict to type() as the locals. 2020-06-24 12:05:40 +10:00
class_reverse_op.py
class_staticclassmethod.py
class_store.py
class_store_class.py
class_str.py
class_super.py
class_super_aslocal.py
class_super_closure.py
class_super_multinherit.py
class_super_object.py
class_use_other.py
closure1.py
closure2.py
closure_defargs.py
closure_manyvars.py
closure_namedarg.py
compare_multi.py
comprehension1.py
containment.py tests/run-tests: Use -BS flags when running CPython. 2020-09-25 12:27:23 +10:00
continue.py
decorator.py
del_attr.py
del_deref.py
del_global.py
del_local.py
del_name.py
del_subscr.py
deque1.py
deque2.py
deque2.py.exp
dict1.py
dict2.py
dict_clear.py
dict_construct.py
dict_copy.py
dict_del.py
dict_fixed.py
dict_fixed.py.exp
dict_from_iter.py
dict_fromkeys.py
dict_fromkeys2.py
dict_get.py
dict_intern.py
dict_iterator.py
dict_pop.py
dict_popitem.py
dict_setdefault.py
dict_specialmeth.py
dict_union.py py/objdict: Implement dictionary union (PEP 584). 2022-11-25 12:46:14 +11:00
dict_union.py.exp py/objdict: Implement dictionary union (PEP 584). 2022-11-25 12:46:14 +11:00
dict_update.py
dict_views.py
equal.py
equal_class.py
errno1.py py/objexcept: Pretty print OSError also when it has 2 arguments. 2021-07-01 13:23:54 +10:00
errno1.py.exp py/objexcept: Pretty print OSError also when it has 2 arguments. 2021-07-01 13:23:54 +10:00
except_match_tuple.py
exception1.py py/objexcept: Support errno attribute on OSError exceptions. 2021-04-23 22:03:46 +10:00
exception_chain.py
exception_chain.py.exp
exceptpoly.py
exceptpoly2.py
floordivide.py
floordivide_intbig.py
for1.py
for2.py
for3.py
for_break.py
for_else.py
for_range.py
for_return.py
frozenset1.py
frozenset_add.py
frozenset_binop.py
frozenset_copy.py
frozenset_difference.py
frozenset_set.py
fun1.py
fun2.py
fun3.py
fun_annotations.py
fun_calldblstar.py py/bc: Fix checking for duplicate **kwargs. 2022-11-28 11:23:22 +11:00
fun_calldblstar2.py
fun_calldblstar3.py
fun_calldblstar4.py py/runtime: Allow multiple **args in a function call. 2022-03-31 16:54:00 +11:00
fun_callstar.py py/runtime: Allow multiple *args in a function call. 2022-03-31 16:59:30 +11:00
fun_callstardblstar.py py/runtime: Fix crash in star arg unpacking. 2022-08-06 11:32:58 -05:00
fun_defargs.py
fun_defargs2.py
fun_error.py
fun_error2.py
fun_globals.py tests/basics: Add tests for __name__ and __globals__ attrs on closures. 2022-06-24 23:55:13 +10:00
fun_kwargs.py
fun_kwonly.py
fun_kwonlydef.py
fun_kwvarargs.py py/runtime: Allow multiple *args in a function call. 2022-03-31 16:59:30 +11:00
fun_largestate.py
fun_name.py tests/basics: Add tests for __name__ and __globals__ attrs on closures. 2022-06-24 23:55:13 +10:00
fun_str.py
fun_varargs.py
gc1.py
gen_yield_from.py
gen_yield_from_close.py
gen_yield_from_ducktype.py
gen_yield_from_exc.py
gen_yield_from_executing.py
gen_yield_from_iter.py
gen_yield_from_pending.py
gen_yield_from_send.py
gen_yield_from_stopped.py py: Support single argument to optimised MP_OBJ_STOP_ITERATION. 2021-07-15 00:12:41 +10:00
gen_yield_from_throw.py
gen_yield_from_throw2.py
gen_yield_from_throw3.py
generator1.py
generator2.py
generator_args.py
generator_close.py
generator_closure.py
generator_exc.py
generator_name.py
generator_pend_throw.py
generator_pend_throw.py.exp
generator_pep479.py
generator_pep479.py.exp
generator_return.py
generator_send.py
generator_throw.py
generator_throw_nested.py
getattr.py
getitem.py
globals_del.py
ifcond.py
ifexpr.py
int1.py
int2.py
int_big1.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
int_big_add.py
int_big_and.py
int_big_and2.py
int_big_and3.py
int_big_cmp.py tests/basics/int_big_cmp.py: Add more tests for big-int comparison. 2021-12-21 18:00:11 +11:00
int_big_div.py py/mpz: Fix overflow of borrow in mpn_div. 2021-02-08 11:50:05 +11:00
int_big_error.py py/objint_mpz: Catch and reject @ and @= operating on big integers. 2023-01-23 13:03:51 +11:00
int_big_lshift.py
int_big_mod.py
int_big_mul.py
int_big_or.py
int_big_or2.py
int_big_or3.py
int_big_pow.py
int_big_rshift.py
int_big_unary.py
int_big_xor.py
int_big_xor2.py
int_big_xor3.py
int_big_zeroone.py py/mpz: Fix bugs with bitwise of -0 by ensuring all 0's are positive. 2021-12-21 18:00:05 +11:00
int_bytes.py
int_bytes_intbig.py
int_constfolding.py
int_constfolding_intbig.py
int_divmod.py
int_divmod_intbig.py
int_divzero.py
int_intbig.py
int_small.py
io_buffered_writer.py
io_buffered_writer.py.exp
io_bytesio_cow.py
io_bytesio_ext.py
io_bytesio_ext2.py
io_bytesio_ext2.py.exp
io_iobase.py
io_stringio1.py
io_stringio_base.py py/obj: Merge getiter and iternext mp_obj_type_t slots. 2022-09-19 19:06:13 +10:00
io_stringio_with.py
io_write_ext.py
io_write_ext.py.exp
is_isnot.py tests/basics: Split out literal tests that raise SyntaxWarning on CPy. 2021-05-30 13:41:37 +10:00
is_isnot_literal.py tests/basics: Split out literal tests that raise SyntaxWarning on CPy. 2021-05-30 13:41:37 +10:00
is_isnot_literal.py.exp tests/basics: Split out literal tests that raise SyntaxWarning on CPy. 2021-05-30 13:41:37 +10:00
iter0.py
iter1.py
iter2.py
iter_of_iter.py
lambda1.py
lambda_defargs.py
lexer.py
list1.py
list_clear.py
list_compare.py
list_copy.py
list_count.py
list_extend.py
list_index.py
list_insert.py
list_mult.py
list_pop.py
list_remove.py
list_reverse.py
list_slice.py
list_slice_3arg.py
list_slice_assign.py
list_slice_assign_grow.py
list_sort.py
list_sum.py
logic_constfolding.py
memoryerror.py
memoryerror.py.exp
memoryview1.py tests/basics: Split out memoryview slice-assign tests to separate file. 2020-07-21 01:05:59 +10:00
memoryview2.py
memoryview_gc.py py/objarray: Fix constructing a memoryview from a memoryview. 2021-05-18 10:18:56 +10:00
memoryview_intbig.py
memoryview_itemsize.py
memoryview_slice_assign.py py/obj.h: Fix mp_seq_replace_slice_no_grow to use memmove not memcpy. 2020-07-21 01:05:59 +10:00
memoryview_slice_size.py py/objarray: Raise error on out-of-bound memoryview slice start. 2023-01-20 16:31:37 +11:00
memoryview_slice_size.py.exp py/objarray: Raise error on out-of-bound memoryview slice start. 2023-01-20 16:31:37 +11:00
module1.py
module2.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
module2.py.exp
module_dict.py py/objmodule: Add support for __dict__. 2022-09-19 23:22:46 +10:00
namedtuple1.py py/objnamedtuple: Fix segfault with empty namedtuple. 2022-07-13 16:25:35 +10:00
namedtuple_asdict.py
nanbox_smallint.py py/mpconfig: Include micropython module in core features. 2022-12-06 13:34:17 +11:00
nanbox_smallint.py.exp tests/basics: Add test for creating small-ints in nan-box builds. 2022-03-07 15:25:11 +11:00
object1.py
object_dict.py
object_new.py
op_error.py tests/basics: Split out literal tests that raise SyntaxWarning on CPy. 2021-05-30 13:41:37 +10:00
op_error_bytearray.py
op_error_intbig.py
op_error_literal.py tests/basics: Split out literal tests that raise SyntaxWarning on CPy. 2021-05-30 13:41:37 +10:00
op_error_literal.py.exp tests/basics: Split out literal tests that raise SyntaxWarning on CPy. 2021-05-30 13:41:37 +10:00
op_error_memoryview.py
op_precedence.py
ordereddict1.py
ordereddict_eq.py
ordereddict_eq.py.exp
parser.py
parser.py.exp
python34.py py/runtime: Allow multiple *args in a function call. 2022-03-31 16:59:30 +11:00
python34.py.exp py/runtime: Allow multiple *args in a function call. 2022-03-31 16:59:30 +11:00
python36.py
python36.py.exp
return1.py
scope.py
scope_class.py py/emitcommon: Don't implicitly close class vars that are assigned to. 2022-05-03 16:38:43 +10:00
scope_implicit.py
self_type_check.py
seq_unpack.py
set_add.py
set_basic.py
set_binop.py
set_clear.py
set_comprehension.py
set_containment.py
set_copy.py
set_difference.py
set_discard.py
set_intersection.py
set_isdisjoint.py
set_isfooset.py
set_iter.py
set_iter_of_iter.py
set_pop.py
set_remove.py
set_specialmeth.py
set_symmetric_difference.py
set_type.py
set_union.py
set_unop.py
set_update.py
slice_attrs.py
slice_indices.py
slice_intbig.py
slots_bool_len.py
special_comparisons.py
special_comparisons2.py
special_methods.py tests/basics: Enable == and != special-method tests now that they work. 2020-09-18 18:40:42 +10:00
special_methods2.py tests/basics: Enable == and != special-method tests now that they work. 2020-09-18 18:40:42 +10:00
special_methods2.py.exp
stopiteration.py py: Support single argument to optimised MP_OBJ_STOP_ITERATION. 2021-07-15 00:12:41 +10:00
string1.py
string_center.py
string_compare.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
string_count.py
string_cr_conversion.py
string_crlf_conversion.py
string_endswith.py
string_endswith_upy.py
string_endswith_upy.py.exp
string_escape.py
string_find.py
string_format.py
string_format2.py
string_format_cp310.py py/objstr: Support '{:08}'.format("Jan") like Python 3.10. 2022-01-19 15:34:32 +11:00
string_format_cp310.py.exp py/objstr: Support '{:08}'.format("Jan") like Python 3.10. 2022-01-19 15:34:32 +11:00
string_format_error.py py/objstr: Support '{:08}'.format("Jan") like Python 3.10. 2022-01-19 15:34:32 +11:00
string_format_modulo.py
string_format_modulo_int.py
string_fstring.py py/lexer: Wrap in parenthesis all f-string arguments passed to format. 2023-01-20 17:54:32 +11:00
string_fstring_debug.py py/lexer: Wrap in parenthesis all f-string arguments passed to format. 2023-01-20 17:54:32 +11:00
string_fstring_debug.py.exp py/lexer: Wrap in parenthesis all f-string arguments passed to format. 2023-01-20 17:54:32 +11:00
string_index.py
string_istest.py
string_join.py
string_large.py
string_mult.py
string_partition.py
string_replace.py
string_repr.py
string_rfind.py
string_rindex.py
string_rpartition.py
string_rsplit.py
string_slice.py
string_split.py
string_splitlines.py
string_startswith.py
string_startswith_upy.py
string_startswith_upy.py.exp
string_strip.py
string_upperlow.py
struct1.py
struct1_intbig.py py/mpz: Do sign extension in mpz_as_bytes for negative values. 2020-11-11 22:18:24 +11:00
struct2.py
struct_endian.py
struct_micropython.py
struct_micropython.py.exp
subclass_classmethod.py
subclass_native1.py
subclass_native2_list.py
subclass_native2_tuple.py
subclass_native3.py py/objexcept: Make mp_obj_exception_get_value support subclassed excs. 2021-07-15 00:12:41 +10:00
subclass_native4.py
subclass_native5.py
subclass_native_buffer.py
subclass_native_call.py
subclass_native_call.py.exp
subclass_native_cmp.py
subclass_native_containment.py
subclass_native_exc_new.py tests/basics: Add tests for type-checking subclassed exc instances. 2021-10-21 12:42:48 +11:00
subclass_native_exc_new.py.exp tests/basics: Add tests for type-checking subclassed exc instances. 2021-10-21 12:42:48 +11:00
subclass_native_init.py
subclass_native_iter.py
subclass_native_specmeth.py
subclass_native_str.py
syntaxerror.py
syntaxerror_return.py
sys1.py tests: Fix tests to use sys.implementation._mpy. 2022-05-17 09:46:40 +10:00
sys_exit.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
sys_getsizeof.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
sys_path.py ports: Move '.frozen' to second entry in sys.path. 2021-12-29 23:55:36 +11:00
sys_tracebacklimit.py py/modsys: Add optional sys.tracebacklimit attribute. 2022-03-10 10:43:21 +11:00
sys_tracebacklimit.py.exp tests/basics: Add .exp file for sys.tracebacklimit test. 2022-06-07 16:55:18 +10:00
true_value.py
try1.py
try2.py
try3.py
try4.py
try_as_var.py
try_continue.py
try_else.py
try_else_finally.py
try_error.py
try_except_break.py
try_except_break.py.exp
try_finally1.py
try_finally2.py
try_finally_break.py
try_finally_break2.py
try_finally_continue.py
try_finally_continue.py.exp
try_finally_loops.py
try_finally_return.py
try_finally_return2.py
try_finally_return3.py
try_finally_return4.py
try_finally_return5.py
try_reraise.py
try_reraise2.py
try_return.py
tuple1.py
tuple_compare.py
tuple_count.py
tuple_index.py
tuple_mult.py
tuple_slice.py
types1.py
types2.py
unary_op.py py/runtime: Fix bool unary op for subclasses of native types. 2021-07-23 12:40:00 +10:00
unboundlocal.py
unpack1.py
while1.py
while_cond.py
while_nest_exc.py
with1.py
with_break.py
with_continue.py
with_raise.py
with_return.py