From 4fff26a35cf88765efc1ca0595fa2b26eff4fc84 Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Sat, 29 Mar 2014 02:49:07 +0200
Subject: [PATCH] vm: Factor out exception block setup to a macro.

Will be reused in WITH bytecodes.
---
 py/vm.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/py/vm.c b/py/vm.c
index f939a7fdf..710fd1253 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -44,6 +44,14 @@ typedef enum {
 #define TOP() (*sp)
 #define SET_TOP(val) *sp = (val)
 
+#define SETUP_BLOCK() \
+    DECODE_ULABEL; /* except labels are always forward */ \
+    ++exc_sp; \
+    exc_sp->opcode = op; \
+    exc_sp->handler = ip + unum; \
+    exc_sp->val_sp = MP_TAGPTR_MAKE(sp, currently_in_except_block); \
+    currently_in_except_block = 0; /* in a try block now */
+
 mp_vm_return_kind_t mp_execute_byte_code(const byte *code, const mp_obj_t *args, uint n_args, const mp_obj_t *args2, uint n_args2, mp_obj_t *ret) {
     const byte *ip = code;
 
@@ -398,12 +406,7 @@ unwind_jump:
                     // matched against: POP_BLOCK or POP_EXCEPT (anything else?)
                     case MP_BC_SETUP_EXCEPT:
                     case MP_BC_SETUP_FINALLY:
-                        DECODE_ULABEL; // except labels are always forward
-                        ++exc_sp;
-                        exc_sp->opcode = op;
-                        exc_sp->handler = ip + unum;
-                        exc_sp->val_sp = MP_TAGPTR_MAKE(sp, currently_in_except_block);
-                        currently_in_except_block = 0; // in a try block now
+                        SETUP_BLOCK();
                         break;
 
                     case MP_BC_END_FINALLY:
-- 
GitLab