--- Python/ceval.c.orig 2009-03-22 15:42:34.000000000 +1100 +++ Python/ceval.c 2009-03-22 16:11:34.000000000 +1100 @@ -752,23 +752,9 @@ /* Import the static jump table */ #include "opcode_targets.h" -/* This macro is used when several opcodes defer to the same implementation - (e.g. SETUP_LOOP, SETUP_FINALLY) */ -#define TARGET_WITH_IMPL(op, impl) \ - TARGET_##op: \ - opcode = op; \ - if (HAS_ARG(op)) \ - oparg = NEXTARG(); \ - case op: \ - goto impl; \ - #define TARGET(op) \ TARGET_##op: \ - opcode = op; \ - if (HAS_ARG(op)) \ - oparg = NEXTARG(); \ - case op: - + case op #define DISPATCH() \ { \ @@ -786,7 +772,10 @@ { \ if (!lltrace && !_Py_TracingPossible) { \ f->f_lasti = INSTR_OFFSET(); \ - goto *opcode_targets[*next_instr++]; \ + opcode = NEXTOP(); \ + if (HAS_ARG(opcode)) \ + oparg = NEXTARG(); \ + goto *opcode_targets[opcode]; \ } \ goto fast_next_opcode; \ } @@ -795,7 +784,10 @@ { \ if (!_Py_TracingPossible) { \ f->f_lasti = INSTR_OFFSET(); \ - goto *opcode_targets[*next_instr++]; \ + opcode = NEXTOP(); \ + if (HAS_ARG(opcode)) \ + oparg = NEXTARG(); \ + goto *opcode_targets[opcode]; \ } \ goto fast_next_opcode; \ } @@ -803,11 +795,7 @@ #else #define TARGET(op) \ - case op: -#define TARGET_WITH_IMPL(op, impl) \ - /* silence compiler warnings about `impl` unused */ \ - if (0) goto impl; \ - case op: + case op #define DISPATCH() continue #define FAST_DISPATCH() goto fast_next_opcode #endif @@ -1268,10 +1256,10 @@ /* case STOP_CODE: this is an error! */ - TARGET(NOP) + TARGET(NOP): FAST_DISPATCH(); - TARGET(LOAD_FAST) + TARGET(LOAD_FAST): x = GETLOCAL(oparg); if (x != NULL) { Py_INCREF(x); @@ -1283,31 +1271,31 @@ PyTuple_GetItem(co->co_varnames, oparg)); break; - TARGET(LOAD_CONST) + TARGET(LOAD_CONST): x = GETITEM(consts, oparg); Py_INCREF(x); PUSH(x); FAST_DISPATCH(); PREDICTED_WITH_ARG(STORE_FAST); - TARGET(STORE_FAST) + TARGET(STORE_FAST): v = POP(); SETLOCAL(oparg, v); FAST_DISPATCH(); - TARGET(POP_TOP) + TARGET(POP_TOP): v = POP(); Py_DECREF(v); FAST_DISPATCH(); - TARGET(ROT_TWO) + TARGET(ROT_TWO): v = TOP(); w = SECOND(); SET_TOP(w); SET_SECOND(v); FAST_DISPATCH(); - TARGET(ROT_THREE) + TARGET(ROT_THREE): v = TOP(); w = SECOND(); x = THIRD(); @@ -1316,7 +1304,7 @@ SET_THIRD(v); FAST_DISPATCH(); - TARGET(ROT_FOUR) + TARGET(ROT_FOUR): u = TOP(); v = SECOND(); w = THIRD(); @@ -1327,13 +1315,13 @@ SET_FOURTH(u); FAST_DISPATCH(); - TARGET(DUP_TOP) + TARGET(DUP_TOP): v = TOP(); Py_INCREF(v); PUSH(v); FAST_DISPATCH(); - TARGET(DUP_TOPX) + TARGET(DUP_TOPX): if (oparg == 2) { x = TOP(); Py_INCREF(x); @@ -1361,7 +1349,7 @@ /* Never returns, so don't bother to set why. */ break; - TARGET(UNARY_POSITIVE) + TARGET(UNARY_POSITIVE): v = TOP(); x = PyNumber_Positive(v); Py_DECREF(v); @@ -1369,7 +1357,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(UNARY_NEGATIVE) + TARGET(UNARY_NEGATIVE): v = TOP(); x = PyNumber_Negative(v); Py_DECREF(v); @@ -1377,7 +1365,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(UNARY_NOT) + TARGET(UNARY_NOT): v = TOP(); err = PyObject_IsTrue(v); Py_DECREF(v); @@ -1395,7 +1383,7 @@ STACKADJ(-1); break; - TARGET(UNARY_INVERT) + TARGET(UNARY_INVERT): v = TOP(); x = PyNumber_Invert(v); Py_DECREF(v); @@ -1403,7 +1391,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(BINARY_POWER) + TARGET(BINARY_POWER): w = POP(); v = TOP(); x = PyNumber_Power(v, w, Py_None); @@ -1413,7 +1401,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(BINARY_MULTIPLY) + TARGET(BINARY_MULTIPLY): w = POP(); v = TOP(); x = PyNumber_Multiply(v, w); @@ -1423,7 +1411,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(BINARY_TRUE_DIVIDE) + TARGET(BINARY_TRUE_DIVIDE): w = POP(); v = TOP(); x = PyNumber_TrueDivide(v, w); @@ -1433,7 +1421,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(BINARY_FLOOR_DIVIDE) + TARGET(BINARY_FLOOR_DIVIDE): w = POP(); v = TOP(); x = PyNumber_FloorDivide(v, w); @@ -1443,7 +1431,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(BINARY_MODULO) + TARGET(BINARY_MODULO): w = POP(); v = TOP(); if (PyUnicode_CheckExact(v)) @@ -1456,7 +1444,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(BINARY_ADD) + TARGET(BINARY_ADD): w = POP(); v = TOP(); if (PyUnicode_CheckExact(v) && @@ -1475,7 +1463,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(BINARY_SUBTRACT) + TARGET(BINARY_SUBTRACT): w = POP(); v = TOP(); x = PyNumber_Subtract(v, w); @@ -1485,7 +1473,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(BINARY_SUBSCR) + TARGET(BINARY_SUBSCR): w = POP(); v = TOP(); x = PyObject_GetItem(v, w); @@ -1495,7 +1483,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(BINARY_LSHIFT) + TARGET(BINARY_LSHIFT): w = POP(); v = TOP(); x = PyNumber_Lshift(v, w); @@ -1505,7 +1493,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(BINARY_RSHIFT) + TARGET(BINARY_RSHIFT): w = POP(); v = TOP(); x = PyNumber_Rshift(v, w); @@ -1515,7 +1503,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(BINARY_AND) + TARGET(BINARY_AND): w = POP(); v = TOP(); x = PyNumber_And(v, w); @@ -1525,7 +1513,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(BINARY_XOR) + TARGET(BINARY_XOR): w = POP(); v = TOP(); x = PyNumber_Xor(v, w); @@ -1535,7 +1523,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(BINARY_OR) + TARGET(BINARY_OR): w = POP(); v = TOP(); x = PyNumber_Or(v, w); @@ -1545,7 +1533,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(LIST_APPEND) + TARGET(LIST_APPEND): w = POP(); v = stack_pointer[-oparg]; err = PyList_Append(v, w); @@ -1556,7 +1544,7 @@ } break; - TARGET(SET_ADD) + TARGET(SET_ADD): w = POP(); v = stack_pointer[-oparg]; err = PySet_Add(v, w); @@ -1567,7 +1555,7 @@ } break; - TARGET(INPLACE_POWER) + TARGET(INPLACE_POWER): w = POP(); v = TOP(); x = PyNumber_InPlacePower(v, w, Py_None); @@ -1577,7 +1565,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(INPLACE_MULTIPLY) + TARGET(INPLACE_MULTIPLY): w = POP(); v = TOP(); x = PyNumber_InPlaceMultiply(v, w); @@ -1587,7 +1575,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(INPLACE_TRUE_DIVIDE) + TARGET(INPLACE_TRUE_DIVIDE): w = POP(); v = TOP(); x = PyNumber_InPlaceTrueDivide(v, w); @@ -1597,7 +1585,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(INPLACE_FLOOR_DIVIDE) + TARGET(INPLACE_FLOOR_DIVIDE): w = POP(); v = TOP(); x = PyNumber_InPlaceFloorDivide(v, w); @@ -1607,7 +1595,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(INPLACE_MODULO) + TARGET(INPLACE_MODULO): w = POP(); v = TOP(); x = PyNumber_InPlaceRemainder(v, w); @@ -1617,7 +1605,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(INPLACE_ADD) + TARGET(INPLACE_ADD): w = POP(); v = TOP(); if (PyUnicode_CheckExact(v) && @@ -1636,7 +1624,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(INPLACE_SUBTRACT) + TARGET(INPLACE_SUBTRACT): w = POP(); v = TOP(); x = PyNumber_InPlaceSubtract(v, w); @@ -1646,7 +1634,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(INPLACE_LSHIFT) + TARGET(INPLACE_LSHIFT): w = POP(); v = TOP(); x = PyNumber_InPlaceLshift(v, w); @@ -1656,7 +1644,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(INPLACE_RSHIFT) + TARGET(INPLACE_RSHIFT): w = POP(); v = TOP(); x = PyNumber_InPlaceRshift(v, w); @@ -1666,7 +1654,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(INPLACE_AND) + TARGET(INPLACE_AND): w = POP(); v = TOP(); x = PyNumber_InPlaceAnd(v, w); @@ -1676,7 +1664,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(INPLACE_XOR) + TARGET(INPLACE_XOR): w = POP(); v = TOP(); x = PyNumber_InPlaceXor(v, w); @@ -1686,7 +1674,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(INPLACE_OR) + TARGET(INPLACE_OR): w = POP(); v = TOP(); x = PyNumber_InPlaceOr(v, w); @@ -1696,7 +1684,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(STORE_SUBSCR) + TARGET(STORE_SUBSCR): w = TOP(); v = SECOND(); u = THIRD(); @@ -1709,7 +1697,7 @@ if (err == 0) DISPATCH(); break; - TARGET(DELETE_SUBSCR) + TARGET(DELETE_SUBSCR): w = TOP(); v = SECOND(); STACKADJ(-2); @@ -1720,7 +1708,7 @@ if (err == 0) DISPATCH(); break; - TARGET(PRINT_EXPR) + TARGET(PRINT_EXPR): v = POP(); w = PySys_GetObject("displayhook"); if (w == NULL) { @@ -1747,7 +1735,7 @@ #ifdef CASE_TOO_BIG default: switch (opcode) { #endif - TARGET(RAISE_VARARGS) + TARGET(RAISE_VARARGS): v = w = NULL; switch (oparg) { case 2: @@ -1765,19 +1753,19 @@ } break; - TARGET(STORE_LOCALS) + TARGET(STORE_LOCALS): x = POP(); v = f->f_locals; Py_XDECREF(v); f->f_locals = x; DISPATCH(); - TARGET(RETURN_VALUE) + TARGET(RETURN_VALUE): retval = POP(); why = WHY_RETURN; goto fast_block_end; - TARGET(YIELD_VALUE) + TARGET(YIELD_VALUE): retval = POP(); f->f_stacktop = stack_pointer; why = WHY_YIELD; @@ -1787,7 +1775,7 @@ SWAP_EXC_STATE(); goto fast_yield; - TARGET(POP_EXCEPT) + TARGET(POP_EXCEPT): { PyTryBlock *b = PyFrame_BlockPop(f); if (b->b_type != EXCEPT_HANDLER) { @@ -1800,7 +1788,7 @@ } DISPATCH(); - TARGET(POP_BLOCK) + TARGET(POP_BLOCK): { PyTryBlock *b = PyFrame_BlockPop(f); UNWIND_BLOCK(b); @@ -1808,7 +1796,7 @@ DISPATCH(); PREDICTED(END_FINALLY); - TARGET(END_FINALLY) + TARGET(END_FINALLY): v = POP(); if (PyLong_Check(v)) { why = (enum why_code) PyLong_AS_LONG(v); @@ -1848,7 +1836,7 @@ Py_DECREF(v); break; - TARGET(LOAD_BUILD_CLASS) + TARGET(LOAD_BUILD_CLASS): x = PyDict_GetItemString(f->f_builtins, "__build_class__"); if (x == NULL) { @@ -1860,7 +1848,7 @@ PUSH(x); break; - TARGET(STORE_NAME) + TARGET(STORE_NAME): w = GETITEM(names, oparg); v = POP(); if ((x = f->f_locals) != NULL) { @@ -1876,7 +1864,7 @@ "no locals found when storing %R", w); break; - TARGET(DELETE_NAME) + TARGET(DELETE_NAME): w = GETITEM(names, oparg); if ((x = f->f_locals) != NULL) { if ((err = PyObject_DelItem(x, w)) != 0) @@ -1890,7 +1878,7 @@ break; PREDICTED_WITH_ARG(UNPACK_SEQUENCE); - TARGET(UNPACK_SEQUENCE) + TARGET(UNPACK_SEQUENCE): v = POP(); if (PyTuple_CheckExact(v) && PyTuple_GET_SIZE(v) == oparg) { @@ -1922,7 +1910,7 @@ Py_DECREF(v); break; - TARGET(UNPACK_EX) + TARGET(UNPACK_EX): { int totalargs = 1 + (oparg & 0xFF) + (oparg >> 8); v = POP(); @@ -1937,7 +1925,7 @@ break; } - TARGET(STORE_ATTR) + TARGET(STORE_ATTR): w = GETITEM(names, oparg); v = TOP(); u = SECOND(); @@ -1948,7 +1936,7 @@ if (err == 0) DISPATCH(); break; - TARGET(DELETE_ATTR) + TARGET(DELETE_ATTR): w = GETITEM(names, oparg); v = POP(); err = PyObject_SetAttr(v, w, (PyObject *)NULL); @@ -1956,7 +1944,7 @@ Py_DECREF(v); break; - TARGET(STORE_GLOBAL) + TARGET(STORE_GLOBAL): w = GETITEM(names, oparg); v = POP(); err = PyDict_SetItem(f->f_globals, w, v); @@ -1964,14 +1952,14 @@ if (err == 0) DISPATCH(); break; - TARGET(DELETE_GLOBAL) + TARGET(DELETE_GLOBAL): w = GETITEM(names, oparg); if ((err = PyDict_DelItem(f->f_globals, w)) != 0) format_exc_check_arg( PyExc_NameError, GLOBAL_NAME_ERROR_MSG, w); break; - TARGET(LOAD_NAME) + TARGET(LOAD_NAME): w = GETITEM(names, oparg); if ((v = f->f_locals) == NULL) { PyErr_Format(PyExc_SystemError, @@ -2008,7 +1996,7 @@ PUSH(x); DISPATCH(); - TARGET(LOAD_GLOBAL) + TARGET(LOAD_GLOBAL): w = GETITEM(names, oparg); if (PyUnicode_CheckExact(w)) { /* Inline the PyDict_GetItem() calls. @@ -2061,7 +2049,7 @@ PUSH(x); DISPATCH(); - TARGET(DELETE_FAST) + TARGET(DELETE_FAST): x = GETLOCAL(oparg); if (x != NULL) { SETLOCAL(oparg, NULL); @@ -2074,14 +2062,14 @@ ); break; - TARGET(LOAD_CLOSURE) + TARGET(LOAD_CLOSURE): x = freevars[oparg]; Py_INCREF(x); PUSH(x); if (x != NULL) DISPATCH(); break; - TARGET(LOAD_DEREF) + TARGET(LOAD_DEREF): x = freevars[oparg]; w = PyCell_Get(x); if (w != NULL) { @@ -2107,14 +2095,14 @@ } break; - TARGET(STORE_DEREF) + TARGET(STORE_DEREF): w = POP(); x = freevars[oparg]; PyCell_Set(x, w); Py_DECREF(w); DISPATCH(); - TARGET(BUILD_TUPLE) + TARGET(BUILD_TUPLE): x = PyTuple_New(oparg); if (x != NULL) { for (; --oparg >= 0;) { @@ -2126,7 +2114,7 @@ } break; - TARGET(BUILD_LIST) + TARGET(BUILD_LIST): x = PyList_New(oparg); if (x != NULL) { for (; --oparg >= 0;) { @@ -2138,7 +2126,7 @@ } break; - TARGET(BUILD_SET) + TARGET(BUILD_SET): x = PySet_New(NULL); if (x != NULL) { for (; --oparg >= 0;) { @@ -2156,13 +2144,13 @@ } break; - TARGET(BUILD_MAP) + TARGET(BUILD_MAP): x = _PyDict_NewPresized((Py_ssize_t)oparg); PUSH(x); if (x != NULL) DISPATCH(); break; - TARGET(STORE_MAP) + TARGET(STORE_MAP): w = TOP(); /* key */ u = SECOND(); /* value */ v = THIRD(); /* dict */ @@ -2174,7 +2162,7 @@ if (err == 0) DISPATCH(); break; - TARGET(MAP_ADD) + TARGET(MAP_ADD): w = TOP(); /* key */ u = SECOND(); /* value */ STACKADJ(-2); @@ -2189,7 +2177,7 @@ } break; - TARGET(LOAD_ATTR) + TARGET(LOAD_ATTR): w = GETITEM(names, oparg); v = TOP(); x = PyObject_GetAttr(v, w); @@ -2198,7 +2186,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(COMPARE_OP) + TARGET(COMPARE_OP): w = POP(); v = TOP(); x = cmp_outcome(oparg, v, w); @@ -2210,7 +2198,7 @@ PREDICT(POP_JUMP_IF_TRUE); DISPATCH(); - TARGET(IMPORT_NAME) + TARGET(IMPORT_NAME): w = GETITEM(names, oparg); x = PyDict_GetItemString(f->f_builtins, "__import__"); if (x == NULL) { @@ -2254,7 +2242,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(IMPORT_STAR) + TARGET(IMPORT_STAR): v = POP(); PyFrame_FastToLocals(f); if ((x = f->f_locals) == NULL) { @@ -2270,7 +2258,7 @@ if (err == 0) DISPATCH(); break; - TARGET(IMPORT_FROM) + TARGET(IMPORT_FROM): w = GETITEM(names, oparg); v = TOP(); READ_TIMESTAMP(intr0); @@ -2280,12 +2268,12 @@ if (x != NULL) DISPATCH(); break; - TARGET(JUMP_FORWARD) + TARGET(JUMP_FORWARD): JUMPBY(oparg); FAST_DISPATCH(); PREDICTED_WITH_ARG(POP_JUMP_IF_FALSE); - TARGET(POP_JUMP_IF_FALSE) + TARGET(POP_JUMP_IF_FALSE): w = POP(); if (w == Py_True) { Py_DECREF(w); @@ -2307,7 +2295,7 @@ DISPATCH(); PREDICTED_WITH_ARG(POP_JUMP_IF_TRUE); - TARGET(POP_JUMP_IF_TRUE) + TARGET(POP_JUMP_IF_TRUE): w = POP(); if (w == Py_False) { Py_DECREF(w); @@ -2330,7 +2318,7 @@ break; DISPATCH(); - TARGET(JUMP_IF_FALSE_OR_POP) + TARGET(JUMP_IF_FALSE_OR_POP): w = TOP(); if (w == Py_True) { STACKADJ(-1); @@ -2353,7 +2341,7 @@ break; DISPATCH(); - TARGET(JUMP_IF_TRUE_OR_POP) + TARGET(JUMP_IF_TRUE_OR_POP): w = TOP(); if (w == Py_False) { STACKADJ(-1); @@ -2378,7 +2366,7 @@ DISPATCH(); PREDICTED_WITH_ARG(JUMP_ABSOLUTE); - TARGET(JUMP_ABSOLUTE) + TARGET(JUMP_ABSOLUTE): JUMPTO(oparg); #if FAST_LOOPS /* Enabling this path speeds-up all while and for-loops by bypassing @@ -2393,7 +2381,7 @@ DISPATCH(); #endif - TARGET(GET_ITER) + TARGET(GET_ITER): /* before: [obj]; after [getiter(obj)] */ v = TOP(); x = PyObject_GetIter(v); @@ -2407,7 +2395,7 @@ break; PREDICTED_WITH_ARG(FOR_ITER); - TARGET(FOR_ITER) + TARGET(FOR_ITER): /* before: [iter]; after: [iter, iter()] *or* [] */ v = TOP(); x = (*v->ob_type->tp_iternext)(v); @@ -2429,11 +2417,11 @@ JUMPBY(oparg); DISPATCH(); - TARGET(BREAK_LOOP) + TARGET(BREAK_LOOP): why = WHY_BREAK; goto fast_block_end; - TARGET(CONTINUE_LOOP) + TARGET(CONTINUE_LOOP): retval = PyLong_FromLong(oparg); if (!retval) { x = NULL; @@ -2442,10 +2430,9 @@ why = WHY_CONTINUE; goto fast_block_end; - TARGET_WITH_IMPL(SETUP_LOOP, _setup_finally) - TARGET_WITH_IMPL(SETUP_EXCEPT, _setup_finally) - TARGET(SETUP_FINALLY) - _setup_finally: + TARGET(SETUP_LOOP): + TARGET(SETUP_EXCEPT): + TARGET(SETUP_FINALLY): /* NOTE: If you add any new block-setup opcodes that are not try/except/finally handlers, you may need to update the PyGen_NeedsFinalizing() function. @@ -2455,7 +2442,7 @@ STACK_LEVEL()); DISPATCH(); - TARGET(WITH_CLEANUP) + TARGET(WITH_CLEANUP): { /* At the top of the stack are 1-3 values indicating how/why we entered the finally clause: @@ -2519,7 +2506,7 @@ break; } - TARGET(CALL_FUNCTION) + TARGET(CALL_FUNCTION): { PyObject **sp; PCALL(PCALL_ALL); @@ -2536,10 +2523,9 @@ break; } - TARGET_WITH_IMPL(CALL_FUNCTION_VAR, _call_function_var_kw) - TARGET_WITH_IMPL(CALL_FUNCTION_KW, _call_function_var_kw) - TARGET(CALL_FUNCTION_VAR_KW) - _call_function_var_kw: + TARGET(CALL_FUNCTION_VAR): + TARGET(CALL_FUNCTION_KW): + TARGET(CALL_FUNCTION_VAR_KW): { int na = oparg & 0xff; int nk = (oparg>>8) & 0xff; @@ -2583,9 +2569,8 @@ break; } - TARGET_WITH_IMPL(MAKE_CLOSURE, _make_function) - TARGET(MAKE_FUNCTION) - _make_function: + TARGET(MAKE_CLOSURE): + TARGET(MAKE_FUNCTION): { int posdefaults = oparg & 0xff; int kwdefaults = (oparg>>8) & 0xff; @@ -2678,7 +2663,7 @@ break; } - TARGET(BUILD_SLICE) + TARGET(BUILD_SLICE): if (oparg == 3) w = POP(); else @@ -2693,7 +2678,7 @@ if (x != NULL) DISPATCH(); break; - TARGET(EXTENDED_ARG) + TARGET(EXTENDED_ARG): opcode = NEXTOP(); oparg = oparg<<16 | NEXTARG(); goto dispatch_opcode;