From 2bf7c092225645d8c5b15e536afdce39e3593e42 Mon Sep 17 00:00:00 2001 From: Damien George Date: Wed, 9 Apr 2014 15:26:46 +0100 Subject: 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. --- tests/basics/del-deref.py | 22 ++++++++++++++++++++++ tests/basics/del-local.py | 25 +++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 tests/basics/del-deref.py create mode 100644 tests/basics/del-local.py (limited to 'tests') diff --git a/tests/basics/del-deref.py b/tests/basics/del-deref.py new file mode 100644 index 000000000..1e7c0e41f --- /dev/null +++ b/tests/basics/del-deref.py @@ -0,0 +1,22 @@ +def f(): + x = 1 + y = 2 + def g(): + nonlocal x + print(y) + try: + print(x) + except NameError: + print("NameError") + def h(): + nonlocal x + print(y) + try: + del x + except NameError: + print("NameError") + print(x, y) + del x + g() + h() +f() diff --git a/tests/basics/del-local.py b/tests/basics/del-local.py new file mode 100644 index 000000000..05aa98b42 --- /dev/null +++ b/tests/basics/del-local.py @@ -0,0 +1,25 @@ +# delete local then try to reference it +def f(): + x = 1 + y = 2 + print(x, y) + del x + print(y) + try: + print(x) + except NameError: + print("NameError"); +f() + +# delete local then try to delete it again +def g(): + x = 3 + y = 4 + print(x, y) + del x + print(y) + try: + del x + except NameError: + print("NameError"); +g() -- cgit v1.2.3