summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2017-04-10 17:17:22 +1000
committerDamien George <damien.p.george@gmail.com>2017-04-11 13:31:49 +1000
commit6c564aa408faf5d2769785b7ffc438a489310c3b (patch)
treef58cfa8723b2c71b624c4b9ed4580443d1d45458
parent9156c8b460a4b013312466744b47bc4bb5506269 (diff)
downloadmicropython-6c564aa408faf5d2769785b7ffc438a489310c3b.tar.gz
micropython-6c564aa408faf5d2769785b7ffc438a489310c3b.zip
unix, windows: Use core-provided KeyboardInterrupt exception object.
-rw-r--r--unix/main.c3
-rw-r--r--unix/mpconfigport.h2
-rw-r--r--unix/mpconfigport_minimal.h2
-rw-r--r--unix/unix_mphal.c10
-rw-r--r--windows/mpconfigport.h4
-rw-r--r--windows/windows_mphal.c6
6 files changed, 12 insertions, 15 deletions
diff --git a/unix/main.c b/unix/main.c
index a1c204cab0..edea7900d2 100644
--- a/unix/main.c
+++ b/unix/main.c
@@ -425,9 +425,6 @@ MP_NOINLINE int main_(int argc, char **argv) {
mp_init();
- // create keyboard interrupt object
- MP_STATE_VM(keyboard_interrupt_obj) = mp_obj_new_exception(&mp_type_KeyboardInterrupt);
-
char *home = getenv("HOME");
char *path = getenv("MICROPYPATH");
if (path == NULL) {
diff --git a/unix/mpconfigport.h b/unix/mpconfigport.h
index 7ecfc28c09..4067e19500 100644
--- a/unix/mpconfigport.h
+++ b/unix/mpconfigport.h
@@ -156,6 +156,7 @@
#define MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF (1)
#define MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE (256)
+#define MICROPY_KBD_EXCEPTION (1)
#define MICROPY_ASYNC_KBD_INTR (1)
extern const struct _mp_obj_module_t mp_module_machine;
@@ -283,7 +284,6 @@ void mp_unix_mark_exec(void);
#define MICROPY_PORT_ROOT_POINTERS \
const char *readline_hist[50]; \
- mp_obj_t keyboard_interrupt_obj; \
void *mmap_region_head; \
// We need to provide a declaration/definition of alloca()
diff --git a/unix/mpconfigport_minimal.h b/unix/mpconfigport_minimal.h
index 788c8519d2..b4d9f81439 100644
--- a/unix/mpconfigport_minimal.h
+++ b/unix/mpconfigport_minimal.h
@@ -47,6 +47,7 @@
#define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_TERSE)
#define MICROPY_WARNINGS (0)
#define MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF (0)
+#define MICROPY_KBD_EXCEPTION (1)
#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_NONE)
#define MICROPY_LONGINT_IMPL (MICROPY_LONGINT_IMPL_NONE)
#define MICROPY_STREAMS_NON_BLOCK (0)
@@ -99,7 +100,6 @@ extern const struct _mp_obj_module_t mp_module_os;
{ MP_OBJ_NEW_QSTR(MP_QSTR_uos), (mp_obj_t)&mp_module_os }, \
#define MICROPY_PORT_ROOT_POINTERS \
- mp_obj_t keyboard_interrupt_obj;
//////////////////////////////////////////
// Do not change anything beyond this line
diff --git a/unix/unix_mphal.c b/unix/unix_mphal.c
index 6c66662362..800484498e 100644
--- a/unix/unix_mphal.c
+++ b/unix/unix_mphal.c
@@ -40,20 +40,20 @@
STATIC void sighandler(int signum) {
if (signum == SIGINT) {
#if MICROPY_ASYNC_KBD_INTR
- mp_obj_exception_clear_traceback(MP_STATE_VM(keyboard_interrupt_obj));
+ mp_obj_exception_clear_traceback(MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception)));
sigset_t mask;
sigemptyset(&mask);
// On entry to handler, its signal is blocked, and unblocked on
// normal exit. As we instead perform longjmp, unblock it manually.
sigprocmask(SIG_SETMASK, &mask, NULL);
- nlr_raise(MP_STATE_VM(keyboard_interrupt_obj));
+ nlr_raise(MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception)));
#else
- if (MP_STATE_VM(mp_pending_exception) == MP_STATE_VM(keyboard_interrupt_obj)) {
+ if (MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception))) {
// this is the second time we are called, so die straight away
exit(1);
}
- mp_obj_exception_clear_traceback(MP_STATE_VM(keyboard_interrupt_obj));
- MP_STATE_VM(mp_pending_exception) = MP_STATE_VM(keyboard_interrupt_obj);
+ mp_obj_exception_clear_traceback(MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception)));
+ MP_STATE_VM(mp_pending_exception) = MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception));
#endif
}
}
diff --git a/windows/mpconfigport.h b/windows/mpconfigport.h
index 844e2618f4..b91662af48 100644
--- a/windows/mpconfigport.h
+++ b/windows/mpconfigport.h
@@ -104,6 +104,7 @@
#define MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF (1)
#define MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE (256)
+#define MICROPY_KBD_EXCEPTION (1)
#define MICROPY_PORT_INIT_FUNC init()
#define MICROPY_PORT_DEINIT_FUNC deinit()
@@ -161,8 +162,7 @@ extern const struct _mp_obj_module_t mp_module_time;
#if MICROPY_USE_READLINE == 1
#define MICROPY_PORT_ROOT_POINTERS \
- char *readline_hist[50]; \
- mp_obj_t keyboard_interrupt_obj;
+ char *readline_hist[50];
#endif
#define MP_STATE_PORT MP_STATE_VM
diff --git a/windows/windows_mphal.c b/windows/windows_mphal.c
index 3ad6939059..1dd3105d86 100644
--- a/windows/windows_mphal.c
+++ b/windows/windows_mphal.c
@@ -79,12 +79,12 @@ void mp_hal_stdio_mode_orig(void) {
// the thread created for handling it might not be running yet so we'd miss the notification.
BOOL WINAPI console_sighandler(DWORD evt) {
if (evt == CTRL_C_EVENT) {
- if (MP_STATE_VM(mp_pending_exception) == MP_STATE_VM(keyboard_interrupt_obj)) {
+ if (MP_STATE_VM(mp_pending_exception) == MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception))) {
// this is the second time we are called, so die straight away
exit(1);
}
- mp_obj_exception_clear_traceback(MP_STATE_VM(keyboard_interrupt_obj));
- MP_STATE_VM(mp_pending_exception) = MP_STATE_VM(keyboard_interrupt_obj);
+ mp_obj_exception_clear_traceback(MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception)));
+ MP_STATE_VM(mp_pending_exception) = MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception));
return TRUE;
}
return FALSE;