py, vm: Make unum a local variable for each opcode that uses it.

This makes no change to the generated code, but it's now easier to
understand since unum is not a "global" variable anymore.
diff --git a/py/vm.c b/py/vm.c
index 720212f..a2e6a3f 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -61,36 +61,35 @@
     UNWIND_JUMP,
 } mp_unwind_reason_t;
 
-#define DECODE_UINT do { \
-    unum = 0; \
+#define DECODE_UINT \
+    mp_uint_t unum = 0; \
     do { \
         unum = (unum << 7) + (*ip & 0x7f); \
-    } while ((*ip++ & 0x80) != 0); \
-} while (0)
-#define DECODE_ULABEL do { unum = (ip[0] | (ip[1] << 8)); ip += 2; } while (0)
-#define DECODE_SLABEL do { unum = (ip[0] | (ip[1] << 8)) - 0x8000; ip += 2; } while (0)
+    } while ((*ip++ & 0x80) != 0)
+#define DECODE_ULABEL mp_uint_t ulab = (ip[0] | (ip[1] << 8)); ip += 2
+#define DECODE_SLABEL mp_uint_t slab = (ip[0] | (ip[1] << 8)) - 0x8000; ip += 2
 #define DECODE_QSTR qstr qst = 0; \
     do { \
         qst = (qst << 7) + (*ip & 0x7f); \
     } while ((*ip++ & 0x80) != 0)
-#define DECODE_PTR do { \
+#define DECODE_PTR \
     ip = (byte*)(((mp_uint_t)ip + sizeof(mp_uint_t) - 1) & (~(sizeof(mp_uint_t) - 1))); /* align ip */ \
-    unum = *(mp_uint_t*)ip; \
-    ip += sizeof(mp_uint_t); \
-} while (0)
+    void *ptr = (void*)*(mp_uint_t*)ip; \
+    ip += sizeof(mp_uint_t)
 #define PUSH(val) *++sp = (val)
 #define POP() (*sp--)
 #define TOP() (*sp)
 #define SET_TOP(val) *sp = (val)
 
-#define PUSH_EXC_BLOCK() \
+#define PUSH_EXC_BLOCK() do { \
     DECODE_ULABEL; /* except labels are always forward */ \
     ++exc_sp; \
     exc_sp->opcode = *code_state->ip; \
-    exc_sp->handler = ip + unum; \
+    exc_sp->handler = ip + ulab; \
     exc_sp->val_sp = MP_TAGPTR_MAKE(sp, currently_in_except_block); \
     exc_sp->prev_exc = MP_OBJ_NULL; \
-    currently_in_except_block = 0; /* in a try block now */
+    currently_in_except_block = 0; /* in a try block now */ \
+} while (0)
 
 #define POP_EXC_BLOCK() \
     currently_in_except_block = MP_TAGPTR_TAG(exc_sp->val_sp); /* restore previous state */ \
@@ -142,7 +141,6 @@
             // local variables that are not visible to the exception handler
             const byte *ip = code_state->ip;
             mp_obj_t *sp = code_state->sp;
-            mp_uint_t unum;
             mp_obj_t obj_shared;
 
             // If we have exception to inject, now that we finish setting up
@@ -225,7 +223,7 @@
                     PUSH(MP_OBJ_NULL);
                     DISPATCH();
 
-                ENTRY(MP_BC_LOAD_FAST_N):
+                ENTRY(MP_BC_LOAD_FAST_N): {
                     DECODE_UINT;
                     obj_shared = fastn[-unum];
                     load_check:
@@ -237,11 +235,13 @@
                     }
                     PUSH(obj_shared);
                     DISPATCH();
+                }
 
-                ENTRY(MP_BC_LOAD_DEREF):
+                ENTRY(MP_BC_LOAD_DEREF): {
                     DECODE_UINT;
                     obj_shared = mp_obj_cell_get(fastn[-unum]);
                     goto load_check;
+                }
 
                 ENTRY(MP_BC_LOAD_NAME): {
                     DECODE_QSTR;
@@ -278,15 +278,17 @@
                     DISPATCH();
                 }
 
-                ENTRY(MP_BC_STORE_FAST_N):
+                ENTRY(MP_BC_STORE_FAST_N): {
                     DECODE_UINT;
                     fastn[-unum] = POP();
                     DISPATCH();
+                }
 
-                ENTRY(MP_BC_STORE_DEREF):
+                ENTRY(MP_BC_STORE_DEREF): {
                     DECODE_UINT;
                     mp_obj_cell_set(fastn[-unum], POP());
                     DISPATCH();
+                }
 
                 ENTRY(MP_BC_STORE_NAME): {
                     DECODE_QSTR;
@@ -312,21 +314,23 @@
                     sp -= 3;
                     DISPATCH();
 
-                ENTRY(MP_BC_DELETE_FAST):
+                ENTRY(MP_BC_DELETE_FAST): {
                     DECODE_UINT;
                     if (fastn[-unum] == MP_OBJ_NULL) {
                         goto local_name_error;
                     }
                     fastn[-unum] = MP_OBJ_NULL;
                     DISPATCH();
+                }
 
-                ENTRY(MP_BC_DELETE_DEREF):
+                ENTRY(MP_BC_DELETE_DEREF): {
                     DECODE_UINT;
                     if (mp_obj_cell_get(fastn[-unum]) == MP_OBJ_NULL) {
                         goto local_name_error;
                     }
                     mp_obj_cell_set(fastn[-unum], MP_OBJ_NULL);
                     DISPATCH();
+                }
 
                 ENTRY(MP_BC_DELETE_NAME): {
                     DECODE_QSTR;
@@ -371,42 +375,47 @@
                     DISPATCH();
                 }
 
-                ENTRY(MP_BC_JUMP):
+                ENTRY(MP_BC_JUMP): {
                     DECODE_SLABEL;
-                    ip += unum;
+                    ip += slab;
                     DISPATCH_WITH_PEND_EXC_CHECK();
+                }
 
-                ENTRY(MP_BC_POP_JUMP_IF_TRUE):
+                ENTRY(MP_BC_POP_JUMP_IF_TRUE): {
                     DECODE_SLABEL;
                     if (mp_obj_is_true(POP())) {
-                        ip += unum;
+                        ip += slab;
                     }
                     DISPATCH_WITH_PEND_EXC_CHECK();
+                }
 
-                ENTRY(MP_BC_POP_JUMP_IF_FALSE):
+                ENTRY(MP_BC_POP_JUMP_IF_FALSE): {
                     DECODE_SLABEL;
                     if (!mp_obj_is_true(POP())) {
-                        ip += unum;
+                        ip += slab;
                     }
                     DISPATCH_WITH_PEND_EXC_CHECK();
+                }
 
-                ENTRY(MP_BC_JUMP_IF_TRUE_OR_POP):
+                ENTRY(MP_BC_JUMP_IF_TRUE_OR_POP): {
                     DECODE_SLABEL;
                     if (mp_obj_is_true(TOP())) {
-                        ip += unum;
+                        ip += slab;
                     } else {
                         sp--;
                     }
                     DISPATCH_WITH_PEND_EXC_CHECK();
+                }
 
-                ENTRY(MP_BC_JUMP_IF_FALSE_OR_POP):
+                ENTRY(MP_BC_JUMP_IF_FALSE_OR_POP): {
                     DECODE_SLABEL;
                     if (mp_obj_is_true(TOP())) {
                         sp--;
                     } else {
-                        ip += unum;
+                        ip += slab;
                     }
                     DISPATCH_WITH_PEND_EXC_CHECK();
+                }
 
                 ENTRY(MP_BC_SETUP_WITH): {
                     mp_obj_t obj = TOP();
@@ -478,12 +487,12 @@
                     DISPATCH();
                 }
 
-                ENTRY(MP_BC_UNWIND_JUMP):
+                ENTRY(MP_BC_UNWIND_JUMP): {
                     DECODE_SLABEL;
-                    PUSH((void*)(ip + unum)); // push destination ip for jump
+                    PUSH((void*)(ip + slab)); // push destination ip for jump
                     PUSH((void*)(mp_uint_t)(*ip)); // push number of exception handlers to unwind (0x80 bit set if we also need to pop stack)
-unwind_jump:
-                    unum = (mp_uint_t)POP(); // get number of exception handlers to unwind
+unwind_jump:;
+                    mp_uint_t unum = (mp_uint_t)POP(); // get number of exception handlers to unwind
                     while ((unum & 0x7f) > 0) {
                         unum -= 1;
                         assert(exc_sp >= exc_stack);
@@ -505,12 +514,14 @@
                         sp--;
                     }
                     DISPATCH_WITH_PEND_EXC_CHECK();
+                }
 
                 // matched against: POP_BLOCK or POP_EXCEPT (anything else?)
                 ENTRY(MP_BC_SETUP_EXCEPT):
-                ENTRY(MP_BC_SETUP_FINALLY):
+                ENTRY(MP_BC_SETUP_FINALLY): {
                     PUSH_EXC_BLOCK();
                     DISPATCH();
+                }
 
                 ENTRY(MP_BC_END_FINALLY):
                     // not fully implemented
@@ -550,7 +561,7 @@
                     mp_obj_t value = mp_iternext_allow_raise(TOP());
                     if (value == MP_OBJ_STOP_ITERATION) {
                         --sp; // pop the exhausted iterator
-                        ip += unum; // jump to after for-block
+                        ip += ulab; // jump to after for-block
                     } else {
                         PUSH(value); // push the next iteration value
                     }
@@ -584,59 +595,66 @@
                     }
                     DISPATCH();
 
-                ENTRY(MP_BC_BUILD_TUPLE):
+                ENTRY(MP_BC_BUILD_TUPLE): {
                     DECODE_UINT;
                     sp -= unum - 1;
                     SET_TOP(mp_obj_new_tuple(unum, sp));
                     DISPATCH();
+                }
 
-                ENTRY(MP_BC_BUILD_LIST):
+                ENTRY(MP_BC_BUILD_LIST): {
                     DECODE_UINT;
                     sp -= unum - 1;
                     SET_TOP(mp_obj_new_list(unum, sp));
                     DISPATCH();
+                }
 
-                ENTRY(MP_BC_LIST_APPEND):
+                ENTRY(MP_BC_LIST_APPEND): {
                     DECODE_UINT;
                     // I think it's guaranteed by the compiler that sp[unum] is a list
                     mp_obj_list_append(sp[-unum], sp[0]);
                     sp--;
                     DISPATCH();
+                }
 
-                ENTRY(MP_BC_BUILD_MAP):
+                ENTRY(MP_BC_BUILD_MAP): {
                     DECODE_UINT;
                     PUSH(mp_obj_new_dict(unum));
                     DISPATCH();
+                }
 
                 ENTRY(MP_BC_STORE_MAP):
                     sp -= 2;
                     mp_obj_dict_store(sp[0], sp[2], sp[1]);
                     DISPATCH();
 
-                ENTRY(MP_BC_MAP_ADD):
+                ENTRY(MP_BC_MAP_ADD): {
                     DECODE_UINT;
                     // I think it's guaranteed by the compiler that sp[-unum - 1] is a map
                     mp_obj_dict_store(sp[-unum - 1], sp[0], sp[-1]);
                     sp -= 2;
                     DISPATCH();
+                }
 
 #if MICROPY_PY_BUILTINS_SET
-                ENTRY(MP_BC_BUILD_SET):
+                ENTRY(MP_BC_BUILD_SET): {
                     DECODE_UINT;
                     sp -= unum - 1;
                     SET_TOP(mp_obj_new_set(unum, sp));
                     DISPATCH();
+                }
 
-                ENTRY(MP_BC_SET_ADD):
+                ENTRY(MP_BC_SET_ADD): {
                     DECODE_UINT;
                     // I think it's guaranteed by the compiler that sp[-unum] is a set
                     mp_obj_set_store(sp[-unum], sp[0]);
                     sp--;
                     DISPATCH();
+                }
 #endif
 
 #if MICROPY_PY_BUILTINS_SLICE
-                ENTRY(MP_BC_BUILD_SLICE):
+                ENTRY(MP_BC_BUILD_SLICE): {
                     DECODE_UINT;
                     if (unum == 2) {
                         mp_obj_t stop = POP();
@@ -649,30 +667,34 @@
                         SET_TOP(mp_obj_new_slice(start, stop, step));
                     }
                     DISPATCH();
+                }
 #endif
 
-                ENTRY(MP_BC_UNPACK_SEQUENCE):
+                ENTRY(MP_BC_UNPACK_SEQUENCE): {
                     DECODE_UINT;
                     mp_unpack_sequence(sp[0], unum, sp);
                     sp += unum - 1;
                     DISPATCH();
+                }
 
-                ENTRY(MP_BC_UNPACK_EX):
+                ENTRY(MP_BC_UNPACK_EX): {
                     DECODE_UINT;
                     mp_unpack_ex(sp[0], unum, sp);
                     sp += (unum & 0xff) + ((unum >> 8) & 0xff);
                     DISPATCH();
+                }
 
-                ENTRY(MP_BC_MAKE_FUNCTION):
+                ENTRY(MP_BC_MAKE_FUNCTION): {
                     DECODE_PTR;
-                    PUSH(mp_make_function_from_raw_code((mp_raw_code_t*)unum, MP_OBJ_NULL, MP_OBJ_NULL));
+                    PUSH(mp_make_function_from_raw_code(ptr, MP_OBJ_NULL, MP_OBJ_NULL));
                     DISPATCH();
+                }
 
                 ENTRY(MP_BC_MAKE_FUNCTION_DEFARGS): {
                     DECODE_PTR;
                     // Stack layout: def_tuple def_dict <- TOS
                     mp_obj_t def_dict = POP();
-                    SET_TOP(mp_make_function_from_raw_code((mp_raw_code_t*)unum, TOP(), def_dict));
+                    SET_TOP(mp_make_function_from_raw_code(ptr, TOP(), def_dict));
                     DISPATCH();
                 }
 
@@ -681,7 +703,7 @@
                     mp_uint_t n_closed_over = *ip++;
                     // Stack layout: closed_overs <- TOS
                     sp -= n_closed_over - 1;
-                    SET_TOP(mp_make_closure_from_raw_code((mp_raw_code_t*)unum, n_closed_over, sp));
+                    SET_TOP(mp_make_closure_from_raw_code(ptr, n_closed_over, sp));
                     DISPATCH();
                 }
 
@@ -690,19 +712,20 @@
                     mp_uint_t n_closed_over = *ip++;
                     // Stack layout: def_tuple def_dict closed_overs <- TOS
                     sp -= 2 + n_closed_over - 1;
-                    SET_TOP(mp_make_closure_from_raw_code((mp_raw_code_t*)unum, 0x100 | n_closed_over, sp));
+                    SET_TOP(mp_make_closure_from_raw_code(ptr, 0x100 | n_closed_over, sp));
                     DISPATCH();
                 }
 
-                ENTRY(MP_BC_CALL_FUNCTION):
+                ENTRY(MP_BC_CALL_FUNCTION): {
                     DECODE_UINT;
                     // unum & 0xff == n_positional
                     // (unum >> 8) & 0xff == n_keyword
                     sp -= (unum & 0xff) + ((unum >> 7) & 0x1fe);
                     SET_TOP(mp_call_function_n_kw(*sp, unum & 0xff, (unum >> 8) & 0xff, sp + 1));
                     DISPATCH();
+                }
 
-                ENTRY(MP_BC_CALL_FUNCTION_VAR_KW):
+                ENTRY(MP_BC_CALL_FUNCTION_VAR_KW): {
                     DECODE_UINT;
                     // unum & 0xff == n_positional
                     // (unum >> 8) & 0xff == n_keyword
@@ -711,16 +734,18 @@
                     sp -= (unum & 0xff) + ((unum >> 7) & 0x1fe) + 2;
                     SET_TOP(mp_call_method_n_kw_var(false, unum, sp));
                     DISPATCH();
+                }
 
-                ENTRY(MP_BC_CALL_METHOD):
+                ENTRY(MP_BC_CALL_METHOD): {
                     DECODE_UINT;
                     // unum & 0xff == n_positional
                     // (unum >> 8) & 0xff == n_keyword
                     sp -= (unum & 0xff) + ((unum >> 7) & 0x1fe) + 1;
                     SET_TOP(mp_call_method_n_kw(unum & 0xff, (unum >> 8) & 0xff, sp));
                     DISPATCH();
+                }
 
-                ENTRY(MP_BC_CALL_METHOD_VAR_KW):
+                ENTRY(MP_BC_CALL_METHOD_VAR_KW): {
                     DECODE_UINT;
                     // unum & 0xff == n_positional
                     // (unum >> 8) & 0xff == n_keyword
@@ -729,6 +754,7 @@
                     sp -= (unum & 0xff) + ((unum >> 7) & 0x1fe) + 3;
                     SET_TOP(mp_call_method_n_kw_var(true, unum, sp));
                     DISPATCH();
+                }
 
                 ENTRY(MP_BC_RETURN_VALUE):
 unwind_return:
@@ -754,7 +780,7 @@
                     return MP_VM_RETURN_NORMAL;
 
                 ENTRY(MP_BC_RAISE_VARARGS): {
-                    unum = *ip++;
+                    mp_uint_t unum = *ip++;
                     mp_obj_t obj;
                     assert(unum <= 1);
                     if (unum == 0) {
@@ -928,9 +954,8 @@
             // check if it's a StopIteration within a for block
             if (*code_state->ip == MP_BC_FOR_ITER && mp_obj_is_subclass_fast(mp_obj_get_type(nlr.ret_val), &mp_type_StopIteration)) {
                 const byte *ip = code_state->ip + 1;
-                mp_uint_t unum;
                 DECODE_ULABEL; // the jump offset if iteration finishes; for labels are always forward
-                code_state->ip = ip + unum; // jump to after for-block
+                code_state->ip = ip + ulab; // jump to after for-block
                 code_state->sp -= 1; // pop the exhausted iterator
                 goto outer_dispatch_loop; // continue with dispatch loop
             }