From 75163325ae3fc33ebb9919231289fadec620d124 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 16 Sep 2017 13:05:15 +0300 Subject: [PATCH] tests/cpydiff: Add cases for locals() discrepancies. MicroPython doesn't maintain local symbolic environment, so any feature depending on it won't work as expected. --- tests/cpydiff/core_locals.py | 11 +++++++++++ tests/cpydiff/core_locals_eval.py | 14 ++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 tests/cpydiff/core_locals.py create mode 100644 tests/cpydiff/core_locals_eval.py diff --git a/tests/cpydiff/core_locals.py b/tests/cpydiff/core_locals.py new file mode 100644 index 0000000000..0240e5a1a9 --- /dev/null +++ b/tests/cpydiff/core_locals.py @@ -0,0 +1,11 @@ +""" +categories: Core,Runtime +description: Local variables aren't included in locals() result +cause: MicroPython doesn't maintain symbolic local environment, it is optimized to an array of slots. Thus, local variables can't be accessed by a name. +workaround: Unknown +""" +def test(): + val = 2 + print(locals()) + +test() diff --git a/tests/cpydiff/core_locals_eval.py b/tests/cpydiff/core_locals_eval.py new file mode 100644 index 0000000000..8416e3b069 --- /dev/null +++ b/tests/cpydiff/core_locals_eval.py @@ -0,0 +1,14 @@ +""" +categories: Core,Runtime +description: Code running in eval() function doesn't have access to local variables +cause: MicroPython doesn't maintain symbolic local environment, it is optimized to an array of slots. Thus, local variables can't be accessed by a name. Effectively, ``eval(expr)`` in MicroPython is equivalent to ``eval(expr, globals(), globals())``. +workaround: Unknown +""" +val = 1 + +def test(): + val = 2 + print(val) + eval("print(val)") + +test()