From 5ae3ddcc9a8fab9c845d98d58b26b6d258809475 Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Wed, 2 Dec 2015 00:38:06 +0200
Subject: [PATCH] unix/main: Check pending exception at the end of code block
 execution.

Usually this checking is done by VM on jump instructions, but for linear
sequences of instructions and builtin functions this won't happen. Particular
target of this change is long-running builtin functions like time.sleep().
---
 unix/main.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/unix/main.c b/unix/main.c
index e22176e13..10de233a3 100644
--- a/unix/main.c
+++ b/unix/main.c
@@ -121,6 +121,12 @@ STATIC int execute_from_lexer(mp_lexer_t *lex, mp_parse_input_kind_t input_kind,
         if (!compile_only) {
             // execute it
             mp_call_function_0(module_fun);
+            // check for pending exception
+            if (MP_STATE_VM(mp_pending_exception) != MP_OBJ_NULL) {
+                mp_obj_t obj = MP_STATE_VM(mp_pending_exception);
+                MP_STATE_VM(mp_pending_exception) = MP_OBJ_NULL;
+                nlr_raise(obj);
+            }
         }
 
         mp_hal_set_interrupt_char(-1);
-- 
GitLab