py/parse: Always free lexer even if an exception is raised.

Fixes issue #3843.

Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
Damien George
2023-09-05 18:17:27 +10:00
parent c9089e71a1
commit 5e122b11ea
3 changed files with 17 additions and 2 deletions

View File

@@ -68,6 +68,7 @@ user_files = {
"/data.txt": b"some data in a text file",
"/usermod1.py": b"print('in usermod1')\nimport usermod2",
"/usermod2.py": b"print('in usermod2')",
"/usermod3.py": b"syntax error",
}
os.mount(UserFS(user_files), "/userfs")
@@ -79,6 +80,12 @@ print(f.read())
sys.path.append("/userfs")
import usermod1
# import a .py file with a syntax error (file should be closed on error)
try:
import usermod3
except SyntaxError:
print("SyntaxError in usermod3")
# unmount and undo path addition
os.umount("/userfs")
sys.path.pop()

View File

@@ -10,3 +10,8 @@ stat /usermod2.py
open /usermod2.py rb
ioctl 4 0
in usermod2
stat /usermod3
stat /usermod3.py
open /usermod3.py rb
ioctl 4 0
SyntaxError in usermod3