---input--- /* Execute compiled code */ /* XXX TO DO: XXX speed up searching for keywords by using a dictionary XXX document it! */ /* enable more aggressive intra-module optimizations, where available */ #define PY_LOCAL_AGGRESSIVE #include "Python.h" #include "code.h" #include "frameobject.h" #include "eval.h" #include "opcode.h" #include "structmember.h" #include #ifndef WITH_TSC #define READ_TIMESTAMP(var) #else typedef unsigned long long uint64; #if defined(__ppc__) /* <- Don't know if this is the correct symbol; this section should work for GCC on any PowerPC platform, irrespective of OS. POWER? Who knows :-) */ #define READ_TIMESTAMP(var) ppc_getcounter(&var) static void ppc_getcounter(uint64 *v) { register unsigned long tbu, tb, tbu2; loop: asm volatile ("mftbu %0" : "=r" (tbu) ); asm volatile ("mftb %0" : "=r" (tb) ); asm volatile ("mftbu %0" : "=r" (tbu2)); if (__builtin_expect(tbu != tbu2, 0)) goto loop; /* The slightly peculiar way of writing the next lines is compiled better by GCC than any other way I tried. */ ((long*)(v))[0] = tbu; ((long*)(v))[1] = tb; } #else /* this is for linux/x86 (and probably any other GCC/x86 combo) */ #define READ_TIMESTAMP(val) \ __asm__ __volatile__("rdtsc" : "=A" (val)) #endif void dump_tsc(int opcode, int ticked, uint64 inst0, uint64 inst1, uint64 loop0, uint64 loop1, uint64 intr0, uint64 intr1) { uint64 intr, inst, loop; PyThreadState *tstate = PyThreadState_Get(); if (!tstate->interp->tscdump) return; intr = intr1 - intr0; inst = inst1 - inst0 - intr; loop = loop1 - loop0 - intr; fprintf(stderr, "opcode=%03d t=%d inst=%06lld loop=%06lld\n", opcode, ticked, inst, loop); } #endif /* Turn this on if your compiler chokes on the big switch: */ /* #define CASE_TOO_BIG 1 */ #ifdef Py_DEBUG /* For debugging the interpreter: */ #define LLTRACE 1 /* Low-level trace feature */ #define CHECKEXC 1 /* Double-check exception checking */ #endif typedef PyObject *(*callproc)(PyObject *, PyObject *, PyObject *); /* Forward declarations */ #ifdef WITH_TSC static PyObject * call_function(PyObject ***, int, uint64*, uint64*); #else static PyObject * call_function(PyObject ***, int); #endif static PyObject * fast_function(PyObject *, PyObject ***, int, int, int); static PyObject * do_call(PyObject *, PyObject ***, int, int); static PyObject * ext_do_call(PyObject *, PyObject ***, int, int, int); static PyObject * update_keyword_args(PyObject *, int, PyObject ***,PyObject *); static PyObject * update_star_args(int, int, PyObject *, PyObject ***); static PyObject * load_args(PyObject ***, int); #define CALL_FLAG_VAR 1 #define CALL_FLAG_KW 2 #ifdef LLTRACE static int lltrace; static int prtrace(PyObject *, char *); #endif static int call_trace(Py_tracefunc, PyObject *, PyFrameObject *, int, PyObject *); static void call_trace_protected(Py_tracefunc, PyObject *, PyFrameObject *, int, PyObject *); static void call_exc_trace(Py_tracefunc, PyObject *, PyFrameObject *); static int maybe_call_line_trace(Py_tracefunc, PyObject *, PyFrameObject *, int *, int *, int *); static PyObject * apply_slice(PyObject *, PyObject *, PyObject *); static int assign_slice(PyObject *, PyObject *, PyObject *, PyObject *); static PyObject * cmp_outcome(int, PyObject *, PyObject *); static PyObject * import_from(PyObject *, PyObject *); static int import_all_from(PyObject *, PyObject *); static PyObject * build_class(PyObject *, PyObject *, PyObject *); static int exec_statement(PyFrameObject *, PyObject *, PyObject *, PyObject *); static void set_exc_info(PyThreadState *, PyObject *, PyObject *, PyObject *); static void reset_exc_info(PyThreadState *); static void format_exc_check_arg(PyObject *, char *, PyObject *); static PyObject * string_concatenate(PyObject *, PyObject *, PyFrameObject *, unsigned char *); #define NAME_ERROR_MSG \ "name '%.200s' is not defined" #define GLOBAL_NAME_ERROR_MSG \ "global name '%.200s' is not defined" #define UNBOUNDLOCAL_ERROR_MSG \ "local variable '%.200s' referenced before assignment" #define UNBOUNDFREE_ERROR_MSG \ "free variable '%.200s' referenced before assignment" \ " in enclosing scope" /* Dynamic execution profile */ #ifdef DYNAMIC_EXECUTION_PROFILE #ifdef DXPAIRS static long dxpairs[257][256]; #define dxp dxpairs[256] #else static long dxp[256]; #endif #endif /* Function call profile */ #ifdef CALL_PROFILE #define PCALL_NUM 11 static int pcall[PCALL_NUM]; #define PCALL_ALL 0 #define PCALL_FUNCTION 1 #define PCALL_FAST_FUNCTION 2 #define PCALL_FASTER_FUNCTION 3 #define PCALL_METHOD 4 #define PCALL_BOUND_METHOD 5 #define PCALL_CFUNCTION 6 #define PCALL_TYPE 7 #define PCALL_GENERATOR 8 #define PCALL_OTHER 9 #define PCALL_POP 10 /* Notes about the statistics PCALL_FAST stats FAST_FUNCTION means no argument tuple needs to be created. FASTER_FUNCTION means that the fast-path frame setup code is used. If there is a method call where the call can be optimized by changing the argument tuple and calling the function directly, it gets recorded twice. As a result, the relationship among the statistics appears to be PCALL_ALL == PCALL_FUNCTION + PCALL_METHOD - PCALL_BOUND_METHOD + PCALL_CFUNCTION + PCALL_TYPE + PCALL_GENERATOR + PCALL_OTHER PCALL_FUNCTION > PCALL_FAST_FUNCTION > PCALL_FASTER_FUNCTION PCALL_METHOD > PCALL_BOUND_METHOD */ #define PCALL(POS) pcall[POS]++ PyObject * PyEval_GetCallStats(PyObject *self) { return Py_BuildValue("iiiiiiiiii", pcall[0], pcall[1], pcall[2], pcall[3], pcall[4], pcall[5], pcall[6], pcall[7], pcall[8], pcall[9]); } #else #define PCALL(O) PyObject * PyEval_GetCallStats(PyObject *self) { Py_INCREF(Py_None); return Py_None; } #endif #ifdef WITH_THREAD #ifdef HAVE_ERRNO_H #include #endif #include "pythread.h" static PyThread_type_lock interpreter_lock = 0; /* This is the GIL */ static long main_thread = 0; int PyEval_ThreadsInitialized(void) { return interpreter_lock != 0; } void PyEval_InitThreads(void) { if (interpreter_lock) return; interpreter_lock = PyThread_allocate_lock(); PyThread_acquire_lock(interpreter_lock, 1); main_thread = PyThread_get_thread_ident(); } void PyEval_AcquireLock(void) { PyThread_acquire_lock(interpreter_lock, 1); } void PyEval_ReleaseLock(void) { PyThread_release_lock(interpreter_lock); } void PyEval_AcquireThread(PyThreadState *tstate) { if (tstate == NULL) Py_FatalError("PyEval_AcquireThread: NULL new thread state"); /* Check someone has called PyEval_InitThreads() to create the lock */ assert(interpreter_lock); PyThread_acquire_lock(interpreter_lock, 1); if (PyThreadState_Swap(tstate) != NULL) Py_FatalError( "PyEval_AcquireThread: non-NULL old thread state"); } void PyEval_ReleaseThread(PyThreadState *tstate) { if (tstate == NULL) Py_FatalError("PyEval_ReleaseThread: NULL thread state"); if (PyThreadState_Swap(NULL) != tstate) Py_FatalError("PyEval_ReleaseThread: wrong thread state"); PyThread_release_lock(interpreter_lock); } /* This function is called from PyOS_AfterFork to ensure that newly created child processes don't hold locks referring to threads which are not running in the child process. (This could also be done using pthread_atfork mechanism, at least for the pthreads implementation.) */ void PyEval_ReInitThreads(void) { if (!interpreter_lock) return; /*XXX Can't use PyThread_free_lock here because it does too much error-checking. Doing this cleanly would require adding a new function to each thread_*.h. Instead, just create a new lock and waste a little bit of memory */ interpreter_lock = PyThread_allocate_lock(); PyThread_acquire_lock(interpreter_lock, 1); main_thread = PyThread_get_thread_ident(); } #endif /* Functions save_thread and restore_thread are always defined so dynamically loaded modules needn't be compiled separately for use with and without threads: */ PyThreadState * PyEval_SaveThread(void) { PyThreadState *tstate = PyThreadState_Swap(NULL); if (tstate == NULL) Py_FatalError("PyEval_SaveThread: NULL tstate"); #ifdef WITH_THREAD if (interpreter_lock) PyThread_release_lock(interpreter_lock); #endif return tstate; } void PyEval_RestoreThread(PyThreadState *tstate) { if (tstate == NULL) Py_FatalError("PyEval_RestoreThread: NULL tstate"); #ifdef WITH_THREAD if (interpreter_lock) { int err = errno; PyThread_acquire_lock(interpreter_lock, 1); errno = err; } #endif PyThreadState_Swap(tstate); } /* Mechanism whereby asynchronously executing callbacks (e.g. UNIX signal handlers or Mac I/O completion routines) can schedule calls to a function to be called synchronously. The synchronous function is called with one void* argument. It should return 0 for success or -1 for failure -- failure should be accompanied by an exception. If registry succeeds, the registry function returns 0; if it fails (e.g. due to too many pending calls) it returns -1 (without setting an exception condition). Note that because registry may occur from within signal handlers, or other asynchronous events, calling malloc() is unsafe! #ifdef WITH_THREAD Any thread can schedule pending calls, but only the main thread will execute them. #endif XXX WARNING! ASYNCHRONOUSLY EXECUTING CODE! There are two possible race conditions: (1) nested asynchronous registry calls; (2) registry calls made while pending calls are being processed. While (1) is very unlikely, (2) is a real possibility. The current code is safe against (2), but not against (1). The safety against (2) is derived from the fact that only one thread (the main thread) ever takes things out of the queue. XXX Darn! With the advent of thread state, we should have an array of pending calls per thread in the thread state! Later... */ #define NPENDINGCALLS 32 static struct { int (*func)(void *); void *arg; } pendingcalls[NPENDINGCALLS]; static volatile int pendingfirst = 0; static volatile int pendinglast = 0; static volatile int things_to_do = 0; int Py_AddPendingCall(int (*func)(void *), void *arg) { static volatile int busy = 0; int i, j; /* XXX Begin critical section */ /* XXX If you want this to be safe against nested XXX asynchronous calls, you'll have to work harder! */ if (busy) return -1; busy = 1; i = pendinglast; j = (i + 1) % NPENDINGCALLS; if (j == pendingfirst) { busy = 0; return -1; /* Queue full */ } pendingcalls[i].func = func; pendingcalls[i].arg = arg; pendinglast = j; _Py_Ticker = 0; things_to_do = 1; /* Signal main loop */ busy = 0; /* XXX End critical section */ return 0; } int Py_MakePendingCalls(void) { static int busy = 0; #ifdef WITH_THREAD if (main_thread && PyThread_get_thread_ident() != main_thread) return 0; #endif if (busy) return 0; busy = 1; things_to_do = 0; for (;;) { int i; int (*func)(void *); void *arg; i = pendingfirst; if (i == pendinglast) break; /* Queue empty */ func = pendingcalls[i].func; arg = pendingcalls[i].arg; pendingfirst = (i + 1) % NPENDINGCALLS; if (func(arg) < 0) { busy = 0; things_to_do = 1; /* We're not done yet */ return -1; } } busy = 0; return 0; } /* The interpreter's recursion limit */ #ifndef Py_DEFAULT_RECURSION_LIMIT #define Py_DEFAULT_RECURSION_LIMIT 1000 #endif static int recursion_limit = Py_DEFAULT_RECURSION_LIMIT; int _Py_CheckRecursionLimit = Py_DEFAULT_RECURSION_LIMIT; int Py_GetRecursionLimit(void) { return recursion_limit; } void Py_SetRecursionLimit(int new_limit) { recursion_limit = new_limit; _Py_CheckRecursionLimit = recursion_limit; } /* the macro Py_EnterRecursiveCall() only calls _Py_CheckRecursiveCall() if the recursion_depth reaches _Py_CheckRecursionLimit. If USE_STACKCHECK, the macro decrements _Py_CheckRecursionLimit to guarantee that _Py_CheckRecursiveCall() is regularly called. Without USE_STACKCHECK, there is no need for this. */ int _Py_CheckRecursiveCall(char *where) { PyThreadState *tstate = PyThreadState_GET(); #ifdef USE_STACKCHECK if (PyOS_CheckStack()) { --tstate->recursion_depth; PyErr_SetString(PyExc_MemoryError, "Stack overflow"); return -1; } #endif if (tstate->recursion_depth > recursion_limit) { --tstate->recursion_depth; PyErr_Format(PyExc_RuntimeError, "maximum recursion depth exceeded%s", where); return -1; } _Py_CheckRecursionLimit = recursion_limit; return 0; } /* Status code for main loop (reason for stack unwind) */ enum why_code { WHY_NOT = 0x0001, /* No error */ WHY_EXCEPTION = 0x0002, /* Exception occurred */ WHY_RERAISE = 0x0004, /* Exception re-raised by 'finally' */ WHY_RETURN = 0x0008, /* 'return' statement */ WHY_BREAK = 0x0010, /* 'break' statement */ WHY_CONTINUE = 0x0020, /* 'continue' statement */ WHY_YIELD = 0x0040 /* 'yield' operator */ }; static enum why_code do_raise(PyObject *, PyObject *, PyObject *); static int unpack_iterable(PyObject *, int, PyObject **); /* for manipulating the thread switch and periodic "stuff" - used to be per thread, now just a pair o' globals */ int _Py_CheckInterval = 100; volatile int _Py_Ticker = 100; PyObject * PyEval_EvalCode(PyCodeObject *co, PyObject *globals, PyObject *locals) { /* XXX raise SystemError if globals is NULL */ return PyEval_EvalCodeEx(co, globals, locals, (PyObject **)NULL, 0, (PyObject **)NULL, 0, (PyObject **)NULL, 0, NULL); } /* Interpreter main loop */ PyObject * PyEval_EvalFrame(PyFrameObject *f) { /* This is for backward compatibility with extension modules that used this API; core interpreter code should call PyEval_EvalFrameEx() */ return PyEval_EvalFrameEx(f, 0); } PyObject * PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) { #ifdef DXPAIRS int lastopcode = 0; #endif register PyObject **stack_pointer; /* Next free slot in value stack */ register unsigned char *next_instr; register int opcode; /* Current opcode */ register int oparg; /* Current opcode argument, if any */ register enum why_code why; /* Reason for block stack unwind */ register int err; /* Error status -- nonzero if error */ register PyObject *x; /* Result object -- NULL if error */ register PyObject *v; /* Temporary objects popped off stack */ register PyObject *w; register PyObject *u; register PyObject *t; register PyObject *stream = NULL; /* for PRINT opcodes */ register PyObject **fastlocals, **freevars; PyObject *retval = NULL; /* Return value */ PyThreadState *tstate = PyThreadState_GET(); PyCodeObject *co; /* when tracing we set things up so that not (instr_lb <= current_bytecode_offset < instr_ub) is true when the line being executed has changed. The initial values are such as to make this false the first time it is tested. */ int instr_ub = -1, instr_lb = 0, instr_prev = -1; unsigned char *first_instr; PyObject *names; PyObject *consts; #if defined(Py_DEBUG) || defined(LLTRACE) /* Make it easier to find out where we are with a debugger */ char *filename; #endif /* Tuple access macros */ #ifndef Py_DEBUG #define GETITEM(v, i) PyTuple_GET_ITEM((PyTupleObject *)(v), (i)) #else #define GETITEM(v, i) PyTuple_GetItem((v), (i)) #endif #ifdef WITH_TSC /* Use Pentium timestamp counter to mark certain events: inst0 -- beginning of switch statement for opcode dispatch inst1 -- end of switch statement (may be skipped) loop0 -- the top of the mainloop loop1 -- place where control returns again to top of mainloop (may be skipped) intr1 -- beginning of long interruption intr2 -- end of long interruption Many opcodes call out to helper C functions. In some cases, the time in those functions should be counted towards the time for the opcode, but not in all cases. For example, a CALL_FUNCTION opcode calls another Python function; there's no point in charge all the bytecode executed by the called function to the caller. It's hard to make a useful judgement statically. In the presence of operator overloading, it's impossible to tell if a call will execute new Python code or not. It's a case-by-case judgement. I'll use intr1 for the following cases: EXEC_STMT IMPORT_STAR IMPORT_FROM CALL_FUNCTION (and friends) */ uint64 inst0, inst1, loop0, loop1, intr0 = 0, intr1 = 0; int ticked = 0; READ_TIMESTAMP(inst0); READ_TIMESTAMP(inst1); READ_TIMESTAMP(loop0); READ_TIMESTAMP(loop1); /* shut up the compiler */ opcode = 0; #endif /* Code access macros */ #define INSTR_OFFSET() ((int)(next_instr - first_instr)) #define NEXTOP() (*next_instr++) #define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2]) #define PEEKARG() ((next_instr[2]<<8) + next_instr[1]) #define JUMPTO(x) (next_instr = first_instr + (x)) #define JUMPBY(x) (next_instr += (x)) /* OpCode prediction macros Some opcodes tend to come in pairs thus making it possible to predict the second code when the first is run. For example, COMPARE_OP is often followed by JUMP_IF_FALSE or JUMP_IF_TRUE. And, those opcodes are often followed by a POP_TOP. Verifying the prediction costs a single high-speed test of register variable against a constant. If the pairing was good, then the processor has a high likelihood of making its own successful branch prediction which results in a nearly zero overhead transition to the next opcode. A successful prediction saves a trip through the eval-loop including its two unpredictable branches, the HASARG test and the switch-case. If collecting opcode statistics, turn off prediction so that statistics are accurately maintained (the predictions bypass the opcode frequency counter updates). */ #ifdef DYNAMIC_EXECUTION_PROFILE #define PREDICT(op) if (0) goto PRED_##op #else #define PREDICT(op) if (*next_instr == op) goto PRED_##op #endif #define PREDICTED(op) PRED_##op: next_instr++ #define PREDICTED_WITH_ARG(op) PRED_##op: oparg = PEEKARG(); next_instr += 3 /* Stack manipulation macros */ /* The stack can grow at most MAXINT deep, as co_nlocals and co_stacksize are ints. */ #define STACK_LEVEL() ((int)(stack_pointer - f->f_valuestack)) #define EMPTY() (STACK_LEVEL() == 0) #define TOP() (stack_pointer[-1]) #define SECOND() (stack_pointer[-2]) #define THIRD() (stack_pointer[-3]) #define FOURTH() (stack_pointer[-4]) #define SET_TOP(v) (stack_pointer[-1] = (v)) #define SET_SECOND(v) (stack_pointer[-2] = (v)) #define SET_THIRD(v) (stack_pointer[-3] = (v)) #define SET_FOURTH(v) (stack_pointer[-4] = (v)) #define BASIC_STACKADJ(n) (stack_pointer += n) #define BASIC_PUSH(v) (*stack_pointer++ = (v)) #define BASIC_POP() (*--stack_pointer) #ifdef LLTRACE #define PUSH(v) { (void)(BASIC_PUSH(v), \ lltrace && prtrace(TOP(), "push")); \ assert(STACK_LEVEL() <= co->co_stacksize); } #define POP() ((void)(lltrace && prtrace(TOP(), "pop")), BASIC_POP()) #define STACKADJ(n) { (void)(BASIC_STACKADJ(n), \ lltrace && prtrace(TOP(), "stackadj")); \ assert(STACK_LEVEL() <= co->co_stacksize); } #define EXT_POP(STACK_POINTER) (lltrace && prtrace(*(STACK_POINTER), "ext_pop"), *--(STACK_POINTER)) #else #define PUSH(v) BASIC_PUSH(v) #define POP() BASIC_POP() #define STACKADJ(n) BASIC_STACKADJ(n) #define EXT_POP(STACK_POINTER) (*--(STACK_POINTER)) #endif /* Local variable macros */ #define GETLOCAL(i) (fastlocals[i]) /* The SETLOCAL() macro must not DECREF the local variable in-place and then store the new value; it must copy the old value to a temporary value, then store the new value, and then DECREF the temporary value. This is because it is possible that during the DECREF the frame is accessed by other code (e.g. a __del__ method or gc.collect()) and the variable would be pointing to already-freed memory. */ #define SETLOCAL(i, value) do { PyObject *tmp = GETLOCAL(i); \ GETLOCAL(i) = value; \ Py_XDECREF(tmp); } while (0) /* Start of code */ if (f == NULL) return NULL; /* push frame */ if (Py_EnterRecursiveCall("")) return NULL; tstate->frame = f; if (tstate->use_tracing) { if (tstate->c_tracefunc != NULL) { /* tstate->c_tracefunc, if defined, is a function that will be called on *every* entry to a code block. Its return value, if not None, is a function that will be called at the start of each executed line of code. (Actually, the function must return itself in order to continue tracing.) The trace functions are called with three arguments: a pointer to the current frame, a string indicating why the function is called, and an argument which depends on the situation. The global trace function is also called whenever an exception is detected. */ if (call_trace(tstate->c_tracefunc, tstate->c_traceobj, f, PyTrace_CALL, Py_None)) { /* Trace function raised an error */ goto exit_eval_frame; } } if (tstate->c_profilefunc != NULL) { /* Similar for c_profilefunc, except it needn't return itself and isn't called for "line" events */ if (call_trace(tstate->c_profilefunc, tstate->c_profileobj, f, PyTrace_CALL, Py_None)) { /* Profile function raised an error */ goto exit_eval_frame; } } } co = f->f_code; names = co->co_names; consts = co->co_consts; fastlocals = f->f_localsplus; freevars = f->f_localsplus + co->co_nlocals; first_instr = (unsigned char*) PyString_AS_STRING(co->co_code); /* An explanation is in order for the next line. f->f_lasti now refers to the index of the last instruction executed. You might think this was obvious from the name, but this wasn't always true before 2.3! PyFrame_New now sets f->f_lasti to -1 (i.e. the index *before* the first instruction) and YIELD_VALUE doesn't fiddle with f_lasti any more. So this does work. Promise. */ next_instr = first_instr + f->f_lasti + 1; stack_pointer = f->f_stacktop; assert(stack_pointer != NULL); f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */ #ifdef LLTRACE lltrace = PyDict_GetItemString(f->f_globals, "__lltrace__") != NULL; #endif #if defined(Py_DEBUG) || defined(LLTRACE) filename = PyString_AsString(co->co_filename); #endif why = WHY_NOT; err = 0; x = Py_None; /* Not a reference, just anything non-NULL */ w = NULL; if (throwflag) { /* support for generator.throw() */ why = WHY_EXCEPTION; goto on_error; } for (;;) { #ifdef WITH_TSC if (inst1 == 0) { /* Almost surely, the opcode executed a break or a continue, preventing inst1 from being set on the way out of the loop. */ READ_TIMESTAMP(inst1); loop1 = inst1; } dump_tsc(opcode, ticked, inst0, inst1, loop0, loop1, intr0, intr1); ticked = 0; inst1 = 0; intr0 = 0; intr1 = 0; READ_TIMESTAMP(loop0); #endif assert(stack_pointer >= f->f_valuestack); /* else underflow */ assert(STACK_LEVEL() <= co->co_stacksize); /* else overflow */ /* Do periodic things. Doing this every time through the loop would add too much overhead, so we do it only every Nth instruction. We also do it if ``things_to_do'' is set, i.e. when an asynchronous event needs attention (e.g. a signal handler or async I/O handler); see Py_AddPendingCall() and Py_MakePendingCalls() above. */ if (--_Py_Ticker < 0) { if (*next_instr == SETUP_FINALLY) { /* Make the last opcode before a try: finally: block uninterruptable. */ goto fast_next_opcode; } _Py_Ticker = _Py_CheckInterval; tstate->tick_counter++; #ifdef WITH_TSC ticked = 1; #endif if (things_to_do) { if (Py_MakePendingCalls() < 0) { why = WHY_EXCEPTION; goto on_error; } if (things_to_do) /* MakePendingCalls() didn't succeed. Force early re-execution of this "periodic" code, possibly after a thread switch */ _Py_Ticker = 0; } #ifdef WITH_THREAD if (interpreter_lock) { /* Give another thread a chance */ if (PyThreadState_Swap(NULL) != tstate) Py_FatalError("ceval: tstate mix-up"); PyThread_release_lock(interpreter_lock); /* Other threads may run now */ PyThread_acquire_lock(interpreter_lock, 1); if (PyThreadState_Swap(tstate) != NULL) Py_FatalError("ceval: orphan tstate"); /* Check for thread interrupts */ if (tstate->async_exc != NULL) { x = tstate->async_exc; tstate->async_exc = NULL; PyErr_SetNone(x); Py_DECREF(x); why = WHY_EXCEPTION; goto on_error; } } #endif } fast_next_opcode: f->f_lasti = INSTR_OFFSET(); /* line-by-line tracing support */ if (tstate->c_tracefunc != NULL && !tstate->tracing) { /* see maybe_call_line_trace for expository comments */ f->f_stacktop = stack_pointer; err = maybe_call_line_trace(tstate->c_tracefunc, tstate->c_traceobj, f, &instr_lb, &instr_ub, &instr_prev); /* Reload possibly changed frame fields */ JUMPTO(f->f_lasti); if (f->f_stacktop != NULL) { stack_pointer = f->f_stacktop; f->f_stacktop = NULL; } if (err) { /* trace function raised an exception */ goto on_error; } } /* Extract opcode and argument */ opcode = NEXTOP(); oparg = 0; /* allows oparg to be stored in a register because it doesn't have to be remembered across a full loop */ if (HAS_ARG(opcode)) oparg = NEXTARG(); dispatch_opcode: #ifdef DYNAMIC_EXECUTION_PROFILE #ifdef DXPAIRS dxpairs[lastopcode][opcode]++; lastopcode = opcode; #endif dxp[opcode]++; #endif #ifdef LLTRACE /* Instruction tracing */ if (lltrace) { if (HAS_ARG(opcode)) { printf("%d: %d, %d\n", f->f_lasti, opcode, oparg); } else { printf("%d: %d\n", f->f_lasti, opcode); } } #endif /* Main switch on opcode */ READ_TIMESTAMP(inst0); switch (opcode) { /* BEWARE! It is essential that any operation that fails sets either x to NULL, err to nonzero, or why to anything but WHY_NOT, and that no operation that succeeds does this! */ /* case STOP_CODE: this is an error! */ case NOP: goto fast_next_opcode; case LOAD_FAST: x = GETLOCAL(oparg); if (x != NULL) { Py_INCREF(x); PUSH(x); goto fast_next_opcode; } format_exc_check_arg(PyExc_UnboundLocalError, UNBOUNDLOCAL_ERROR_MSG, PyTuple_GetItem(co->co_varnames, oparg)); break; case LOAD_CONST: x = GETITEM(consts, oparg); Py_INCREF(x); PUSH(x); goto fast_next_opcode; PREDICTED_WITH_ARG(STORE_FAST); case STORE_FAST: v = POP(); SETLOCAL(oparg, v); goto fast_next_opcode; PREDICTED(POP_TOP); case POP_TOP: v = POP(); Py_DECREF(v); goto fast_next_opcode; case ROT_TWO: v = TOP(); w = SECOND(); SET_TOP(w); SET_SECOND(v); goto fast_next_opcode; case ROT_THREE: v = TOP(); w = SECOND(); x = THIRD(); SET_TOP(w); SET_SECOND(x); SET_THIRD(v); goto fast_next_opcode; case ROT_FOUR: u = TOP(); v = SECOND(); w = THIRD(); x = FOURTH(); SET_TOP(v); SET_SECOND(w); SET_THIRD(x); SET_FOURTH(u); goto fast_next_opcode; case DUP_TOP: v = TOP(); Py_INCREF(v); PUSH(v); goto fast_next_opcode; case DUP_TOPX: if (oparg == 2) { x = TOP(); Py_INCREF(x); w = SECOND(); Py_INCREF(w); STACKADJ(2); SET_TOP(x); SET_SECOND(w); goto fast_next_opcode; } else if (oparg == 3) { x = TOP(); Py_INCREF(x); w = SECOND(); Py_INCREF(w); v = THIRD(); Py_INCREF(v); STACKADJ(3); SET_TOP(x); SET_SECOND(w); SET_THIRD(v); goto fast_next_opcode; } Py_FatalError("invalid argument to DUP_TOPX" " (bytecode corruption?)"); break; case UNARY_POSITIVE: v = TOP(); x = PyNumber_Positive(v); Py_DECREF(v); SET_TOP(x); if (x != NULL) continue; break; case UNARY_NEGATIVE: v = TOP(); x = PyNumber_Negative(v); Py_DECREF(v); SET_TOP(x); if (x != NULL) continue; break; case UNARY_NOT: v = TOP(); err = PyObject_IsTrue(v); Py_DECREF(v); if (err == 0) { Py_INCREF(Py_True); SET_TOP(Py_True); continue; } else if (err > 0) { Py_INCREF(Py_False); SET_TOP(Py_False); err = 0; continue; } STACKADJ(-1); break; case UNARY_CONVERT: v = TOP(); x = PyObject_Repr(v); Py_DECREF(v); SET_TOP(x); if (x != NULL) continue; break; case UNARY_INVERT: v = TOP(); x = PyNumber_Invert(v); Py_DECREF(v); SET_TOP(x); if (x != NULL) continue; break; case BINARY_POWER: w = POP(); v = TOP(); x = PyNumber_Power(v, w, Py_None); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case BINARY_MULTIPLY: w = POP(); v = TOP(); x = PyNumber_Multiply(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case BINARY_DIVIDE: if (!_Py_QnewFlag) { w = POP(); v = TOP(); x = PyNumber_Divide(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; } /* -Qnew is in effect: fall through to BINARY_TRUE_DIVIDE */ case BINARY_TRUE_DIVIDE: w = POP(); v = TOP(); x = PyNumber_TrueDivide(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case BINARY_FLOOR_DIVIDE: w = POP(); v = TOP(); x = PyNumber_FloorDivide(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case BINARY_MODULO: w = POP(); v = TOP(); x = PyNumber_Remainder(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case BINARY_ADD: w = POP(); v = TOP(); if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) { /* INLINE: int + int */ register long a, b, i; a = PyInt_AS_LONG(v); b = PyInt_AS_LONG(w); i = a + b; if ((i^a) < 0 && (i^b) < 0) goto slow_add; x = PyInt_FromLong(i); } else if (PyString_CheckExact(v) && PyString_CheckExact(w)) { x = string_concatenate(v, w, f, next_instr); /* string_concatenate consumed the ref to v */ goto skip_decref_vx; } else { slow_add: x = PyNumber_Add(v, w); } Py_DECREF(v); skip_decref_vx: Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case BINARY_SUBTRACT: w = POP(); v = TOP(); if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) { /* INLINE: int - int */ register long a, b, i; a = PyInt_AS_LONG(v); b = PyInt_AS_LONG(w); i = a - b; if ((i^a) < 0 && (i^~b) < 0) goto slow_sub; x = PyInt_FromLong(i); } else { slow_sub: x = PyNumber_Subtract(v, w); } Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case BINARY_SUBSCR: w = POP(); v = TOP(); if (PyList_CheckExact(v) && PyInt_CheckExact(w)) { /* INLINE: list[int] */ Py_ssize_t i = PyInt_AsSsize_t(w); if (i < 0) i += PyList_GET_SIZE(v); if (i >= 0 && i < PyList_GET_SIZE(v)) { x = PyList_GET_ITEM(v, i); Py_INCREF(x); } else goto slow_get; } else slow_get: x = PyObject_GetItem(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case BINARY_LSHIFT: w = POP(); v = TOP(); x = PyNumber_Lshift(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case BINARY_RSHIFT: w = POP(); v = TOP(); x = PyNumber_Rshift(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case BINARY_AND: w = POP(); v = TOP(); x = PyNumber_And(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case BINARY_XOR: w = POP(); v = TOP(); x = PyNumber_Xor(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case BINARY_OR: w = POP(); v = TOP(); x = PyNumber_Or(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case LIST_APPEND: w = POP(); v = POP(); err = PyList_Append(v, w); Py_DECREF(v); Py_DECREF(w); if (err == 0) { PREDICT(JUMP_ABSOLUTE); continue; } break; case INPLACE_POWER: w = POP(); v = TOP(); x = PyNumber_InPlacePower(v, w, Py_None); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case INPLACE_MULTIPLY: w = POP(); v = TOP(); x = PyNumber_InPlaceMultiply(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case INPLACE_DIVIDE: if (!_Py_QnewFlag) { w = POP(); v = TOP(); x = PyNumber_InPlaceDivide(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; } /* -Qnew is in effect: fall through to INPLACE_TRUE_DIVIDE */ case INPLACE_TRUE_DIVIDE: w = POP(); v = TOP(); x = PyNumber_InPlaceTrueDivide(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case INPLACE_FLOOR_DIVIDE: w = POP(); v = TOP(); x = PyNumber_InPlaceFloorDivide(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case INPLACE_MODULO: w = POP(); v = TOP(); x = PyNumber_InPlaceRemainder(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case INPLACE_ADD: w = POP(); v = TOP(); if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) { /* INLINE: int + int */ register long a, b, i; a = PyInt_AS_LONG(v); b = PyInt_AS_LONG(w); i = a + b; if ((i^a) < 0 && (i^b) < 0) goto slow_iadd; x = PyInt_FromLong(i); } else if (PyString_CheckExact(v) && PyString_CheckExact(w)) { x = string_concatenate(v, w, f, next_instr); /* string_concatenate consumed the ref to v */ goto skip_decref_v; } else { slow_iadd: x = PyNumber_InPlaceAdd(v, w); } Py_DECREF(v); skip_decref_v: Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case INPLACE_SUBTRACT: w = POP(); v = TOP(); if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) { /* INLINE: int - int */ register long a, b, i; a = PyInt_AS_LONG(v); b = PyInt_AS_LONG(w); i = a - b; if ((i^a) < 0 && (i^~b) < 0) goto slow_isub; x = PyInt_FromLong(i); } else { slow_isub: x = PyNumber_InPlaceSubtract(v, w); } Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case INPLACE_LSHIFT: w = POP(); v = TOP(); x = PyNumber_InPlaceLshift(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case INPLACE_RSHIFT: w = POP(); v = TOP(); x = PyNumber_InPlaceRshift(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case INPLACE_AND: w = POP(); v = TOP(); x = PyNumber_InPlaceAnd(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case INPLACE_XOR: w = POP(); v = TOP(); x = PyNumber_InPlaceXor(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case INPLACE_OR: w = POP(); v = TOP(); x = PyNumber_InPlaceOr(v, w); Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case SLICE+0: case SLICE+1: case SLICE+2: case SLICE+3: if ((opcode-SLICE) & 2) w = POP(); else w = NULL; if ((opcode-SLICE) & 1) v = POP(); else v = NULL; u = TOP(); x = apply_slice(u, v, w); Py_DECREF(u); Py_XDECREF(v); Py_XDECREF(w); SET_TOP(x); if (x != NULL) continue; break; case STORE_SLICE+0: case STORE_SLICE+1: case STORE_SLICE+2: case STORE_SLICE+3: if ((opcode-STORE_SLICE) & 2) w = POP(); else w = NULL; if ((opcode-STORE_SLICE) & 1) v = POP(); else v = NULL; u = POP(); t = POP(); err = assign_slice(u, v, w, t); /* u[v:w] = t */ Py_DECREF(t); Py_DECREF(u); Py_XDECREF(v); Py_XDECREF(w); if (err == 0) continue; break; case DELETE_SLICE+0: case DELETE_SLICE+1: case DELETE_SLICE+2: case DELETE_SLICE+3: if ((opcode-DELETE_SLICE) & 2) w = POP(); else w = NULL; if ((opcode-DELETE_SLICE) & 1) v = POP(); else v = NULL; u = POP(); err = assign_slice(u, v, w, (PyObject *)NULL); /* del u[v:w] */ Py_DECREF(u); Py_XDECREF(v); Py_XDECREF(w); if (err == 0) continue; break; case STORE_SUBSCR: w = TOP(); v = SECOND(); u = THIRD(); STACKADJ(-3); /* v[w] = u */ err = PyObject_SetItem(v, w, u); Py_DECREF(u); Py_DECREF(v); Py_DECREF(w); if (err == 0) continue; break; case DELETE_SUBSCR: w = TOP(); v = SECOND(); STACKADJ(-2); /* del v[w] */ err = PyObject_DelItem(v, w); Py_DECREF(v); Py_DECREF(w); if (err == 0) continue; break; case PRINT_EXPR: v = POP(); w = PySys_GetObject("displayhook"); if (w == NULL) { PyErr_SetString(PyExc_RuntimeError, "lost sys.displayhook"); err = -1; x = NULL; } if (err == 0) { x = PyTuple_Pack(1, v); if (x == NULL) err = -1; } if (err == 0) { w = PyEval_CallObject(w, x); Py_XDECREF(w); if (w == NULL) err = -1; } Py_DECREF(v); Py_XDECREF(x); break; case PRINT_ITEM_TO: w = stream = POP(); /* fall through to PRINT_ITEM */ case PRINT_ITEM: v = POP(); if (stream == NULL || stream == Py_None) { w = PySys_GetObject("stdout"); if (w == NULL) { PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); err = -1; } } /* PyFile_SoftSpace() can exececute arbitrary code if sys.stdout is an instance with a __getattr__. If __getattr__ raises an exception, w will be freed, so we need to prevent that temporarily. */ Py_XINCREF(w); if (w != NULL && PyFile_SoftSpace(w, 0)) err = PyFile_WriteString(" ", w); if (err == 0) err = PyFile_WriteObject(v, w, Py_PRINT_RAW); if (err == 0) { /* XXX move into writeobject() ? */ if (PyString_Check(v)) { char *s = PyString_AS_STRING(v); Py_ssize_t len = PyString_GET_SIZE(v); if (len == 0 || !isspace(Py_CHARMASK(s[len-1])) || s[len-1] == ' ') PyFile_SoftSpace(w, 1); } #ifdef Py_USING_UNICODE else if (PyUnicode_Check(v)) { Py_UNICODE *s = PyUnicode_AS_UNICODE(v); Py_ssize_t len = PyUnicode_GET_SIZE(v); if (len == 0 || !Py_UNICODE_ISSPACE(s[len-1]) || s[len-1] == ' ') PyFile_SoftSpace(w, 1); } #endif else PyFile_SoftSpace(w, 1); } Py_XDECREF(w); Py_DECREF(v); Py_XDECREF(stream); stream = NULL; if (err == 0) continue; break; case PRINT_NEWLINE_TO: w = stream = POP(); /* fall through to PRINT_NEWLINE */ case PRINT_NEWLINE: if (stream == NULL || stream == Py_None) { w = PySys_GetObject("stdout"); if (w == NULL) PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); } if (w != NULL) { err = PyFile_WriteString("\n", w); if (err == 0) PyFile_SoftSpace(w, 0); } Py_XDECREF(stream); stream = NULL; break; #ifdef CASE_TOO_BIG default: switch (opcode) { #endif case RAISE_VARARGS: u = v = w = NULL; switch (oparg) { case 3: u = POP(); /* traceback */ /* Fallthrough */ case 2: v = POP(); /* value */ /* Fallthrough */ case 1: w = POP(); /* exc */ case 0: /* Fallthrough */ why = do_raise(w, v, u); break; default: PyErr_SetString(PyExc_SystemError, "bad RAISE_VARARGS oparg"); why = WHY_EXCEPTION; break; } break; case LOAD_LOCALS: if ((x = f->f_locals) != NULL) { Py_INCREF(x); PUSH(x); continue; } PyErr_SetString(PyExc_SystemError, "no locals"); break; case RETURN_VALUE: retval = POP(); why = WHY_RETURN; goto fast_block_end; case YIELD_VALUE: retval = POP(); f->f_stacktop = stack_pointer; why = WHY_YIELD; goto fast_yield; case EXEC_STMT: w = TOP(); v = SECOND(); u = THIRD(); STACKADJ(-3); READ_TIMESTAMP(intr0); err = exec_statement(f, u, v, w); READ_TIMESTAMP(intr1); Py_DECREF(u); Py_DECREF(v); Py_DECREF(w); break; case POP_BLOCK: { PyTryBlock *b = PyFrame_BlockPop(f); while (STACK_LEVEL() > b->b_level) { v = POP(); Py_DECREF(v); } } continue; case END_FINALLY: v = POP(); if (PyInt_Check(v)) { why = (enum why_code) PyInt_AS_LONG(v); assert(why != WHY_YIELD); if (why == WHY_RETURN || why == WHY_CONTINUE) retval = POP(); } else if (PyExceptionClass_Check(v) || PyString_Check(v)) { w = POP(); u = POP(); PyErr_Restore(v, w, u); why = WHY_RERAISE; break; } else if (v != Py_None) { PyErr_SetString(PyExc_SystemError, "'finally' pops bad exception"); why = WHY_EXCEPTION; } Py_DECREF(v); break; case BUILD_CLASS: u = TOP(); v = SECOND(); w = THIRD(); STACKADJ(-2); x = build_class(u, v, w); SET_TOP(x); Py_DECREF(u); Py_DECREF(v); Py_DECREF(w); break; case STORE_NAME: w = GETITEM(names, oparg); v = POP(); if ((x = f->f_locals) != NULL) { if (PyDict_CheckExact(x)) err = PyDict_SetItem(x, w, v); else err = PyObject_SetItem(x, w, v); Py_DECREF(v); if (err == 0) continue; break; } PyErr_Format(PyExc_SystemError, "no locals found when storing %s", PyObject_REPR(w)); break; case DELETE_NAME: w = GETITEM(names, oparg); if ((x = f->f_locals) != NULL) { if ((err = PyObject_DelItem(x, w)) != 0) format_exc_check_arg(PyExc_NameError, NAME_ERROR_MSG ,w); break; } PyErr_Format(PyExc_SystemError, "no locals when deleting %s", PyObject_REPR(w)); break; PREDICTED_WITH_ARG(UNPACK_SEQUENCE); case UNPACK_SEQUENCE: v = POP(); if (PyTuple_CheckExact(v) && PyTuple_GET_SIZE(v) == oparg) { PyObject **items = ((PyTupleObject *)v)->ob_item; while (oparg--) { w = items[oparg]; Py_INCREF(w); PUSH(w); } Py_DECREF(v); continue; } else if (PyList_CheckExact(v) && PyList_GET_SIZE(v) == oparg) { PyObject **items = ((PyListObject *)v)->ob_item; while (oparg--) { w = items[oparg]; Py_INCREF(w); PUSH(w); } } else if (unpack_iterable(v, oparg, stack_pointer + oparg)) stack_pointer += oparg; else { if (PyErr_ExceptionMatches(PyExc_TypeError)) PyErr_SetString(PyExc_TypeError, "unpack non-sequence"); why = WHY_EXCEPTION; } Py_DECREF(v); break; case STORE_ATTR: w = GETITEM(names, oparg); v = TOP(); u = SECOND(); STACKADJ(-2); err = PyObject_SetAttr(v, w, u); /* v.w = u */ Py_DECREF(v); Py_DECREF(u); if (err == 0) continue; break; case DELETE_ATTR: w = GETITEM(names, oparg); v = POP(); err = PyObject_SetAttr(v, w, (PyObject *)NULL); /* del v.w */ Py_DECREF(v); break; case STORE_GLOBAL: w = GETITEM(names, oparg); v = POP(); err = PyDict_SetItem(f->f_globals, w, v); Py_DECREF(v); if (err == 0) continue; break; case 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; case LOAD_NAME: w = GETITEM(names, oparg); if ((v = f->f_locals) == NULL) { PyErr_Format(PyExc_SystemError, "no locals when loading %s", PyObject_REPR(w)); break; } if (PyDict_CheckExact(v)) { x = PyDict_GetItem(v, w); Py_XINCREF(x); } else { x = PyObject_GetItem(v, w); if (x == NULL && PyErr_Occurred()) { if (!PyErr_ExceptionMatches(PyExc_KeyError)) break; PyErr_Clear(); } } if (x == NULL) { x = PyDict_GetItem(f->f_globals, w); if (x == NULL) { x = PyDict_GetItem(f->f_builtins, w); if (x == NULL) { format_exc_check_arg( PyExc_NameError, NAME_ERROR_MSG ,w); break; } } Py_INCREF(x); } PUSH(x); continue; case LOAD_GLOBAL: w = GETITEM(names, oparg); if (PyString_CheckExact(w)) { /* Inline the PyDict_GetItem() calls. WARNING: this is an extreme speed hack. Do not try this at home. */ long hash = ((PyStringObject *)w)->ob_shash; if (hash != -1) { PyDictObject *d; PyDictEntry *e; d = (PyDictObject *)(f->f_globals); e = d->ma_lookup(d, w, hash); if (e == NULL) { x = NULL; break; } x = e->me_value; if (x != NULL) { Py_INCREF(x); PUSH(x); continue; } d = (PyDictObject *)(f->f_builtins); e = d->ma_lookup(d, w, hash); if (e == NULL) { x = NULL; break; } x = e->me_value; if (x != NULL) { Py_INCREF(x); PUSH(x); continue; } goto load_global_error; } } /* This is the un-inlined version of the code above */ x = PyDict_GetItem(f->f_globals, w); if (x == NULL) { x = PyDict_GetItem(f->f_builtins, w); if (x == NULL) { load_global_error: format_exc_check_arg( PyExc_NameError, GLOBAL_NAME_ERROR_MSG, w); break; } } Py_INCREF(x); PUSH(x); continue; case DELETE_FAST: x = GETLOCAL(oparg); if (x != NULL) { SETLOCAL(oparg, NULL); continue; } format_exc_check_arg( PyExc_UnboundLocalError, UNBOUNDLOCAL_ERROR_MSG, PyTuple_GetItem(co->co_varnames, oparg) ); break; case LOAD_CLOSURE: x = freevars[oparg]; Py_INCREF(x); PUSH(x); if (x != NULL) continue; break; case LOAD_DEREF: x = freevars[oparg]; w = PyCell_Get(x); if (w != NULL) { PUSH(w); continue; } err = -1; /* Don't stomp existing exception */ if (PyErr_Occurred()) break; if (oparg < PyTuple_GET_SIZE(co->co_cellvars)) { v = PyTuple_GET_ITEM(co->co_cellvars, oparg); format_exc_check_arg( PyExc_UnboundLocalError, UNBOUNDLOCAL_ERROR_MSG, v); } else { v = PyTuple_GET_ITEM( co->co_freevars, oparg - PyTuple_GET_SIZE(co->co_cellvars)); format_exc_check_arg( PyExc_NameError, UNBOUNDFREE_ERROR_MSG, v); } break; case STORE_DEREF: w = POP(); x = freevars[oparg]; PyCell_Set(x, w); Py_DECREF(w); continue; case BUILD_TUPLE: x = PyTuple_New(oparg); if (x != NULL) { for (; --oparg >= 0;) { w = POP(); PyTuple_SET_ITEM(x, oparg, w); } PUSH(x); continue; } break; case BUILD_LIST: x = PyList_New(oparg); if (x != NULL) { for (; --oparg >= 0;) { w = POP(); PyList_SET_ITEM(x, oparg, w); } PUSH(x); continue; } break; case BUILD_MAP: x = PyDict_New(); PUSH(x); if (x != NULL) continue; break; case LOAD_ATTR: w = GETITEM(names, oparg); v = TOP(); x = PyObject_GetAttr(v, w); Py_DECREF(v); SET_TOP(x); if (x != NULL) continue; break; case COMPARE_OP: w = POP(); v = TOP(); if (PyInt_CheckExact(w) && PyInt_CheckExact(v)) { /* INLINE: cmp(int, int) */ register long a, b; register int res; a = PyInt_AS_LONG(v); b = PyInt_AS_LONG(w); switch (oparg) { case PyCmp_LT: res = a < b; break; case PyCmp_LE: res = a <= b; break; case PyCmp_EQ: res = a == b; break; case PyCmp_NE: res = a != b; break; case PyCmp_GT: res = a > b; break; case PyCmp_GE: res = a >= b; break; case PyCmp_IS: res = v == w; break; case PyCmp_IS_NOT: res = v != w; break; default: goto slow_compare; } x = res ? Py_True : Py_False; Py_INCREF(x); } else { slow_compare: x = cmp_outcome(oparg, v, w); } Py_DECREF(v); Py_DECREF(w); SET_TOP(x); if (x == NULL) break; PREDICT(JUMP_IF_FALSE); PREDICT(JUMP_IF_TRUE); continue; case IMPORT_NAME: w = GETITEM(names, oparg); x = PyDict_GetItemString(f->f_builtins, "__import__"); if (x == NULL) { PyErr_SetString(PyExc_ImportError, "__import__ not found"); break; } v = POP(); u = TOP(); if (PyInt_AsLong(u) != -1 || PyErr_Occurred()) w = PyTuple_Pack(5, w, f->f_globals, f->f_locals == NULL ? Py_None : f->f_locals, v, u); else w = PyTuple_Pack(4, w, f->f_globals, f->f_locals == NULL ? Py_None : f->f_locals, v); Py_DECREF(v); Py_DECREF(u); if (w == NULL) { u = POP(); x = NULL; break; } READ_TIMESTAMP(intr0); x = PyEval_CallObject(x, w); READ_TIMESTAMP(intr1); Py_DECREF(w); SET_TOP(x); if (x != NULL) continue; break; case IMPORT_STAR: v = POP(); PyFrame_FastToLocals(f); if ((x = f->f_locals) == NULL) { PyErr_SetString(PyExc_SystemError, "no locals found during 'import *'"); break; } READ_TIMESTAMP(intr0); err = import_all_from(x, v); READ_TIMESTAMP(intr1); PyFrame_LocalsToFast(f, 0); Py_DECREF(v); if (err == 0) continue; break; case IMPORT_FROM: w = GETITEM(names, oparg); v = TOP(); READ_TIMESTAMP(intr0); x = import_from(v, w); READ_TIMESTAMP(intr1); PUSH(x); if (x != NULL) continue; break; case JUMP_FORWARD: JUMPBY(oparg); goto fast_next_opcode; PREDICTED_WITH_ARG(JUMP_IF_FALSE); case JUMP_IF_FALSE: w = TOP(); if (w == Py_True) { PREDICT(POP_TOP); goto fast_next_opcode; } if (w == Py_False) { JUMPBY(oparg); goto fast_next_opcode; } err = PyObject_IsTrue(w); if (err > 0) err = 0; else if (err == 0) JUMPBY(oparg); else break; continue; PREDICTED_WITH_ARG(JUMP_IF_TRUE); case JUMP_IF_TRUE: w = TOP(); if (w == Py_False) { PREDICT(POP_TOP); goto fast_next_opcode; } if (w == Py_True) { JUMPBY(oparg); goto fast_next_opcode; } err = PyObject_IsTrue(w); if (err > 0) { err = 0; JUMPBY(oparg); } else if (err == 0) ; else break; continue; PREDICTED_WITH_ARG(JUMP_ABSOLUTE); case JUMP_ABSOLUTE: JUMPTO(oparg); continue; case GET_ITER: /* before: [obj]; after [getiter(obj)] */ v = TOP(); x = PyObject_GetIter(v); Py_DECREF(v); if (x != NULL) { SET_TOP(x); PREDICT(FOR_ITER); continue; } STACKADJ(-1); break; PREDICTED_WITH_ARG(FOR_ITER); case FOR_ITER: /* before: [iter]; after: [iter, iter()] *or* [] */ v = TOP(); x = (*v->ob_type->tp_iternext)(v); if (x != NULL) { PUSH(x); PREDICT(STORE_FAST); PREDICT(UNPACK_SEQUENCE); continue; } if (PyErr_Occurred()) { if (!PyErr_ExceptionMatches(PyExc_StopIteration)) break; PyErr_Clear(); } /* iterator ended normally */ x = v = POP(); Py_DECREF(v); JUMPBY(oparg); continue; case BREAK_LOOP: why = WHY_BREAK; goto fast_block_end; case CONTINUE_LOOP: retval = PyInt_FromLong(oparg); if (!retval) { x = NULL; break; } why = WHY_CONTINUE; goto fast_block_end; case SETUP_LOOP: case SETUP_EXCEPT: case 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. */ PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg, STACK_LEVEL()); continue; case WITH_CLEANUP: { /* TOP is the context.__exit__ bound method. Below that are 1-3 values indicating how/why we entered the finally clause: - SECOND = None - (SECOND, THIRD) = (WHY_{RETURN,CONTINUE}), retval - SECOND = WHY_*; no retval below it - (SECOND, THIRD, FOURTH) = exc_info() In the last case, we must call TOP(SECOND, THIRD, FOURTH) otherwise we must call TOP(None, None, None) In addition, if the stack represents an exception, *and* the function call returns a 'true' value, we "zap" this information, to prevent END_FINALLY from re-raising the exception. (But non-local gotos should still be resumed.) */ x = TOP(); u = SECOND(); if (PyInt_Check(u) || u == Py_None) { u = v = w = Py_None; } else { v = THIRD(); w = FOURTH(); } /* XXX Not the fastest way to call it... */ x = PyObject_CallFunctionObjArgs(x, u, v, w, NULL); if (x == NULL) break; /* Go to error exit */ if (u != Py_None && PyObject_IsTrue(x)) { /* There was an exception and a true return */ Py_DECREF(x); x = TOP(); /* Again */ STACKADJ(-3); Py_INCREF(Py_None); SET_TOP(Py_None); Py_DECREF(x); Py_DECREF(u); Py_DECREF(v); Py_DECREF(w); } else { /* Let END_FINALLY do its thing */ Py_DECREF(x); x = POP(); Py_DECREF(x); } break; } case CALL_FUNCTION: { PyObject **sp; PCALL(PCALL_ALL); sp = stack_pointer; #ifdef WITH_TSC x = call_function(&sp, oparg, &intr0, &intr1); #else x = call_function(&sp, oparg); #endif stack_pointer = sp; PUSH(x); if (x != NULL) continue; break; } case CALL_FUNCTION_VAR: case CALL_FUNCTION_KW: case CALL_FUNCTION_VAR_KW: { int na = oparg & 0xff; int nk = (oparg>>8) & 0xff; int flags = (opcode - CALL_FUNCTION) & 3; int n = na + 2 * nk; PyObject **pfunc, *func, **sp; PCALL(PCALL_ALL); if (flags & CALL_FLAG_VAR) n++; if (flags & CALL_FLAG_KW) n++; pfunc = stack_pointer - n - 1; func = *pfunc; if (PyMethod_Check(func) && PyMethod_GET_SELF(func) != NULL) { PyObject *self = PyMethod_GET_SELF(func); Py_INCREF(self); func = PyMethod_GET_FUNCTION(func); Py_INCREF(func); Py_DECREF(*pfunc); *pfunc = self; na++; n++; } else Py_INCREF(func); sp = stack_pointer; READ_TIMESTAMP(intr0); x = ext_do_call(func, &sp, flags, na, nk); READ_TIMESTAMP(intr1); stack_pointer = sp; Py_DECREF(func); while (stack_pointer > pfunc) { w = POP(); Py_DECREF(w); } PUSH(x); if (x != NULL) continue; break; } case MAKE_FUNCTION: v = POP(); /* code object */ x = PyFunction_New(v, f->f_globals); Py_DECREF(v); /* XXX Maybe this should be a separate opcode? */ if (x != NULL && oparg > 0) { v = PyTuple_New(oparg); if (v == NULL) { Py_DECREF(x); x = NULL; break; } while (--oparg >= 0) { w = POP(); PyTuple_SET_ITEM(v, oparg, w); } err = PyFunction_SetDefaults(x, v); Py_DECREF(v); } PUSH(x); break; case MAKE_CLOSURE: { v = POP(); /* code object */ x = PyFunction_New(v, f->f_globals); Py_DECREF(v); if (x != NULL) { v = POP(); err = PyFunction_SetClosure(x, v); Py_DECREF(v); } if (x != NULL && oparg > 0) { v = PyTuple_New(oparg); if (v == NULL) { Py_DECREF(x); x = NULL; break; } while (--oparg >= 0) { w = POP(); PyTuple_SET_ITEM(v, oparg, w); } err = PyFunction_SetDefaults(x, v); Py_DECREF(v); } PUSH(x); break; } case BUILD_SLICE: if (oparg == 3) w = POP(); else w = NULL; v = POP(); u = TOP(); x = PySlice_New(u, v, w); Py_DECREF(u); Py_DECREF(v); Py_XDECREF(w); SET_TOP(x); if (x != NULL) continue; break; case EXTENDED_ARG: opcode = NEXTOP(); oparg = oparg<<16 | NEXTARG(); goto dispatch_opcode; default: fprintf(stderr, "XXX lineno: %d, opcode: %d\n", PyCode_Addr2Line(f->f_code, f->f_lasti), opcode); PyErr_SetString(PyExc_SystemError, "unknown opcode"); why = WHY_EXCEPTION; break; #ifdef CASE_TOO_BIG } #endif } /* switch */ on_error: READ_TIMESTAMP(inst1); /* Quickly continue if no error occurred */ if (why == WHY_NOT) { if (err == 0 && x != NULL) { #ifdef CHECKEXC /* This check is expensive! */ if (PyErr_Occurred()) fprintf(stderr, "XXX undetected error\n"); else { #endif READ_TIMESTAMP(loop1); continue; /* Normal, fast path */ #ifdef CHECKEXC } #endif } why = WHY_EXCEPTION; x = Py_None; err = 0; } /* Double-check exception status */ if (why == WHY_EXCEPTION || why == WHY_RERAISE) { if (!PyErr_Occurred()) { PyErr_SetString(PyExc_SystemError, "error return without exception set"); why = WHY_EXCEPTION; } } #ifdef CHECKEXC else { /* This check is expensive! */ if (PyErr_Occurred()) { char buf[1024]; sprintf(buf, "Stack unwind with exception " "set and why=%d", why); Py_FatalError(buf); } } #endif /* Log traceback info if this is a real exception */ if (why == WHY_EXCEPTION) { PyTraceBack_Here(f); if (tstate->c_tracefunc != NULL) call_exc_trace(tstate->c_tracefunc, tstate->c_traceobj, f); } /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */ if (why == WHY_RERAISE) why = WHY_EXCEPTION; /* Unwind stacks if a (pseudo) exception occurred */ fast_block_end: while (why != WHY_NOT && f->f_iblock > 0) { PyTryBlock *b = PyFrame_BlockPop(f); assert(why != WHY_YIELD); if (b->b_type == SETUP_LOOP && why == WHY_CONTINUE) { /* For a continue inside a try block, don't pop the block for the loop. */ PyFrame_BlockSetup(f, b->b_type, b->b_handler, b->b_level); why = WHY_NOT; JUMPTO(PyInt_AS_LONG(retval)); Py_DECREF(retval); break; } while (STACK_LEVEL() > b->b_level) { v = POP(); Py_XDECREF(v); } if (b->b_type == SETUP_LOOP && why == WHY_BREAK) { why = WHY_NOT; JUMPTO(b->b_handler); break; } if (b->b_type == SETUP_FINALLY || (b->b_type == SETUP_EXCEPT && why == WHY_EXCEPTION)) { if (why == WHY_EXCEPTION) { PyObject *exc, *val, *tb; PyErr_Fetch(&exc, &val, &tb); if (val == NULL) { val = Py_None; Py_INCREF(val); } /* Make the raw exception data available to the handler, so a program can emulate the Python main loop. Don't do this for 'finally'. */ if (b->b_type == SETUP_EXCEPT) { PyErr_NormalizeException( &exc, &val, &tb); set_exc_info(tstate, exc, val, tb); } if (tb == NULL) { Py_INCREF(Py_None); PUSH(Py_None); } else PUSH(tb); PUSH(val); PUSH(exc); } else { if (why & (WHY_RETURN | WHY_CONTINUE)) PUSH(retval); v = PyInt_FromLong((long)why); PUSH(v); } why = WHY_NOT; JUMPTO(b->b_handler); break; } } /* unwind stack */ /* End the loop if we still have an error (or return) */ if (why != WHY_NOT) break; READ_TIMESTAMP(loop1); } /* main loop */ assert(why != WHY_YIELD); /* Pop remaining stack entries. */ while (!EMPTY()) { v = POP(); Py_XDECREF(v); } if (why != WHY_RETURN) retval = NULL; fast_yield: if (tstate->use_tracing) { if (tstate->c_tracefunc) { if (why == WHY_RETURN || why == WHY_YIELD) { if (call_trace(tstate->c_tracefunc, tstate->c_traceobj, f, PyTrace_RETURN, retval)) { Py_XDECREF(retval); retval = NULL; why = WHY_EXCEPTION; } } else if (why == WHY_EXCEPTION) { call_trace_protected(tstate->c_tracefunc, tstate->c_traceobj, f, PyTrace_RETURN, NULL); } } if (tstate->c_profilefunc) { if (why == WHY_EXCEPTION) call_trace_protected(tstate->c_profilefunc, tstate->c_profileobj, f, PyTrace_RETURN, NULL); else if (call_trace(tstate->c_profilefunc, tstate->c_profileobj, f, PyTrace_RETURN, retval)) { Py_XDECREF(retval); retval = NULL; why = WHY_EXCEPTION; } } } if (tstate->frame->f_exc_type != NULL) reset_exc_info(tstate); else { assert(tstate->frame->f_exc_value == NULL); assert(tstate->frame->f_exc_traceback == NULL); } /* pop frame */ exit_eval_frame: Py_LeaveRecursiveCall(); tstate->frame = f->f_back; return retval; } ---tokens--- '/* Execute compiled code */' Comment.Multiline '\n' Text '\n' Text '/* XXX TO DO:\n XXX speed up searching for keywords by using a dictionary\n XXX document it!\n */' Comment.Multiline '\n' Text '\n' Text '/* enable more aggressive intra-module optimizations, where available */' Comment.Multiline '\n' Text '#' Comment.Preproc 'define PY_LOCAL_AGGRESSIVE' Comment.Preproc '\n' Comment.Preproc '\n' Text '#' Comment.Preproc 'include' Comment.Preproc ' ' Text '"Python.h"' Comment.PreprocFile '\n' Comment.Preproc '\n' Text '#' Comment.Preproc 'include' Comment.Preproc ' ' Text '"code.h"' Comment.PreprocFile '\n' Comment.Preproc '#' Comment.Preproc 'include' Comment.Preproc ' ' Text '"frameobject.h"' Comment.PreprocFile '\n' Comment.Preproc '#' Comment.Preproc 'include' Comment.Preproc ' ' Text '"eval.h"' Comment.PreprocFile '\n' Comment.Preproc '#' Comment.Preproc 'include' Comment.Preproc ' ' Text '"opcode.h"' Comment.PreprocFile '\n' Comment.Preproc '#' Comment.Preproc 'include' Comment.Preproc ' ' Text '"structmember.h"' Comment.PreprocFile '\n' Comment.Preproc '\n' Text '#' Comment.Preproc 'include' Comment.Preproc ' ' Text '' Comment.PreprocFile '\n' Comment.Preproc '\n' Text '#' Comment.Preproc 'ifndef WITH_TSC' Comment.Preproc '\n' Comment.Preproc '\n' Text '#' Comment.Preproc 'define READ_TIMESTAMP(var)' Comment.Preproc '\n' Comment.Preproc '\n' Text '#' Comment.Preproc 'else' Comment.Preproc '\n' Comment.Preproc '\n' Text 'typedef' Keyword ' ' Text 'unsigned' Keyword.Type ' ' Text 'long' Keyword.Type ' ' Text 'long' Keyword.Type ' ' Text 'uint64' Name ';' Punctuation '\n' Text '\n' Text '#' Comment.Preproc 'if defined(__ppc__) ' Comment.Preproc "/* <- Don't know if this is the correct symbol; this\n\t\t\t section should work for GCC on any PowerPC platform,\n\t\t\t irrespective of OS. POWER? Who knows :-) */" Comment.Multiline '\n' Comment.Preproc '\n' Text '#' Comment.Preproc 'define READ_TIMESTAMP(var) ppc_getcounter(&var)' Comment.Preproc '\n' Comment.Preproc '\n' Text 'static' Keyword ' ' Text 'void' Keyword.Type '\n' Text 'ppc_getcounter' Name '(' Punctuation 'uint64' Name ' ' Text '*' Operator 'v' Name ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'register' Keyword ' ' Text 'unsigned' Keyword.Type ' ' Text 'long' Keyword.Type ' ' Text 'tbu' Name ',' Punctuation ' ' Text 'tb' Name ',' Punctuation ' ' Text 'tbu2' Name ';' Punctuation '\n' Text '\n' Text ' ' Text 'loop' Name.Label ':' Punctuation '\n' Text '\t' Text 'asm' Keyword ' ' Text 'volatile' Keyword ' ' Text '(' Punctuation '"' Literal.String 'mftbu %0' Literal.String '"' Literal.String ' ' Text ':' Operator ' ' Text '"' Literal.String '=r' Literal.String '"' Literal.String ' ' Text '(' Punctuation 'tbu' Name ')' Punctuation ' ' Text ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'asm' Keyword ' ' Text 'volatile' Name.Function ' ' Text '(' Punctuation '"' Literal.String 'mftb %0' Literal.String '"' Literal.String ' ' Text ':' Operator ' ' Text '"' Literal.String '=r' Literal.String '"' Literal.String ' ' Text '(' Punctuation 'tb' Name ')' Punctuation ' ' Text ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'asm' Keyword ' ' Text 'volatile' Name.Function ' ' Text '(' Punctuation '"' Literal.String 'mftbu %0' Literal.String '"' Literal.String ' ' Text ':' Operator ' ' Text '"' Literal.String '=r' Literal.String '"' Literal.String ' ' Text '(' Punctuation 'tbu2' Name ')' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation '__builtin_expect' Name '(' Punctuation 'tbu' Name ' ' Text '!' Operator '=' Operator ' ' Text 'tbu2' Name ',' Punctuation ' ' Text '0' Literal.Number.Integer ')' Punctuation ')' Punctuation ' ' Text 'goto' Keyword ' ' Text 'loop' Name ';' Punctuation '\n' Text '\n' Text '\t' Text '/* The slightly peculiar way of writing the next lines is\n\t compiled better by GCC than any other way I tried. */' Comment.Multiline '\n' Text '\t' Text '(' Punctuation '(' Punctuation 'long' Keyword.Type '*' Operator ')' Punctuation '(' Punctuation 'v' Name ')' Punctuation ')' Punctuation '[' Punctuation '0' Literal.Number.Integer ']' Punctuation ' ' Text '=' Operator ' ' Text 'tbu' Name ';' Punctuation '\n' Text '\t' Text '(' Punctuation '(' Punctuation 'long' Keyword.Type '*' Operator ')' Punctuation '(' Punctuation 'v' Name ')' Punctuation ')' Punctuation '[' Punctuation '1' Literal.Number.Integer ']' Punctuation ' ' Text '=' Operator ' ' Text 'tb' Name ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text '#' Comment.Preproc 'else ' Comment.Preproc '/* this is for linux/x86 (and probably any other GCC/x86 combo) */' Comment.Multiline '\n' Comment.Preproc '\n' Text '#' Comment.Preproc 'define READ_TIMESTAMP(val) \\' Comment.Preproc '\n' Comment.Preproc ' __asm__ __volatile__("rdtsc" : "=A" (val))' Comment.Preproc '\n' Comment.Preproc '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text 'void' Keyword.Type ' ' Text 'dump_tsc' Name '(' Punctuation 'int' Keyword.Type ' ' Text 'opcode' Name ',' Punctuation ' ' Text 'int' Keyword.Type ' ' Text 'ticked' Name ',' Punctuation ' ' Text 'uint64' Name ' ' Text 'inst0' Name ',' Punctuation ' ' Text 'uint64' Name ' ' Text 'inst1' Name ',' Punctuation '\n' Text '\t ' Text 'uint64' Name ' ' Text 'loop0' Name ',' Punctuation ' ' Text 'uint64' Name ' ' Text 'loop1' Name ',' Punctuation ' ' Text 'uint64' Name ' ' Text 'intr0' Name ',' Punctuation ' ' Text 'uint64' Name ' ' Text 'intr1' Name ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'uint64' Name ' ' Text 'intr' Name ',' Punctuation ' ' Text 'inst' Name ',' Punctuation ' ' Text 'loop' Name ';' Punctuation '\n' Text '\t' Text 'PyThreadState' Name ' ' Text '*' Operator 'tstate' Name ' ' Text '=' Operator ' ' Text 'PyThreadState_Get' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation '!' Operator 'tstate' Name '-' Operator '>' Operator 'interp' Name '-' Operator '>' Operator 'tscdump' Name ')' Punctuation '\n' Text '\t\t' Text 'return' Keyword ';' Punctuation '\n' Text '\t' Text 'intr' Name ' ' Text '=' Operator ' ' Text 'intr1' Name ' ' Text '-' Operator ' ' Text 'intr0' Name ';' Punctuation '\n' Text '\t' Text 'inst' Name ' ' Text '=' Operator ' ' Text 'inst1' Name ' ' Text '-' Operator ' ' Text 'inst0' Name ' ' Text '-' Operator ' ' Text 'intr' Name ';' Punctuation '\n' Text '\t' Text 'loop' Name ' ' Text '=' Operator ' ' Text 'loop1' Name ' ' Text '-' Operator ' ' Text 'loop0' Name ' ' Text '-' Operator ' ' Text 'intr' Name ';' Punctuation '\n' Text '\t' Text 'fprintf' Name '(' Punctuation 'stderr' Name ',' Punctuation ' ' Text '"' Literal.String 'opcode=%03d t=%d inst=%06lld loop=%06lld' Literal.String '\\n' Literal.String.Escape '"' Literal.String ',' Punctuation '\n' Text '\t\t' Text 'opcode' Name ',' Punctuation ' ' Text 'ticked' Name ',' Punctuation ' ' Text 'inst' Name ',' Punctuation ' ' Text 'loop' Name ')' Punctuation ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text '/* Turn this on if your compiler chokes on the big switch: */' Comment.Multiline '\n' Text '/* #define CASE_TOO_BIG 1 */' Comment.Multiline '\n' Text '\n' Text '#' Comment.Preproc 'ifdef Py_DEBUG' Comment.Preproc '\n' Comment.Preproc '/* For debugging the interpreter: */' Comment.Multiline '\n' Text '#' Comment.Preproc 'define LLTRACE 1\t' Comment.Preproc '/* Low-level trace feature */' Comment.Multiline '\n' Comment.Preproc '#' Comment.Preproc 'define CHECKEXC 1\t' Comment.Preproc '/* Double-check exception checking */' Comment.Multiline '\n' Comment.Preproc '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text 'typedef' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator '(' Punctuation '*' Operator 'callproc' Name ')' Punctuation '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text '\n' Text '/* Forward declarations */' Comment.Multiline '\n' Text '#' Comment.Preproc 'ifdef WITH_TSC' Comment.Preproc '\n' Comment.Preproc 'static' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator ' ' Text 'call_function' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator '*' Operator '*' Operator ',' Punctuation ' ' Text 'int' Keyword.Type ',' Punctuation ' ' Text 'uint64' Name '*' Operator ',' Punctuation ' ' Text 'uint64' Name '*' Operator ')' Punctuation ';' Punctuation '\n' Text '#' Comment.Preproc 'else' Comment.Preproc '\n' Comment.Preproc 'static' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator ' ' Text 'call_function' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator '*' Operator '*' Operator ',' Punctuation ' ' Text 'int' Keyword.Type ')' Punctuation ';' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc 'static' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator ' ' Text 'fast_function' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator '*' Operator '*' Operator ',' Punctuation ' ' Text 'int' Keyword.Type ',' Punctuation ' ' Text 'int' Keyword.Type ',' Punctuation ' ' Text 'int' Keyword.Type ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator ' ' Text 'do_call' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator '*' Operator '*' Operator ',' Punctuation ' ' Text 'int' Keyword.Type ',' Punctuation ' ' Text 'int' Keyword.Type ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator ' ' Text 'ext_do_call' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator '*' Operator '*' Operator ',' Punctuation ' ' Text 'int' Keyword.Type ',' Punctuation ' ' Text 'int' Keyword.Type ',' Punctuation ' ' Text 'int' Keyword.Type ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator ' ' Text 'update_keyword_args' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'int' Keyword.Type ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator '*' Operator '*' Operator ',' Punctuation 'PyObject' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator ' ' Text 'update_star_args' Name '(' Punctuation 'int' Keyword.Type ',' Punctuation ' ' Text 'int' Keyword.Type ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator '*' Operator '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator ' ' Text 'load_args' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator '*' Operator '*' Operator ',' Punctuation ' ' Text 'int' Keyword.Type ')' Punctuation ';' Punctuation '\n' Text '#' Comment.Preproc 'define CALL_FLAG_VAR 1' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define CALL_FLAG_KW 2' Comment.Preproc '\n' Comment.Preproc '\n' Text '#' Comment.Preproc 'ifdef LLTRACE' Comment.Preproc '\n' Comment.Preproc 'static' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'lltrace' Name ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'prtrace' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'char' Keyword.Type ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc 'static' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'call_trace' Name '(' Punctuation 'Py_tracefunc' Name ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyFrameObject' Name ' ' Text '*' Operator ',' Punctuation '\n' Text '\t\t ' Text 'int' Keyword.Type ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'void' Keyword.Type ' ' Text 'call_trace_protected' Name '(' Punctuation 'Py_tracefunc' Name ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation '\n' Text '\t\t\t\t ' Text 'PyFrameObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'int' Keyword.Type ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'void' Keyword.Type ' ' Text 'call_exc_trace' Name '(' Punctuation 'Py_tracefunc' Name ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyFrameObject' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'maybe_call_line_trace' Name '(' Punctuation 'Py_tracefunc' Name ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation '\n' Text '\t\t\t\t ' Text 'PyFrameObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'int' Keyword.Type ' ' Text '*' Operator ',' Punctuation ' ' Text 'int' Keyword.Type ' ' Text '*' Operator ',' Punctuation ' ' Text 'int' Keyword.Type ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text '\n' Text 'static' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator ' ' Text 'apply_slice' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'assign_slice' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation '\n' Text '\t\t\t' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator ' ' Text 'cmp_outcome' Name '(' Punctuation 'int' Keyword.Type ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator ' ' Text 'import_from' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'import_all_from' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator ' ' Text 'build_class' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'exec_statement' Name '(' Punctuation 'PyFrameObject' Name ' ' Text '*' Operator ',' Punctuation '\n' Text '\t\t\t ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'void' Keyword.Type ' ' Text 'set_exc_info' Name '(' Punctuation 'PyThreadState' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'void' Keyword.Type ' ' Text 'reset_exc_info' Name '(' Punctuation 'PyThreadState' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'void' Keyword.Type ' ' Text 'format_exc_check_arg' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'char' Keyword.Type ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator ' ' Text 'string_concatenate' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation '\n' Text '\t\t\t\t ' Text 'PyFrameObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'unsigned' Keyword.Type ' ' Text 'char' Keyword.Type ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text '\n' Text '#' Comment.Preproc 'define NAME_ERROR_MSG \\' Comment.Preproc '\n' Comment.Preproc '\t"name \'%.200s\' is not defined"' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define GLOBAL_NAME_ERROR_MSG \\' Comment.Preproc '\n' Comment.Preproc '\t"global name \'%.200s\' is not defined"' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define UNBOUNDLOCAL_ERROR_MSG \\' Comment.Preproc '\n' Comment.Preproc '\t"local variable \'%.200s\' referenced before assignment"' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define UNBOUNDFREE_ERROR_MSG \\' Comment.Preproc '\n' Comment.Preproc '\t"free variable \'%.200s\' referenced before assignment" \\' Comment.Preproc '\n' Comment.Preproc ' " in enclosing scope"' Comment.Preproc '\n' Comment.Preproc '\n' Text '/* Dynamic execution profile */' Comment.Multiline '\n' Text '#' Comment.Preproc 'ifdef DYNAMIC_EXECUTION_PROFILE' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'ifdef DXPAIRS' Comment.Preproc '\n' Comment.Preproc 'static' Keyword ' ' Text 'long' Keyword.Type ' ' Text 'dxpairs' Name '[' Punctuation '257' Literal.Number.Integer ']' Punctuation '[' Punctuation '256' Literal.Number.Integer ']' Punctuation ';' Punctuation '\n' Text '#' Comment.Preproc 'define dxp dxpairs[256]' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'else' Comment.Preproc '\n' Comment.Preproc 'static' Keyword ' ' Text 'long' Keyword.Type ' ' Text 'dxp' Name '[' Punctuation '256' Literal.Number.Integer ']' Punctuation ';' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text '/* Function call profile */' Comment.Multiline '\n' Text '#' Comment.Preproc 'ifdef CALL_PROFILE' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PCALL_NUM 11' Comment.Preproc '\n' Comment.Preproc 'static' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'pcall' Name '[' Punctuation 'PCALL_NUM' Name ']' Punctuation ';' Punctuation '\n' Text '\n' Text '#' Comment.Preproc 'define PCALL_ALL 0' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PCALL_FUNCTION 1' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PCALL_FAST_FUNCTION 2' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PCALL_FASTER_FUNCTION 3' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PCALL_METHOD 4' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PCALL_BOUND_METHOD 5' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PCALL_CFUNCTION 6' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PCALL_TYPE 7' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PCALL_GENERATOR 8' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PCALL_OTHER 9' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PCALL_POP 10' Comment.Preproc '\n' Comment.Preproc '\n' Text '/* Notes about the statistics\n\n PCALL_FAST stats\n\n FAST_FUNCTION means no argument tuple needs to be created.\n FASTER_FUNCTION means that the fast-path frame setup code is used.\n\n If there is a method call where the call can be optimized by changing\n the argument tuple and calling the function directly, it gets recorded\n twice.\n\n As a result, the relationship among the statistics appears to be\n PCALL_ALL == PCALL_FUNCTION + PCALL_METHOD - PCALL_BOUND_METHOD +\n PCALL_CFUNCTION + PCALL_TYPE + PCALL_GENERATOR + PCALL_OTHER\n PCALL_FUNCTION > PCALL_FAST_FUNCTION > PCALL_FASTER_FUNCTION\n PCALL_METHOD > PCALL_BOUND_METHOD\n*/' Comment.Multiline '\n' Text '\n' Text '#' Comment.Preproc 'define PCALL(POS) pcall[POS]++' Comment.Preproc '\n' Comment.Preproc '\n' Text 'PyObject' Name ' ' Text '*' Operator '\n' Text 'PyEval_GetCallStats' Name.Function '(' Punctuation 'PyObject' Name ' ' Text '*' Operator 'self' Name ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'return' Keyword ' ' Text 'Py_BuildValue' Name '(' Punctuation '"' Literal.String 'iiiiiiiiii' Literal.String '"' Literal.String ',' Punctuation '\n' Text '\t\t\t ' Text 'pcall' Name '[' Punctuation '0' Literal.Number.Integer ']' Punctuation ',' Punctuation ' ' Text 'pcall' Name '[' Punctuation '1' Literal.Number.Integer ']' Punctuation ',' Punctuation ' ' Text 'pcall' Name '[' Punctuation '2' Literal.Number.Integer ']' Punctuation ',' Punctuation ' ' Text 'pcall' Name '[' Punctuation '3' Literal.Number.Integer ']' Punctuation ',' Punctuation '\n' Text '\t\t\t ' Text 'pcall' Name '[' Punctuation '4' Literal.Number.Integer ']' Punctuation ',' Punctuation ' ' Text 'pcall' Name '[' Punctuation '5' Literal.Number.Integer ']' Punctuation ',' Punctuation ' ' Text 'pcall' Name '[' Punctuation '6' Literal.Number.Integer ']' Punctuation ',' Punctuation ' ' Text 'pcall' Name '[' Punctuation '7' Literal.Number.Integer ']' Punctuation ',' Punctuation '\n' Text '\t\t\t ' Text 'pcall' Name '[' Punctuation '8' Literal.Number.Integer ']' Punctuation ',' Punctuation ' ' Text 'pcall' Name '[' Punctuation '9' Literal.Number.Integer ']' Punctuation ')' Punctuation ';' Punctuation '\n' Text '}' Punctuation '\n' Text '#' Comment.Preproc 'else' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PCALL(O)' Comment.Preproc '\n' Comment.Preproc '\n' Text 'PyObject' Name ' ' Text '*' Operator '\n' Text 'PyEval_GetCallStats' Name.Function '(' Punctuation 'PyObject' Name ' ' Text '*' Operator 'self' Name ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'Py_INCREF' Name '(' Punctuation 'Py_None' Name ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'return' Keyword ' ' Text 'Py_None' Name ';' Punctuation '\n' Text '}' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text '\n' Text '#' Comment.Preproc 'ifdef WITH_THREAD' Comment.Preproc '\n' Comment.Preproc '\n' Text '#' Comment.Preproc 'ifdef HAVE_ERRNO_H' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'include' Comment.Preproc ' ' Text '' Comment.PreprocFile '\n' Comment.Preproc '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'include' Comment.Preproc ' ' Text '"pythread.h"' Comment.PreprocFile '\n' Comment.Preproc '\n' Text 'static' Keyword ' ' Text 'PyThread_type_lock' Name ' ' Text 'interpreter_lock' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation ' ' Text '/* This is the GIL */' Comment.Multiline '\n' Text 'static' Keyword ' ' Text 'long' Keyword.Type ' ' Text 'main_thread' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\n' Text 'int' Keyword.Type '\n' Text 'PyEval_ThreadsInitialized' Name.Function '(' Punctuation 'void' Keyword.Type ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'return' Keyword ' ' Text 'interpreter_lock' Name ' ' Text '!' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text 'void' Keyword.Type '\n' Text 'PyEval_InitThreads' Name.Function '(' Punctuation 'void' Keyword.Type ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'interpreter_lock' Name ')' Punctuation '\n' Text '\t\t' Text 'return' Keyword ';' Punctuation '\n' Text '\t' Text 'interpreter_lock' Name ' ' Text '=' Operator ' ' Text 'PyThread_allocate_lock' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'PyThread_acquire_lock' Name '(' Punctuation 'interpreter_lock' Name ',' Punctuation ' ' Text '1' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'main_thread' Name ' ' Text '=' Operator ' ' Text 'PyThread_get_thread_ident' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text 'void' Keyword.Type '\n' Text 'PyEval_AcquireLock' Name.Function '(' Punctuation 'void' Keyword.Type ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'PyThread_acquire_lock' Name '(' Punctuation 'interpreter_lock' Name ',' Punctuation ' ' Text '1' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text 'void' Keyword.Type '\n' Text 'PyEval_ReleaseLock' Name.Function '(' Punctuation 'void' Keyword.Type ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'PyThread_release_lock' Name '(' Punctuation 'interpreter_lock' Name ')' Punctuation ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text 'void' Keyword.Type '\n' Text 'PyEval_AcquireThread' Name.Function '(' Punctuation 'PyThreadState' Name ' ' Text '*' Operator 'tstate' Name ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tstate' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation '\n' Text '\t\t' Text 'Py_FatalError' Name '(' Punctuation '"' Literal.String 'PyEval_AcquireThread: NULL new thread state' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t' Text '/* Check someone has called PyEval_InitThreads() to create the lock */' Comment.Multiline '\n' Text '\t' Text 'assert' Name '(' Punctuation 'interpreter_lock' Name ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'PyThread_acquire_lock' Name '(' Punctuation 'interpreter_lock' Name ',' Punctuation ' ' Text '1' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyThreadState_Swap' Name '(' Punctuation 'tstate' Name ')' Punctuation ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation '\n' Text '\t\t' Text 'Py_FatalError' Name '(' Punctuation '\n' Text '\t\t\t' Text '"' Literal.String 'PyEval_AcquireThread: non-NULL old thread state' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text 'void' Keyword.Type '\n' Text 'PyEval_ReleaseThread' Name.Function '(' Punctuation 'PyThreadState' Name ' ' Text '*' Operator 'tstate' Name ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tstate' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation '\n' Text '\t\t' Text 'Py_FatalError' Name '(' Punctuation '"' Literal.String 'PyEval_ReleaseThread: NULL thread state' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyThreadState_Swap' Name '(' Punctuation 'NULL' Name.Builtin ')' Punctuation ' ' Text '!' Operator '=' Operator ' ' Text 'tstate' Name ')' Punctuation '\n' Text '\t\t' Text 'Py_FatalError' Name '(' Punctuation '"' Literal.String 'PyEval_ReleaseThread: wrong thread state' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'PyThread_release_lock' Name '(' Punctuation 'interpreter_lock' Name ')' Punctuation ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text "/* This function is called from PyOS_AfterFork to ensure that newly\n created child processes don't hold locks referring to threads which\n are not running in the child process. (This could also be done using\n pthread_atfork mechanism, at least for the pthreads implementation.) */" Comment.Multiline '\n' Text '\n' Text 'void' Keyword.Type '\n' Text 'PyEval_ReInitThreads' Name.Function '(' Punctuation 'void' Keyword.Type ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation '!' Operator 'interpreter_lock' Name ')' Punctuation '\n' Text '\t\t' Text 'return' Keyword ';' Punctuation '\n' Text '\t' Text "/*XXX Can't use PyThread_free_lock here because it does too\n\t much error-checking. Doing this cleanly would require\n\t adding a new function to each thread_*.h. Instead, just\n\t create a new lock and waste a little bit of memory */" Comment.Multiline '\n' Text '\t' Text 'interpreter_lock' Name ' ' Text '=' Operator ' ' Text 'PyThread_allocate_lock' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'PyThread_acquire_lock' Name '(' Punctuation 'interpreter_lock' Name ',' Punctuation ' ' Text '1' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'main_thread' Name ' ' Text '=' Operator ' ' Text 'PyThread_get_thread_ident' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '}' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text "/* Functions save_thread and restore_thread are always defined so\n dynamically loaded modules needn't be compiled separately for use\n with and without threads: */" Comment.Multiline '\n' Text '\n' Text 'PyThreadState' Name ' ' Text '*' Operator '\n' Text 'PyEval_SaveThread' Name.Function '(' Punctuation 'void' Keyword.Type ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'PyThreadState' Name ' ' Text '*' Operator 'tstate' Name ' ' Text '=' Operator ' ' Text 'PyThreadState_Swap' Name '(' Punctuation 'NULL' Name.Builtin ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tstate' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation '\n' Text '\t\t' Text 'Py_FatalError' Name '(' Punctuation '"' Literal.String 'PyEval_SaveThread: NULL tstate' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '#' Comment.Preproc 'ifdef WITH_THREAD' Comment.Preproc '\n' Comment.Preproc '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'interpreter_lock' Name ')' Punctuation '\n' Text '\t\t' Text 'PyThread_release_lock' Name '(' Punctuation 'interpreter_lock' Name ')' Punctuation ';' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\t' Text 'return' Keyword ' ' Text 'tstate' Name ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text 'void' Keyword.Type '\n' Text 'PyEval_RestoreThread' Name.Function '(' Punctuation 'PyThreadState' Name ' ' Text '*' Operator 'tstate' Name ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tstate' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation '\n' Text '\t\t' Text 'Py_FatalError' Name '(' Punctuation '"' Literal.String 'PyEval_RestoreThread: NULL tstate' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '#' Comment.Preproc 'ifdef WITH_THREAD' Comment.Preproc '\n' Comment.Preproc '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'interpreter_lock' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t' Text 'int' Keyword.Type ' ' Text 'err' Name ' ' Text '=' Operator ' ' Text 'errno' Name ';' Punctuation '\n' Text '\t\t' Text 'PyThread_acquire_lock' Name '(' Punctuation 'interpreter_lock' Name ',' Punctuation ' ' Text '1' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text 'errno' Name ' ' Text '=' Operator ' ' Text 'err' Name ';' Punctuation '\n' Text '\t' Text '}' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\t' Text 'PyThreadState_Swap' Name '(' Punctuation 'tstate' Name ')' Punctuation ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text '\n' Text '/* Mechanism whereby asynchronously executing callbacks (e.g. UNIX\n signal handlers or Mac I/O completion routines) can schedule calls\n to a function to be called synchronously.\n The synchronous function is called with one void* argument.\n It should return 0 for success or -1 for failure -- failure should\n be accompanied by an exception.\n\n If registry succeeds, the registry function returns 0; if it fails\n (e.g. due to too many pending calls) it returns -1 (without setting\n an exception condition).\n\n Note that because registry may occur from within signal handlers,\n or other asynchronous events, calling malloc() is unsafe!\n\n#ifdef WITH_THREAD\n Any thread can schedule pending calls, but only the main thread\n will execute them.\n#endif\n\n XXX WARNING! ASYNCHRONOUSLY EXECUTING CODE!\n There are two possible race conditions:\n (1) nested asynchronous registry calls;\n (2) registry calls made while pending calls are being processed.\n While (1) is very unlikely, (2) is a real possibility.\n The current code is safe against (2), but not against (1).\n The safety against (2) is derived from the fact that only one\n thread (the main thread) ever takes things out of the queue.\n\n XXX Darn! With the advent of thread state, we should have an array\n of pending calls per thread in the thread state! Later...\n*/' Comment.Multiline '\n' Text '\n' Text '#' Comment.Preproc 'define NPENDINGCALLS 32' Comment.Preproc '\n' Comment.Preproc 'static' Keyword ' ' Text 'struct' Keyword ' ' Text '{' Punctuation '\n' Text '\t' Text 'int' Keyword.Type ' ' Text '(' Punctuation '*' Operator 'func' Name ')' Punctuation '(' Punctuation 'void' Keyword.Type ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'void' Keyword.Type ' ' Text '*' Operator 'arg' Name ';' Punctuation '\n' Text '}' Punctuation ' ' Text 'pendingcalls' Name '[' Punctuation 'NPENDINGCALLS' Name ']' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'volatile' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'pendingfirst' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'volatile' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'pendinglast' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'volatile' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'things_to_do' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\n' Text 'int' Keyword.Type '\n' Text 'Py_AddPendingCall' Name.Function '(' Punctuation 'int' Keyword.Type ' ' Text '(' Punctuation '*' Operator 'func' Name ')' Punctuation '(' Punctuation 'void' Keyword.Type ' ' Text '*' Operator ')' Punctuation ',' Punctuation ' ' Text 'void' Keyword.Type ' ' Text '*' Operator 'arg' Name ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'static' Keyword ' ' Text 'volatile' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'busy' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t' Text 'int' Keyword.Type ' ' Text 'i' Name ',' Punctuation ' ' Text 'j' Name ';' Punctuation '\n' Text '\t' Text '/* XXX Begin critical section */' Comment.Multiline '\n' Text '\t' Text "/* XXX If you want this to be safe against nested\n\t XXX asynchronous calls, you'll have to work harder! */" Comment.Multiline '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'busy' Name ')' Punctuation '\n' Text '\t\t' Text 'return' Keyword ' ' Text '-1' Literal.Number.Integer ';' Punctuation '\n' Text '\t' Text 'busy' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer ';' Punctuation '\n' Text '\t' Text 'i' Name ' ' Text '=' Operator ' ' Text 'pendinglast' Name ';' Punctuation '\n' Text '\t' Text 'j' Name ' ' Text '=' Operator ' ' Text '(' Punctuation 'i' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer ')' Punctuation ' ' Text '%' Operator ' ' Text 'NPENDINGCALLS' Name ';' Punctuation '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'j' Name ' ' Text '=' Operator '=' Operator ' ' Text 'pendingfirst' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t' Text 'busy' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t' Text 'return' Keyword ' ' Text '-1' Literal.Number.Integer ';' Punctuation ' ' Text '/* Queue full */' Comment.Multiline '\n' Text '\t' Text '}' Punctuation '\n' Text '\t' Text 'pendingcalls' Name '[' Punctuation 'i' Name ']' Punctuation '.' Punctuation 'func' Name ' ' Text '=' Operator ' ' Text 'func' Name ';' Punctuation '\n' Text '\t' Text 'pendingcalls' Name '[' Punctuation 'i' Name ']' Punctuation '.' Punctuation 'arg' Name ' ' Text '=' Operator ' ' Text 'arg' Name ';' Punctuation '\n' Text '\t' Text 'pendinglast' Name ' ' Text '=' Operator ' ' Text 'j' Name ';' Punctuation '\n' Text '\n' Text '\t' Text '_Py_Ticker' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t' Text 'things_to_do' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer ';' Punctuation ' ' Text '/* Signal main loop */' Comment.Multiline '\n' Text '\t' Text 'busy' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t' Text '/* XXX End critical section */' Comment.Multiline '\n' Text '\t' Text 'return' Keyword ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text 'int' Keyword.Type '\n' Text 'Py_MakePendingCalls' Name.Function '(' Punctuation 'void' Keyword.Type ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'static' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'busy' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '#' Comment.Preproc 'ifdef WITH_THREAD' Comment.Preproc '\n' Comment.Preproc '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'main_thread' Name ' ' Text '&' Operator '&' Operator ' ' Text 'PyThread_get_thread_ident' Name '(' Punctuation ')' Punctuation ' ' Text '!' Operator '=' Operator ' ' Text 'main_thread' Name ')' Punctuation '\n' Text '\t\t' Text 'return' Keyword ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'busy' Name ')' Punctuation '\n' Text '\t\t' Text 'return' Keyword ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t' Text 'busy' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer ';' Punctuation '\n' Text '\t' Text 'things_to_do' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t' Text 'for' Keyword ' ' Text '(' Punctuation ';' Punctuation ';' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t' Text 'int' Keyword.Type ' ' Text 'i' Name ';' Punctuation '\n' Text '\t\t' Text 'int' Keyword.Type ' ' Text '(' Punctuation '*' Operator 'func' Name ')' Punctuation '(' Punctuation 'void' Keyword.Type ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text 'void' Keyword.Type ' ' Text '*' Operator 'arg' Name ';' Punctuation '\n' Text '\t\t' Text 'i' Name ' ' Text '=' Operator ' ' Text 'pendingfirst' Name ';' Punctuation '\n' Text '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'i' Name ' ' Text '=' Operator '=' Operator ' ' Text 'pendinglast' Name ')' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation ' ' Text '/* Queue empty */' Comment.Multiline '\n' Text '\t\t' Text 'func' Name ' ' Text '=' Operator ' ' Text 'pendingcalls' Name '[' Punctuation 'i' Name ']' Punctuation '.' Punctuation 'func' Name ';' Punctuation '\n' Text '\t\t' Text 'arg' Name ' ' Text '=' Operator ' ' Text 'pendingcalls' Name '[' Punctuation 'i' Name ']' Punctuation '.' Punctuation 'arg' Name ';' Punctuation '\n' Text '\t\t' Text 'pendingfirst' Name ' ' Text '=' Operator ' ' Text '(' Punctuation 'i' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer ')' Punctuation ' ' Text '%' Operator ' ' Text 'NPENDINGCALLS' Name ';' Punctuation '\n' Text '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'func' Name '(' Punctuation 'arg' Name ')' Punctuation ' ' Text '<' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t' Text 'busy' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t\t' Text 'things_to_do' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer ';' Punctuation ' ' Text "/* We're not done yet */" Comment.Multiline '\n' Text '\t\t\t' Text 'return' Keyword ' ' Text '-1' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '\t' Text '}' Punctuation '\n' Text '\t' Text 'busy' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t' Text 'return' Keyword ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text '\n' Text "/* The interpreter's recursion limit */" Comment.Multiline '\n' Text '\n' Text '#' Comment.Preproc 'ifndef Py_DEFAULT_RECURSION_LIMIT' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define Py_DEFAULT_RECURSION_LIMIT 1000' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc 'static' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'recursion_limit' Name ' ' Text '=' Operator ' ' Text 'Py_DEFAULT_RECURSION_LIMIT' Name ';' Punctuation '\n' Text 'int' Keyword.Type ' ' Text '_Py_CheckRecursionLimit' Name ' ' Text '=' Operator ' ' Text 'Py_DEFAULT_RECURSION_LIMIT' Name ';' Punctuation '\n' Text '\n' Text 'int' Keyword.Type '\n' Text 'Py_GetRecursionLimit' Name.Function '(' Punctuation 'void' Keyword.Type ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'return' Keyword ' ' Text 'recursion_limit' Name ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text 'void' Keyword.Type '\n' Text 'Py_SetRecursionLimit' Name.Function '(' Punctuation 'int' Keyword.Type ' ' Text 'new_limit' Name ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'recursion_limit' Name ' ' Text '=' Operator ' ' Text 'new_limit' Name ';' Punctuation '\n' Text ' ' Text '_Py_CheckRecursionLimit' Name ' ' Text '=' Operator ' ' Text 'recursion_limit' Name ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text '/* the macro Py_EnterRecursiveCall() only calls _Py_CheckRecursiveCall()\n if the recursion_depth reaches _Py_CheckRecursionLimit.\n If USE_STACKCHECK, the macro decrements _Py_CheckRecursionLimit\n to guarantee that _Py_CheckRecursiveCall() is regularly called.\n Without USE_STACKCHECK, there is no need for this. */' Comment.Multiline '\n' Text 'int' Keyword.Type '\n' Text '_Py_CheckRecursiveCall' Name.Function '(' Punctuation 'char' Keyword.Type ' ' Text '*' Operator 'where' Name ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text 'PyThreadState' Name ' ' Text '*' Operator 'tstate' Name ' ' Text '=' Operator ' ' Text 'PyThreadState_GET' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\n' Text '#' Comment.Preproc 'ifdef USE_STACKCHECK' Comment.Preproc '\n' Comment.Preproc '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyOS_CheckStack' Name '(' Punctuation ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t' Text '-' Operator '-' Operator 'tstate' Name '-' Operator '>' Operator 'recursion_depth' Name ';' Punctuation '\n' Text '\t\t' Text 'PyErr_SetString' Name '(' Punctuation 'PyExc_MemoryError' Name ',' Punctuation ' ' Text '"' Literal.String 'Stack overflow' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text 'return' Keyword ' ' Text '-1' Literal.Number.Integer ';' Punctuation '\n' Text '\t' Text '}' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'recursion_depth' Name ' ' Text '>' Operator ' ' Text 'recursion_limit' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t' Text '-' Operator '-' Operator 'tstate' Name '-' Operator '>' Operator 'recursion_depth' Name ';' Punctuation '\n' Text '\t\t' Text 'PyErr_Format' Name '(' Punctuation 'PyExc_RuntimeError' Name ',' Punctuation '\n' Text '\t\t\t ' Text '"' Literal.String 'maximum recursion depth exceeded%s' Literal.String '"' Literal.String ',' Punctuation '\n' Text '\t\t\t ' Text 'where' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text 'return' Keyword ' ' Text '-1' Literal.Number.Integer ';' Punctuation '\n' Text '\t' Text '}' Punctuation '\n' Text ' ' Text '_Py_CheckRecursionLimit' Name ' ' Text '=' Operator ' ' Text 'recursion_limit' Name ';' Punctuation '\n' Text '\t' Text 'return' Keyword ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text '/* Status code for main loop (reason for stack unwind) */' Comment.Multiline '\n' Text 'enum' Keyword ' ' Text 'why_code' Name ' ' Text '{' Punctuation '\n' Text '\t\t' Text 'WHY_NOT' Name ' ' Text '=' Operator '\t' Text '0x0001' Literal.Number.Hex ',' Punctuation '\t' Text '/* No error */' Comment.Multiline '\n' Text '\t\t' Text 'WHY_EXCEPTION' Name ' ' Text '=' Operator ' ' Text '0x0002' Literal.Number.Hex ',' Punctuation '\t' Text '/* Exception occurred */' Comment.Multiline '\n' Text '\t\t' Text 'WHY_RERAISE' Name ' ' Text '=' Operator '\t' Text '0x0004' Literal.Number.Hex ',' Punctuation '\t' Text "/* Exception re-raised by 'finally' */" Comment.Multiline '\n' Text '\t\t' Text 'WHY_RETURN' Name ' ' Text '=' Operator '\t' Text '0x0008' Literal.Number.Hex ',' Punctuation '\t' Text "/* 'return' statement */" Comment.Multiline '\n' Text '\t\t' Text 'WHY_BREAK' Name ' ' Text '=' Operator '\t' Text '0x0010' Literal.Number.Hex ',' Punctuation '\t' Text "/* 'break' statement */" Comment.Multiline '\n' Text '\t\t' Text 'WHY_CONTINUE' Name ' ' Text '=' Operator '\t' Text '0x0020' Literal.Number.Hex ',' Punctuation '\t' Text "/* 'continue' statement */" Comment.Multiline '\n' Text '\t\t' Text 'WHY_YIELD' Name ' ' Text '=' Operator '\t' Text '0x0040' Literal.Number.Hex '\t' Text "/* 'yield' operator */" Comment.Multiline '\n' Text '}' Punctuation ';' Punctuation '\n' Text '\n' Text 'static' Keyword ' ' Text 'enum' Keyword ' ' Text 'why_code' Name ' ' Text 'do_raise' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator ')' Punctuation ';' Punctuation '\n' Text 'static' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'unpack_iterable' Name '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ',' Punctuation ' ' Text 'int' Keyword.Type ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator '*' Operator ')' Punctuation ';' Punctuation '\n' Text '\n' Text '/* for manipulating the thread switch and periodic "stuff" - used to be\n per thread, now just a pair o\' globals */' Comment.Multiline '\n' Text 'int' Keyword.Type ' ' Text '_Py_CheckInterval' Name ' ' Text '=' Operator ' ' Text '100' Literal.Number.Integer ';' Punctuation '\n' Text 'volatile' Keyword ' ' Text 'int' Keyword.Type ' ' Text '_Py_Ticker' Name ' ' Text '=' Operator ' ' Text '100' Literal.Number.Integer ';' Punctuation '\n' Text '\n' Text 'PyObject' Name ' ' Text '*' Operator '\n' Text 'PyEval_EvalCode' Name.Function '(' Punctuation 'PyCodeObject' Name ' ' Text '*' Operator 'co' Name ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator 'globals' Name ',' Punctuation ' ' Text 'PyObject' Name ' ' Text '*' Operator 'locals' Name ')' Punctuation '\n' Text '{' Punctuation '\n' Text '\t' Text '/* XXX raise SystemError if globals is NULL */' Comment.Multiline '\n' Text '\t' Text 'return' Keyword ' ' Text 'PyEval_EvalCodeEx' Name '(' Punctuation 'co' Name ',' Punctuation '\n' Text '\t\t\t ' Text 'globals' Name ',' Punctuation ' ' Text 'locals' Name ',' Punctuation '\n' Text '\t\t\t ' Text '(' Punctuation 'PyObject' Name ' ' Text '*' Operator '*' Operator ')' Punctuation 'NULL' Name.Builtin ',' Punctuation ' ' Text '0' Literal.Number.Integer ',' Punctuation '\n' Text '\t\t\t ' Text '(' Punctuation 'PyObject' Name ' ' Text '*' Operator '*' Operator ')' Punctuation 'NULL' Name.Builtin ',' Punctuation ' ' Text '0' Literal.Number.Integer ',' Punctuation '\n' Text '\t\t\t ' Text '(' Punctuation 'PyObject' Name ' ' Text '*' Operator '*' Operator ')' Punctuation 'NULL' Name.Builtin ',' Punctuation ' ' Text '0' Literal.Number.Integer ',' Punctuation '\n' Text '\t\t\t ' Text 'NULL' Name.Builtin ')' Punctuation ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text '\n' Text '/* Interpreter main loop */' Comment.Multiline '\n' Text '\n' Text 'PyObject' Name ' ' Text '*' Operator '\n' Text 'PyEval_EvalFrame' Name.Function '(' Punctuation 'PyFrameObject' Name ' ' Text '*' Operator 'f' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t' Text '/* This is for backward compatibility with extension modules that\n used this API; core interpreter code should call PyEval_EvalFrameEx() */' Comment.Multiline '\n' Text '\t' Text 'return' Keyword ' ' Text 'PyEval_EvalFrameEx' Name '(' Punctuation 'f' Name ',' Punctuation ' ' Text '0' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '}' Punctuation '\n' Text '\n' Text 'PyObject' Name ' ' Text '*' Operator '\n' Text 'PyEval_EvalFrameEx' Name.Function '(' Punctuation 'PyFrameObject' Name ' ' Text '*' Operator 'f' Name ',' Punctuation ' ' Text 'int' Keyword.Type ' ' Text 'throwflag' Name ')' Punctuation '\n' Text '{' Punctuation '\n' Text '#' Comment.Preproc 'ifdef DXPAIRS' Comment.Preproc '\n' Comment.Preproc '\t' Text 'int' Keyword.Type ' ' Text 'lastopcode' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\t' Text 'register' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator '*' Operator 'stack_pointer' Name ';' Punctuation ' ' Text '/* Next free slot in value stack */' Comment.Multiline '\n' Text '\t' Text 'register' Keyword ' ' Text 'unsigned' Keyword.Type ' ' Text 'char' Keyword.Type ' ' Text '*' Operator 'next_instr' Name ';' Punctuation '\n' Text '\t' Text 'register' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'opcode' Name ';' Punctuation '\t' Text '/* Current opcode */' Comment.Multiline '\n' Text '\t' Text 'register' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'oparg' Name ';' Punctuation '\t' Text '/* Current opcode argument, if any */' Comment.Multiline '\n' Text '\t' Text 'register' Keyword ' ' Text 'enum' Keyword ' ' Text 'why_code' Name ' ' Text 'why' Name ';' Punctuation ' ' Text '/* Reason for block stack unwind */' Comment.Multiline '\n' Text '\t' Text 'register' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'err' Name ';' Punctuation '\t' Text '/* Error status -- nonzero if error */' Comment.Multiline '\n' Text '\t' Text 'register' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator 'x' Name ';' Punctuation '\t' Text '/* Result object -- NULL if error */' Comment.Multiline '\n' Text '\t' Text 'register' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator 'v' Name ';' Punctuation '\t' Text '/* Temporary objects popped off stack */' Comment.Multiline '\n' Text '\t' Text 'register' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator 'w' Name ';' Punctuation '\n' Text '\t' Text 'register' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator 'u' Name ';' Punctuation '\n' Text '\t' Text 'register' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator 't' Name ';' Punctuation '\n' Text '\t' Text 'register' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator 'stream' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation ' ' Text '/* for PRINT opcodes */' Comment.Multiline '\n' Text '\t' Text 'register' Keyword ' ' Text 'PyObject' Name ' ' Text '*' Operator '*' Operator 'fastlocals' Name ',' Punctuation ' ' Text '*' Operator '*' Operator 'freevars' Name ';' Punctuation '\n' Text '\t' Text 'PyObject' Name ' ' Text '*' Operator 'retval' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\t' Text '/* Return value */' Comment.Multiline '\n' Text '\t' Text 'PyThreadState' Name ' ' Text '*' Operator 'tstate' Name ' ' Text '=' Operator ' ' Text 'PyThreadState_GET' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'PyCodeObject' Name ' ' Text '*' Operator 'co' Name ';' Punctuation '\n' Text '\n' Text '\t' Text '/* when tracing we set things up so that\n\n not (instr_lb <= current_bytecode_offset < instr_ub)\n\n\t is true when the line being executed has changed. The\n initial values are such as to make this false the first\n time it is tested. */' Comment.Multiline '\n' Text '\t' Text 'int' Keyword.Type ' ' Text 'instr_ub' Name ' ' Text '=' Operator ' ' Text '-1' Literal.Number.Integer ',' Punctuation ' ' Text 'instr_lb' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ',' Punctuation ' ' Text 'instr_prev' Name ' ' Text '=' Operator ' ' Text '-1' Literal.Number.Integer ';' Punctuation '\n' Text '\n' Text '\t' Text 'unsigned' Keyword.Type ' ' Text 'char' Keyword.Type ' ' Text '*' Operator 'first_instr' Name ';' Punctuation '\n' Text '\t' Text 'PyObject' Name ' ' Text '*' Operator 'names' Name ';' Punctuation '\n' Text '\t' Text 'PyObject' Name ' ' Text '*' Operator 'consts' Name ';' Punctuation '\n' Text '#' Comment.Preproc 'if defined(Py_DEBUG) || defined(LLTRACE)' Comment.Preproc '\n' Comment.Preproc '\t' Text '/* Make it easier to find out where we are with a debugger */' Comment.Multiline '\n' Text '\t' Text 'char' Keyword.Type ' ' Text '*' Operator 'filename' Name ';' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text '/* Tuple access macros */' Comment.Multiline '\n' Text '\n' Text '#' Comment.Preproc 'ifndef Py_DEBUG' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define GETITEM(v, i) PyTuple_GET_ITEM((PyTupleObject *)(v), (i))' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'else' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define GETITEM(v, i) PyTuple_GetItem((v), (i))' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text '#' Comment.Preproc 'ifdef WITH_TSC' Comment.Preproc '\n' Comment.Preproc "/* Use Pentium timestamp counter to mark certain events:\n inst0 -- beginning of switch statement for opcode dispatch\n inst1 -- end of switch statement (may be skipped)\n loop0 -- the top of the mainloop\n loop1 -- place where control returns again to top of mainloop\n (may be skipped)\n intr1 -- beginning of long interruption\n intr2 -- end of long interruption\n\n Many opcodes call out to helper C functions. In some cases, the\n time in those functions should be counted towards the time for the\n opcode, but not in all cases. For example, a CALL_FUNCTION opcode\n calls another Python function; there's no point in charge all the\n bytecode executed by the called function to the caller.\n\n It's hard to make a useful judgement statically. In the presence\n of operator overloading, it's impossible to tell if a call will\n execute new Python code or not.\n\n It's a case-by-case judgement. I'll use intr1 for the following\n cases:\n\n EXEC_STMT\n IMPORT_STAR\n IMPORT_FROM\n CALL_FUNCTION (and friends)\n\n */" Comment.Multiline '\n' Text '\t' Text 'uint64' Name ' ' Text 'inst0' Name ',' Punctuation ' ' Text 'inst1' Name ',' Punctuation ' ' Text 'loop0' Name ',' Punctuation ' ' Text 'loop1' Name ',' Punctuation ' ' Text 'intr0' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ',' Punctuation ' ' Text 'intr1' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t' Text 'int' Keyword.Type ' ' Text 'ticked' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\n' Text '\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'inst0' Name ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'inst1' Name ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'loop0' Name ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'loop1' Name ')' Punctuation ';' Punctuation '\n' Text '\n' Text '\t' Text '/* shut up the compiler */' Comment.Multiline '\n' Text '\t' Text 'opcode' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text '/* Code access macros */' Comment.Multiline '\n' Text '\n' Text '#' Comment.Preproc 'define INSTR_OFFSET()\t((int)(next_instr - first_instr))' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define NEXTOP()\t(*next_instr++)' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define NEXTARG()\t(next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PEEKARG()\t((next_instr[2]<<8) + next_instr[1])' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define JUMPTO(x)\t(next_instr = first_instr + (x))' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define JUMPBY(x)\t(next_instr += (x))' Comment.Preproc '\n' Comment.Preproc '\n' Text '/* OpCode prediction macros\n\tSome opcodes tend to come in pairs thus making it possible to predict\n\tthe second code when the first is run. For example, COMPARE_OP is often\n\tfollowed by JUMP_IF_FALSE or JUMP_IF_TRUE. And, those opcodes are often\n\tfollowed by a POP_TOP.\n\n\tVerifying the prediction costs a single high-speed test of register\n\tvariable against a constant. If the pairing was good, then the\n\tprocessor has a high likelihood of making its own successful branch\n\tprediction which results in a nearly zero overhead transition to the\n\tnext opcode.\n\n\tA successful prediction saves a trip through the eval-loop including\n\tits two unpredictable branches, the HASARG test and the switch-case.\n\n If collecting opcode statistics, turn off prediction so that\n\tstatistics are accurately maintained (the predictions bypass\n\tthe opcode frequency counter updates).\n*/' Comment.Multiline '\n' Text '\n' Text '#' Comment.Preproc 'ifdef DYNAMIC_EXECUTION_PROFILE' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PREDICT(op)\t\tif (0) goto PRED_##op' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'else' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PREDICT(op)\t\tif (*next_instr == op) goto PRED_##op' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text '#' Comment.Preproc 'define PREDICTED(op)\t\tPRED_##op: next_instr++' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PREDICTED_WITH_ARG(op)\tPRED_##op: oparg = PEEKARG(); next_instr += 3' Comment.Preproc '\n' Comment.Preproc '\n' Text '/* Stack manipulation macros */' Comment.Multiline '\n' Text '\n' Text '/* The stack can grow at most MAXINT deep, as co_nlocals and\n co_stacksize are ints. */' Comment.Multiline '\n' Text '#' Comment.Preproc 'define STACK_LEVEL()\t((int)(stack_pointer - f->f_valuestack))' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define EMPTY()\t\t(STACK_LEVEL() == 0)' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define TOP()\t\t(stack_pointer[-1])' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define SECOND()\t(stack_pointer[-2])' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define THIRD() \t(stack_pointer[-3])' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define FOURTH()\t(stack_pointer[-4])' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define SET_TOP(v)\t(stack_pointer[-1] = (v))' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define SET_SECOND(v)\t(stack_pointer[-2] = (v))' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define SET_THIRD(v)\t(stack_pointer[-3] = (v))' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define SET_FOURTH(v)\t(stack_pointer[-4] = (v))' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define BASIC_STACKADJ(n)\t(stack_pointer += n)' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define BASIC_PUSH(v)\t(*stack_pointer++ = (v))' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define BASIC_POP()\t(*--stack_pointer)' Comment.Preproc '\n' Comment.Preproc '\n' Text '#' Comment.Preproc 'ifdef LLTRACE' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PUSH(v)\t\t{ (void)(BASIC_PUSH(v), \\' Comment.Preproc '\n' Comment.Preproc ' lltrace && prtrace(TOP(), "push")); \\' Comment.Preproc '\n' Comment.Preproc ' assert(STACK_LEVEL() <= co->co_stacksize); }' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define POP()\t\t((void)(lltrace && prtrace(TOP(), "pop")), BASIC_POP())' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define STACKADJ(n)\t{ (void)(BASIC_STACKADJ(n), \\' Comment.Preproc '\n' Comment.Preproc ' lltrace && prtrace(TOP(), "stackadj")); \\' Comment.Preproc '\n' Comment.Preproc ' assert(STACK_LEVEL() <= co->co_stacksize); }' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define EXT_POP(STACK_POINTER) (lltrace && prtrace(*(STACK_POINTER), "ext_pop"), *--(STACK_POINTER))' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'else' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define PUSH(v)\t\tBASIC_PUSH(v)' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define POP()\t\tBASIC_POP()' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define STACKADJ(n)\tBASIC_STACKADJ(n)' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'define EXT_POP(STACK_POINTER) (*--(STACK_POINTER))' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text '/* Local variable macros */' Comment.Multiline '\n' Text '\n' Text '#' Comment.Preproc 'define GETLOCAL(i)\t(fastlocals[i])' Comment.Preproc '\n' Comment.Preproc '\n' Text '/* The SETLOCAL() macro must not DECREF the local variable in-place and\n then store the new value; it must copy the old value to a temporary\n value, then store the new value, and then DECREF the temporary value.\n This is because it is possible that during the DECREF the frame is\n accessed by other code (e.g. a __del__ method or gc.collect()) and the\n variable would be pointing to already-freed memory. */' Comment.Multiline '\n' Text '#' Comment.Preproc 'define SETLOCAL(i, value)\tdo { PyObject *tmp = GETLOCAL(i); \\' Comment.Preproc '\n' Comment.Preproc '\t\t\t\t GETLOCAL(i) = value; \\' Comment.Preproc '\n' Comment.Preproc ' Py_XDECREF(tmp); } while (0)' Comment.Preproc '\n' Comment.Preproc '\n' Text '/* Start of code */' Comment.Multiline '\n' Text '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'f' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation '\n' Text '\t\t' Text 'return' Keyword ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\n' Text '\t' Text '/* push frame */' Comment.Multiline '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'Py_EnterRecursiveCall' Name '(' Punctuation '"' Literal.String '"' Literal.String ')' Punctuation ')' Punctuation '\n' Text '\t\t' Text 'return' Keyword ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\n' Text '\t' Text 'tstate' Name '-' Operator '>' Operator 'frame' Name ' ' Text '=' Operator ' ' Text 'f' Name ';' Punctuation '\n' Text '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'use_tracing' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'c_tracefunc' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t' Text '/* tstate->c_tracefunc, if defined, is a\n\t\t\t function that will be called on *every* entry\n\t\t\t to a code block. Its return value, if not\n\t\t\t None, is a function that will be called at\n\t\t\t the start of each executed line of code.\n\t\t\t (Actually, the function must return itself\n\t\t\t in order to continue tracing.) The trace\n\t\t\t functions are called with three arguments:\n\t\t\t a pointer to the current frame, a string\n\t\t\t indicating why the function is called, and\n\t\t\t an argument which depends on the situation.\n\t\t\t The global trace function is also called\n\t\t\t whenever an exception is detected. */' Comment.Multiline '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'call_trace' Name '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'c_tracefunc' Name ',' Punctuation ' ' Text 'tstate' Name '-' Operator '>' Operator 'c_traceobj' Name ',' Punctuation '\n' Text '\t\t\t\t ' Text 'f' Name ',' Punctuation ' ' Text 'PyTrace_CALL' Name ',' Punctuation ' ' Text 'Py_None' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text '/* Trace function raised an error */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'goto' Keyword ' ' Text 'exit_eval_frame' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'c_profilefunc' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t' Text '/* Similar for c_profilefunc, except it needn\'t\n\t\t\t return itself and isn\'t called for "line" events */' Comment.Multiline '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'call_trace' Name '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'c_profilefunc' Name ',' Punctuation '\n' Text '\t\t\t\t ' Text 'tstate' Name '-' Operator '>' Operator 'c_profileobj' Name ',' Punctuation '\n' Text '\t\t\t\t ' Text 'f' Name ',' Punctuation ' ' Text 'PyTrace_CALL' Name ',' Punctuation ' ' Text 'Py_None' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text '/* Profile function raised an error */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'goto' Keyword ' ' Text 'exit_eval_frame' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '\t' Text '}' Punctuation '\n' Text '\n' Text '\t' Text 'co' Name ' ' Text '=' Operator ' ' Text 'f' Name '-' Operator '>' Operator 'f_code' Name ';' Punctuation '\n' Text '\t' Text 'names' Name ' ' Text '=' Operator ' ' Text 'co' Name '-' Operator '>' Operator 'co_names' Name ';' Punctuation '\n' Text '\t' Text 'consts' Name ' ' Text '=' Operator ' ' Text 'co' Name '-' Operator '>' Operator 'co_consts' Name ';' Punctuation '\n' Text '\t' Text 'fastlocals' Name ' ' Text '=' Operator ' ' Text 'f' Name '-' Operator '>' Operator 'f_localsplus' Name ';' Punctuation '\n' Text '\t' Text 'freevars' Name ' ' Text '=' Operator ' ' Text 'f' Name '-' Operator '>' Operator 'f_localsplus' Name ' ' Text '+' Operator ' ' Text 'co' Name '-' Operator '>' Operator 'co_nlocals' Name ';' Punctuation '\n' Text '\t' Text 'first_instr' Name ' ' Text '=' Operator ' ' Text '(' Punctuation 'unsigned' Keyword.Type ' ' Text 'char' Keyword.Type '*' Operator ')' Punctuation ' ' Text 'PyString_AS_STRING' Name '(' Punctuation 'co' Name '-' Operator '>' Operator 'co_code' Name ')' Punctuation ';' Punctuation '\n' Text '\t' Text "/* An explanation is in order for the next line.\n\n\t f->f_lasti now refers to the index of the last instruction\n\t executed. You might think this was obvious from the name, but\n\t this wasn't always true before 2.3! PyFrame_New now sets\n\t f->f_lasti to -1 (i.e. the index *before* the first instruction)\n\t and YIELD_VALUE doesn't fiddle with f_lasti any more. So this\n\t does work. Promise. */" Comment.Multiline '\n' Text '\t' Text 'next_instr' Name ' ' Text '=' Operator ' ' Text 'first_instr' Name ' ' Text '+' Operator ' ' Text 'f' Name '-' Operator '>' Operator 'f_lasti' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer ';' Punctuation '\n' Text '\t' Text 'stack_pointer' Name ' ' Text '=' Operator ' ' Text 'f' Name '-' Operator '>' Operator 'f_stacktop' Name ';' Punctuation '\n' Text '\t' Text 'assert' Name '(' Punctuation 'stack_pointer' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'f' Name '-' Operator '>' Operator 'f_stacktop' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\t' Text '/* remains NULL unless yield suspends frame */' Comment.Multiline '\n' Text '\n' Text '#' Comment.Preproc 'ifdef LLTRACE' Comment.Preproc '\n' Comment.Preproc '\t' Text 'lltrace' Name ' ' Text '=' Operator ' ' Text 'PyDict_GetItemString' Name '(' Punctuation 'f' Name '-' Operator '>' Operator 'f_globals' Name ',' Punctuation ' ' Text '"' Literal.String '__lltrace__' Literal.String '"' Literal.String ')' Punctuation ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'if defined(Py_DEBUG) || defined(LLTRACE)' Comment.Preproc '\n' Comment.Preproc '\t' Text 'filename' Name ' ' Text '=' Operator ' ' Text 'PyString_AsString' Name '(' Punctuation 'co' Name '-' Operator '>' Operator 'co_filename' Name ')' Punctuation ';' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text '\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_NOT' Name ';' Punctuation '\n' Text '\t' Text 'err' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'Py_None' Name ';' Punctuation '\t' Text '/* Not a reference, just anything non-NULL */' Comment.Multiline '\n' Text '\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'throwflag' Name ')' Punctuation ' ' Text '{' Punctuation ' ' Text '/* support for generator.throw() */' Comment.Multiline '\n' Text '\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_EXCEPTION' Name ';' Punctuation '\n' Text '\t\t' Text 'goto' Keyword ' ' Text 'on_error' Name ';' Punctuation '\n' Text '\t' Text '}' Punctuation '\n' Text '\n' Text '\t' Text 'for' Keyword ' ' Text '(' Punctuation ';' Punctuation ';' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '#' Comment.Preproc 'ifdef WITH_TSC' Comment.Preproc '\n' Comment.Preproc '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'inst1' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t' Text '/* Almost surely, the opcode executed a break\n\t\t\t or a continue, preventing inst1 from being set\n\t\t\t on the way out of the loop.\n\t\t\t*/' Comment.Multiline '\n' Text '\t\t\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'inst1' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'loop1' Name ' ' Text '=' Operator ' ' Text 'inst1' Name ';' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '\t\t' Text 'dump_tsc' Name '(' Punctuation 'opcode' Name ',' Punctuation ' ' Text 'ticked' Name ',' Punctuation ' ' Text 'inst0' Name ',' Punctuation ' ' Text 'inst1' Name ',' Punctuation ' ' Text 'loop0' Name ',' Punctuation ' ' Text 'loop1' Name ',' Punctuation '\n' Text '\t\t\t ' Text 'intr0' Name ',' Punctuation ' ' Text 'intr1' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text 'ticked' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t' Text 'inst1' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t' Text 'intr0' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t' Text 'intr1' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'loop0' Name ')' Punctuation ';' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\t\t' Text 'assert' Name '(' Punctuation 'stack_pointer' Name ' ' Text '>' Operator '=' Operator ' ' Text 'f' Name '-' Operator '>' Operator 'f_valuestack' Name ')' Punctuation ';' Punctuation ' ' Text '/* else underflow */' Comment.Multiline '\n' Text '\t\t' Text 'assert' Name '(' Punctuation 'STACK_LEVEL' Name '(' Punctuation ')' Punctuation ' ' Text '<' Operator '=' Operator ' ' Text 'co' Name '-' Operator '>' Operator 'co_stacksize' Name ')' Punctuation ';' Punctuation ' ' Text '/* else overflow */' Comment.Multiline '\n' Text '\n' Text '\t\t' Text "/* Do periodic things. Doing this every time through\n\t\t the loop would add too much overhead, so we do it\n\t\t only every Nth instruction. We also do it if\n\t\t ``things_to_do'' is set, i.e. when an asynchronous\n\t\t event needs attention (e.g. a signal handler or\n\t\t async I/O handler); see Py_AddPendingCall() and\n\t\t Py_MakePendingCalls() above. */" Comment.Multiline '\n' Text '\n' Text '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '-' Operator '-' Operator '_Py_Ticker' Name ' ' Text '<' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text ' ' Text 'if' Keyword ' ' Text '(' Punctuation '*' Operator 'next_instr' Name ' ' Text '=' Operator '=' Operator ' ' Text 'SETUP_FINALLY' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text ' ' Text '/* Make the last opcode before\n a try: finally: block uninterruptable. */' Comment.Multiline '\n' Text ' ' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text ' ' Text '}' Punctuation '\n' Text '\t\t\t' Text '_Py_Ticker' Name ' ' Text '=' Operator ' ' Text '_Py_CheckInterval' Name ';' Punctuation '\n' Text '\t\t\t' Text 'tstate' Name '-' Operator '>' Operator 'tick_counter' Name '+' Operator '+' Operator ';' Punctuation '\n' Text '#' Comment.Preproc 'ifdef WITH_TSC' Comment.Preproc '\n' Comment.Preproc '\t\t\t' Text 'ticked' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer ';' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'things_to_do' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'Py_MakePendingCalls' Name '(' Punctuation ')' Punctuation ' ' Text '<' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_EXCEPTION' Name ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'goto' Keyword ' ' Text 'on_error' Name ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'things_to_do' Name ')' Punctuation '\n' Text '\t\t\t\t\t' Text '/* MakePendingCalls() didn\'t succeed.\n\t\t\t\t\t Force early re-execution of this\n\t\t\t\t\t "periodic" code, possibly after\n\t\t\t\t\t a thread switch */' Comment.Multiline '\n' Text '\t\t\t\t\t' Text '_Py_Ticker' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '#' Comment.Preproc 'ifdef WITH_THREAD' Comment.Preproc '\n' Comment.Preproc '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'interpreter_lock' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text '/* Give another thread a chance */' Comment.Multiline '\n' Text '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyThreadState_Swap' Name '(' Punctuation 'NULL' Name.Builtin ')' Punctuation ' ' Text '!' Operator '=' Operator ' ' Text 'tstate' Name ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'Py_FatalError' Name '(' Punctuation '"' Literal.String 'ceval: tstate mix-up' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'PyThread_release_lock' Name '(' Punctuation 'interpreter_lock' Name ')' Punctuation ';' Punctuation '\n' Text '\n' Text '\t\t\t\t' Text '/* Other threads may run now */' Comment.Multiline '\n' Text '\n' Text '\t\t\t\t' Text 'PyThread_acquire_lock' Name '(' Punctuation 'interpreter_lock' Name ',' Punctuation ' ' Text '1' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyThreadState_Swap' Name '(' Punctuation 'tstate' Name ')' Punctuation ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'Py_FatalError' Name '(' Punctuation '"' Literal.String 'ceval: orphan tstate' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\n' Text '\t\t\t\t' Text '/* Check for thread interrupts */' Comment.Multiline '\n' Text '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'async_exc' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'tstate' Name '-' Operator '>' Operator 'async_exc' Name ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'tstate' Name '-' Operator '>' Operator 'async_exc' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'PyErr_SetNone' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_EXCEPTION' Name ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'goto' Keyword ' ' Text 'on_error' Name ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\t\t' Text '}' Punctuation '\n' Text '\n' Text '\t' Text 'fast_next_opcode' Name.Label ':' Punctuation '\n' Text '\t\t' Text 'f' Name '-' Operator '>' Operator 'f_lasti' Name ' ' Text '=' Operator ' ' Text 'INSTR_OFFSET' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\n' Text '\t\t' Text '/* line-by-line tracing support */' Comment.Multiline '\n' Text '\n' Text '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'c_tracefunc' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ' ' Text '&' Operator '&' Operator ' ' Text '!' Operator 'tstate' Name '-' Operator '>' Operator 'tracing' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t' Text '/* see maybe_call_line_trace\n\t\t\t for expository comments */' Comment.Multiline '\n' Text '\t\t\t' Text 'f' Name '-' Operator '>' Operator 'f_stacktop' Name ' ' Text '=' Operator ' ' Text 'stack_pointer' Name ';' Punctuation '\n' Text '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'maybe_call_line_trace' Name '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'c_tracefunc' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t ' Text 'tstate' Name '-' Operator '>' Operator 'c_traceobj' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t ' Text 'f' Name ',' Punctuation ' ' Text '&' Operator 'instr_lb' Name ',' Punctuation ' ' Text '&' Operator 'instr_ub' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t ' Text '&' Operator 'instr_prev' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '/* Reload possibly changed frame fields */' Comment.Multiline '\n' Text '\t\t\t' Text 'JUMPTO' Name '(' Punctuation 'f' Name '-' Operator '>' Operator 'f_lasti' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'f' Name '-' Operator '>' Operator 'f_stacktop' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'stack_pointer' Name ' ' Text '=' Operator ' ' Text 'f' Name '-' Operator '>' Operator 'f_stacktop' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'f' Name '-' Operator '>' Operator 'f_stacktop' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text '/* trace function raised an exception */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'goto' Keyword ' ' Text 'on_error' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '\n' Text '\t\t' Text '/* Extract opcode and argument */' Comment.Multiline '\n' Text '\n' Text '\t\t' Text 'opcode' Name ' ' Text '=' Operator ' ' Text 'NEXTOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text 'oparg' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation ' ' Text "/* allows oparg to be stored in a register because\n\t\t\tit doesn't have to be remembered across a full loop */" Comment.Multiline '\n' Text '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'HAS_ARG' Name '(' Punctuation 'opcode' Name ')' Punctuation ')' Punctuation '\n' Text '\t\t\t' Text 'oparg' Name ' ' Text '=' Operator ' ' Text 'NEXTARG' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t ' Text 'dispatch_opcode' Name.Label ':' Punctuation '\n' Text '#' Comment.Preproc 'ifdef DYNAMIC_EXECUTION_PROFILE' Comment.Preproc '\n' Comment.Preproc '#' Comment.Preproc 'ifdef DXPAIRS' Comment.Preproc '\n' Comment.Preproc '\t\t' Text 'dxpairs' Name '[' Punctuation 'lastopcode' Name ']' Punctuation '[' Punctuation 'opcode' Name ']' Punctuation '+' Operator '+' Operator ';' Punctuation '\n' Text '\t\t' Text 'lastopcode' Name ' ' Text '=' Operator ' ' Text 'opcode' Name ';' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\t\t' Text 'dxp' Name '[' Punctuation 'opcode' Name ']' Punctuation '+' Operator '+' Operator ';' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text '#' Comment.Preproc 'ifdef LLTRACE' Comment.Preproc '\n' Comment.Preproc '\t\t' Text '/* Instruction tracing */' Comment.Multiline '\n' Text '\n' Text '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'lltrace' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'HAS_ARG' Name '(' Punctuation 'opcode' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'printf' Name '(' Punctuation '"' Literal.String '%d: %d, %d' Literal.String '\\n' Literal.String.Escape '"' Literal.String ',' Punctuation '\n' Text '\t\t\t\t ' Text 'f' Name '-' Operator '>' Operator 'f_lasti' Name ',' Punctuation ' ' Text 'opcode' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'printf' Name '(' Punctuation '"' Literal.String '%d: %d' Literal.String '\\n' Literal.String.Escape '"' Literal.String ',' Punctuation '\n' Text '\t\t\t\t ' Text 'f' Name '-' Operator '>' Operator 'f_lasti' Name ',' Punctuation ' ' Text 'opcode' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text '\t\t' Text '/* Main switch on opcode */' Comment.Multiline '\n' Text '\t\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'inst0' Name ')' Punctuation ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'switch' Keyword ' ' Text '(' Punctuation 'opcode' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\n' Text '\t\t' Text '/* BEWARE!\n\t\t It is essential that any operation that fails sets either\n\t\t x to NULL, err to nonzero, or why to anything but WHY_NOT,\n\t\t and that no operation that succeeds does this! */' Comment.Multiline '\n' Text '\n' Text '\t\t' Text '/* case STOP_CODE: this is an error! */' Comment.Multiline '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'NOP' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'LOAD_FAST' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'GETLOCAL' Name '(' Punctuation 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'format_exc_check_arg' Name '(' Punctuation 'PyExc_UnboundLocalError' Name ',' Punctuation '\n' Text '\t\t\t\t' Text 'UNBOUNDLOCAL_ERROR_MSG' Name ',' Punctuation '\n' Text '\t\t\t\t' Text 'PyTuple_GetItem' Name '(' Punctuation 'co' Name '-' Operator '>' Operator 'co_varnames' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'LOAD_CONST' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'GETITEM' Name '(' Punctuation 'consts' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'PREDICTED_WITH_ARG' Name '(' Punctuation 'STORE_FAST' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'STORE_FAST' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SETLOCAL' Name '(' Punctuation 'oparg' Name ',' Punctuation ' ' Text 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'PREDICTED' Name '(' Punctuation 'POP_TOP' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'POP_TOP' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'ROT_TWO' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'SECOND' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_SECOND' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'ROT_THREE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'SECOND' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'THIRD' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_SECOND' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_THIRD' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'ROT_FOUR' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'SECOND' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'THIRD' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'FOURTH' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_SECOND' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_THIRD' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_FOURTH' Name '(' Punctuation 'u' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'DUP_TOP' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'PUSH' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'DUP_TOPX' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'oparg' Name ' ' Text '=' Operator '=' Operator ' ' Text '2' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'SECOND' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'STACKADJ' Name '(' Punctuation '2' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'SET_SECOND' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation ' ' Text 'else' Keyword ' ' Text 'if' Keyword ' ' Text '(' Punctuation 'oparg' Name ' ' Text '=' Operator '=' Operator ' ' Text '3' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'SECOND' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'THIRD' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'STACKADJ' Name '(' Punctuation '3' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'SET_SECOND' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'SET_THIRD' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'Py_FatalError' Name '(' Punctuation '"' Literal.String 'invalid argument to DUP_TOPX' Literal.String '"' Literal.String '\n' Text '\t\t\t\t ' Text '"' Literal.String ' (bytecode corruption?)' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'UNARY_POSITIVE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_Positive' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'UNARY_NEGATIVE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_Negative' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'UNARY_NOT' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyObject_IsTrue' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'Py_True' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'Py_True' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '>' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'Py_False' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'Py_False' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'STACKADJ' Name '(' Punctuation '-1' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'UNARY_CONVERT' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyObject_Repr' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'UNARY_INVERT' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_Invert' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BINARY_POWER' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_Power' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text 'Py_None' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BINARY_MULTIPLY' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_Multiply' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BINARY_DIVIDE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '!' Operator '_Py_QnewFlag' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_Divide' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text '/* -Qnew is in effect:\tfall through to\n\t\t\t BINARY_TRUE_DIVIDE */' Comment.Multiline '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BINARY_TRUE_DIVIDE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_TrueDivide' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BINARY_FLOOR_DIVIDE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_FloorDivide' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BINARY_MODULO' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_Remainder' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BINARY_ADD' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyInt_CheckExact' Name '(' Punctuation 'v' Name ')' Punctuation ' ' Text '&' Operator '&' Operator ' ' Text 'PyInt_CheckExact' Name '(' Punctuation 'w' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text '/* INLINE: int + int */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'register' Keyword ' ' Text 'long' Keyword.Type ' ' Text 'a' Name ',' Punctuation ' ' Text 'b' Name ',' Punctuation ' ' Text 'i' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'a' Name ' ' Text '=' Operator ' ' Text 'PyInt_AS_LONG' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'b' Name ' ' Text '=' Operator ' ' Text 'PyInt_AS_LONG' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'i' Name ' ' Text '=' Operator ' ' Text 'a' Name ' ' Text '+' Operator ' ' Text 'b' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'i' Name '^' Operator 'a' Name ')' Punctuation ' ' Text '<' Operator ' ' Text '0' Literal.Number.Integer ' ' Text '&' Operator '&' Operator ' ' Text '(' Punctuation 'i' Name '^' Operator 'b' Name ')' Punctuation ' ' Text '<' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'goto' Keyword ' ' Text 'slow_add' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyInt_FromLong' Name '(' Punctuation 'i' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text 'if' Keyword ' ' Text '(' Punctuation 'PyString_CheckExact' Name '(' Punctuation 'v' Name ')' Punctuation ' ' Text '&' Operator '&' Operator '\n' Text '\t\t\t\t ' Text 'PyString_CheckExact' Name '(' Punctuation 'w' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'string_concatenate' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text 'f' Name ',' Punctuation ' ' Text 'next_instr' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text '/* string_concatenate consumed the ref to v */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'goto' Keyword ' ' Text 'skip_decref_vx' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text '{' Punctuation '\n' Text '\t\t\t ' Text 'slow_add' Name.Label ':' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_Add' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t ' Text 'skip_decref_vx' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BINARY_SUBTRACT' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyInt_CheckExact' Name '(' Punctuation 'v' Name ')' Punctuation ' ' Text '&' Operator '&' Operator ' ' Text 'PyInt_CheckExact' Name '(' Punctuation 'w' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text '/* INLINE: int - int */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'register' Keyword ' ' Text 'long' Keyword.Type ' ' Text 'a' Name ',' Punctuation ' ' Text 'b' Name ',' Punctuation ' ' Text 'i' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'a' Name ' ' Text '=' Operator ' ' Text 'PyInt_AS_LONG' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'b' Name ' ' Text '=' Operator ' ' Text 'PyInt_AS_LONG' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'i' Name ' ' Text '=' Operator ' ' Text 'a' Name ' ' Text '-' Operator ' ' Text 'b' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'i' Name '^' Operator 'a' Name ')' Punctuation ' ' Text '<' Operator ' ' Text '0' Literal.Number.Integer ' ' Text '&' Operator '&' Operator ' ' Text '(' Punctuation 'i' Name '^' Operator '~' Operator 'b' Name ')' Punctuation ' ' Text '<' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'goto' Keyword ' ' Text 'slow_sub' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyInt_FromLong' Name '(' Punctuation 'i' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text '{' Punctuation '\n' Text '\t\t\t ' Text 'slow_sub' Name.Label ':' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_Subtract' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BINARY_SUBSCR' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyList_CheckExact' Name '(' Punctuation 'v' Name ')' Punctuation ' ' Text '&' Operator '&' Operator ' ' Text 'PyInt_CheckExact' Name '(' Punctuation 'w' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text '/* INLINE: list[int] */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'Py_ssize_t' Name ' ' Text 'i' Name ' ' Text '=' Operator ' ' Text 'PyInt_AsSsize_t' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'i' Name ' ' Text '<' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'i' Name ' ' Text '+' Operator '=' Operator ' ' Text 'PyList_GET_SIZE' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'i' Name ' ' Text '>' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ' ' Text '&' Operator '&' Operator ' ' Text 'i' Name ' ' Text '<' Operator ' ' Text 'PyList_GET_SIZE' Name '(' Punctuation 'v' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyList_GET_ITEM' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'i' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t' Text 'else' Keyword '\n' Text '\t\t\t\t\t' Text 'goto' Keyword ' ' Text 'slow_get' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword '\n' Text '\t\t\t ' Text 'slow_get' Name.Label ':' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyObject_GetItem' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BINARY_LSHIFT' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_Lshift' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BINARY_RSHIFT' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_Rshift' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BINARY_AND' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_And' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BINARY_XOR' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_Xor' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BINARY_OR' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_Or' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'LIST_APPEND' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyList_Append' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'PREDICT' Name '(' Punctuation 'JUMP_ABSOLUTE' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'INPLACE_POWER' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_InPlacePower' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text 'Py_None' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'INPLACE_MULTIPLY' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_InPlaceMultiply' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'INPLACE_DIVIDE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '!' Operator '_Py_QnewFlag' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_InPlaceDivide' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text '/* -Qnew is in effect:\tfall through to\n\t\t\t INPLACE_TRUE_DIVIDE */' Comment.Multiline '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'INPLACE_TRUE_DIVIDE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_InPlaceTrueDivide' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'INPLACE_FLOOR_DIVIDE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_InPlaceFloorDivide' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'INPLACE_MODULO' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_InPlaceRemainder' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'INPLACE_ADD' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyInt_CheckExact' Name '(' Punctuation 'v' Name ')' Punctuation ' ' Text '&' Operator '&' Operator ' ' Text 'PyInt_CheckExact' Name '(' Punctuation 'w' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text '/* INLINE: int + int */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'register' Keyword ' ' Text 'long' Keyword.Type ' ' Text 'a' Name ',' Punctuation ' ' Text 'b' Name ',' Punctuation ' ' Text 'i' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'a' Name ' ' Text '=' Operator ' ' Text 'PyInt_AS_LONG' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'b' Name ' ' Text '=' Operator ' ' Text 'PyInt_AS_LONG' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'i' Name ' ' Text '=' Operator ' ' Text 'a' Name ' ' Text '+' Operator ' ' Text 'b' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'i' Name '^' Operator 'a' Name ')' Punctuation ' ' Text '<' Operator ' ' Text '0' Literal.Number.Integer ' ' Text '&' Operator '&' Operator ' ' Text '(' Punctuation 'i' Name '^' Operator 'b' Name ')' Punctuation ' ' Text '<' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'goto' Keyword ' ' Text 'slow_iadd' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyInt_FromLong' Name '(' Punctuation 'i' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text 'if' Keyword ' ' Text '(' Punctuation 'PyString_CheckExact' Name '(' Punctuation 'v' Name ')' Punctuation ' ' Text '&' Operator '&' Operator '\n' Text '\t\t\t\t ' Text 'PyString_CheckExact' Name '(' Punctuation 'w' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'string_concatenate' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text 'f' Name ',' Punctuation ' ' Text 'next_instr' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text '/* string_concatenate consumed the ref to v */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'goto' Keyword ' ' Text 'skip_decref_v' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text '{' Punctuation '\n' Text '\t\t\t ' Text 'slow_iadd' Name.Label ':' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_InPlaceAdd' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t ' Text 'skip_decref_v' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'INPLACE_SUBTRACT' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyInt_CheckExact' Name '(' Punctuation 'v' Name ')' Punctuation ' ' Text '&' Operator '&' Operator ' ' Text 'PyInt_CheckExact' Name '(' Punctuation 'w' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text '/* INLINE: int - int */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'register' Keyword ' ' Text 'long' Keyword.Type ' ' Text 'a' Name ',' Punctuation ' ' Text 'b' Name ',' Punctuation ' ' Text 'i' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'a' Name ' ' Text '=' Operator ' ' Text 'PyInt_AS_LONG' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'b' Name ' ' Text '=' Operator ' ' Text 'PyInt_AS_LONG' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'i' Name ' ' Text '=' Operator ' ' Text 'a' Name ' ' Text '-' Operator ' ' Text 'b' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'i' Name '^' Operator 'a' Name ')' Punctuation ' ' Text '<' Operator ' ' Text '0' Literal.Number.Integer ' ' Text '&' Operator '&' Operator ' ' Text '(' Punctuation 'i' Name '^' Operator '~' Operator 'b' Name ')' Punctuation ' ' Text '<' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'goto' Keyword ' ' Text 'slow_isub' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyInt_FromLong' Name '(' Punctuation 'i' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text '{' Punctuation '\n' Text '\t\t\t ' Text 'slow_isub' Name.Label ':' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_InPlaceSubtract' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'INPLACE_LSHIFT' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_InPlaceLshift' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'INPLACE_RSHIFT' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_InPlaceRshift' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'INPLACE_AND' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_InPlaceAnd' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'INPLACE_XOR' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_InPlaceXor' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'INPLACE_OR' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyNumber_InPlaceOr' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'SLICE' Name '+' Operator '0' Literal.Number.Integer ':' Operator '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'SLICE' Name '+' Operator '1' Literal.Number.Integer ':' Operator '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'SLICE' Name '+' Operator '2' Literal.Number.Integer ':' Operator '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'SLICE' Name '+' Operator '3' Literal.Number.Integer ':' Operator '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'opcode' Name '-' Operator 'SLICE' Name ')' Punctuation ' ' Text '&' Operator ' ' Text '2' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'opcode' Name '-' Operator 'SLICE' Name ')' Punctuation ' ' Text '&' Operator ' ' Text '1' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'apply_slice' Name '(' Punctuation 'u' Name ',' Punctuation ' ' Text 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'u' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'STORE_SLICE' Name '+' Operator '0' Literal.Number.Integer ':' Operator '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'STORE_SLICE' Name '+' Operator '1' Literal.Number.Integer ':' Operator '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'STORE_SLICE' Name '+' Operator '2' Literal.Number.Integer ':' Operator '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'STORE_SLICE' Name '+' Operator '3' Literal.Number.Integer ':' Operator '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'opcode' Name '-' Operator 'STORE_SLICE' Name ')' Punctuation ' ' Text '&' Operator ' ' Text '2' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'opcode' Name '-' Operator 'STORE_SLICE' Name ')' Punctuation ' ' Text '&' Operator ' ' Text '1' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 't' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'assign_slice' Name '(' Punctuation 'u' Name ',' Punctuation ' ' Text 'v' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text 't' Name ')' Punctuation ';' Punctuation ' ' Text '/* u[v:w] = t */' Comment.Multiline '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 't' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'u' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'DELETE_SLICE' Name '+' Operator '0' Literal.Number.Integer ':' Operator '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'DELETE_SLICE' Name '+' Operator '1' Literal.Number.Integer ':' Operator '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'DELETE_SLICE' Name '+' Operator '2' Literal.Number.Integer ':' Operator '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'DELETE_SLICE' Name '+' Operator '3' Literal.Number.Integer ':' Operator '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'opcode' Name '-' Operator 'DELETE_SLICE' Name ')' Punctuation ' ' Text '&' Operator ' ' Text '2' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'opcode' Name '-' Operator 'DELETE_SLICE' Name ')' Punctuation ' ' Text '&' Operator ' ' Text '1' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'assign_slice' Name '(' Punctuation 'u' Name ',' Punctuation ' ' Text 'v' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ')' Punctuation 'NULL' Name.Builtin ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t\t\t' Text '/* del u[v:w] */' Comment.Multiline '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'u' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'STORE_SUBSCR' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'SECOND' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'THIRD' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'STACKADJ' Name '(' Punctuation '-3' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '/* v[w] = u */' Comment.Multiline '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyObject_SetItem' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text 'u' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'u' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'DELETE_SUBSCR' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'SECOND' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'STACKADJ' Name '(' Punctuation '-2' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '/* del v[w] */' Comment.Multiline '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyObject_DelItem' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'PRINT_EXPR' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'PySys_GetObject' Name '(' Punctuation '"' Literal.String 'displayhook' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'w' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'PyErr_SetString' Name '(' Punctuation 'PyExc_RuntimeError' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t' Text '"' Literal.String 'lost sys.displayhook' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text '-1' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyTuple_Pack' Name '(' Punctuation '1' Literal.Number.Integer ',' Punctuation ' ' Text 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text '-1' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'PyEval_CallObject' Name '(' Punctuation 'w' Name ',' Punctuation ' ' Text 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'w' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text '-1' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'PRINT_ITEM_TO' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'stream' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '/* fall through to PRINT_ITEM */' Comment.Multiline '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'PRINT_ITEM' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'stream' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ' ' Text '|' Operator '|' Operator ' ' Text 'stream' Name ' ' Text '=' Operator '=' Operator ' ' Text 'Py_None' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'PySys_GetObject' Name '(' Punctuation '"' Literal.String 'stdout' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'w' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'PyErr_SetString' Name '(' Punctuation 'PyExc_RuntimeError' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t\t' Text '"' Literal.String 'lost sys.stdout' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text '-1' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text '/* PyFile_SoftSpace() can exececute arbitrary code\n\t\t\t if sys.stdout is an instance with a __getattr__.\n\t\t\t If __getattr__ raises an exception, w will\n\t\t\t be freed, so we need to prevent that temporarily. */' Comment.Multiline '\n' Text '\t\t\t' Text 'Py_XINCREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'w' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ' ' Text '&' Operator '&' Operator ' ' Text 'PyFile_SoftSpace' Name '(' Punctuation 'w' Name ',' Punctuation ' ' Text '0' Literal.Number.Integer ')' Punctuation ')' Punctuation '\n' Text '\t\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyFile_WriteString' Name '(' Punctuation '"' Literal.String ' ' Literal.String '"' Literal.String ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyFile_WriteObject' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text 'Py_PRINT_RAW' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t ' Text '/* XXX move into writeobject() ? */' Comment.Multiline '\n' Text '\t\t\t ' Text 'if' Keyword ' ' Text '(' Punctuation 'PyString_Check' Name '(' Punctuation 'v' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'char' Keyword.Type ' ' Text '*' Operator 's' Name ' ' Text '=' Operator ' ' Text 'PyString_AS_STRING' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_ssize_t' Name ' ' Text 'len' Name ' ' Text '=' Operator ' ' Text 'PyString_GET_SIZE' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'len' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ' ' Text '|' Operator '|' Operator '\n' Text '\t\t\t\t ' Text '!' Operator 'isspace' Name '(' Punctuation 'Py_CHARMASK' Name '(' Punctuation 's' Name '[' Punctuation 'len' Name '-1' Literal.Number.Integer ']' Punctuation ')' Punctuation ')' Punctuation ' ' Text '|' Operator '|' Operator '\n' Text '\t\t\t\t ' Text 's' Name '[' Punctuation 'len' Name '-1' Literal.Number.Integer ']' Punctuation ' ' Text '=' Operator '=' Operator ' ' Text "'" Literal.String.Char ' ' Literal.String.Char "'" Literal.String.Char ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'PyFile_SoftSpace' Name '(' Punctuation 'w' Name ',' Punctuation ' ' Text '1' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t ' Text '}' Punctuation '\n' Text '#' Comment.Preproc 'ifdef Py_USING_UNICODE' Comment.Preproc '\n' Comment.Preproc '\t\t\t ' Text 'else' Keyword ' ' Text 'if' Keyword ' ' Text '(' Punctuation 'PyUnicode_Check' Name '(' Punctuation 'v' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'Py_UNICODE' Name ' ' Text '*' Operator 's' Name ' ' Text '=' Operator ' ' Text 'PyUnicode_AS_UNICODE' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_ssize_t' Name ' ' Text 'len' Name ' ' Text '=' Operator ' ' Text 'PyUnicode_GET_SIZE' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'len' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ' ' Text '|' Operator '|' Operator '\n' Text '\t\t\t\t ' Text '!' Operator 'Py_UNICODE_ISSPACE' Name '(' Punctuation 's' Name '[' Punctuation 'len' Name '-1' Literal.Number.Integer ']' Punctuation ')' Punctuation ' ' Text '|' Operator '|' Operator '\n' Text '\t\t\t\t ' Text 's' Name '[' Punctuation 'len' Name '-1' Literal.Number.Integer ']' Punctuation ' ' Text '=' Operator '=' Operator ' ' Text "'" Literal.String.Char ' ' Literal.String.Char "'" Literal.String.Char ')' Punctuation '\n' Text '\t\t\t\t ' Text 'PyFile_SoftSpace' Name '(' Punctuation 'w' Name ',' Punctuation ' ' Text '1' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t ' Text '}' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\t\t\t ' Text 'else' Keyword '\n' Text '\t\t\t \t' Text 'PyFile_SoftSpace' Name '(' Punctuation 'w' Name ',' Punctuation ' ' Text '1' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'stream' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'stream' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'PRINT_NEWLINE_TO' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'stream' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '/* fall through to PRINT_NEWLINE */' Comment.Multiline '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'PRINT_NEWLINE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'stream' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ' ' Text '|' Operator '|' Operator ' ' Text 'stream' Name ' ' Text '=' Operator '=' Operator ' ' Text 'Py_None' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'PySys_GetObject' Name '(' Punctuation '"' Literal.String 'stdout' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'w' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'PyErr_SetString' Name '(' Punctuation 'PyExc_RuntimeError' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t\t' Text '"' Literal.String 'lost sys.stdout' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'w' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyFile_WriteString' Name '(' Punctuation '"' Literal.String '\\n' Literal.String.Escape '"' Literal.String ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'PyFile_SoftSpace' Name '(' Punctuation 'w' Name ',' Punctuation ' ' Text '0' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'stream' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'stream' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\n' Text '#' Comment.Preproc 'ifdef CASE_TOO_BIG' Comment.Preproc '\n' Comment.Preproc '\t\t' Text 'default' Keyword ':' Operator ' ' Text 'switch' Keyword ' ' Text '(' Punctuation 'opcode' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\t\t' Text 'case' Keyword ' ' Text 'RAISE_VARARGS' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'v' Name ' ' Text '=' Operator ' ' Text 'w' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t' Text 'switch' Keyword ' ' Text '(' Punctuation 'oparg' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t' Text 'case' Keyword ' ' Text '3' Literal.Number.Integer ':' Operator '\n' Text '\t\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation ' ' Text '/* traceback */' Comment.Multiline '\n' Text '\t\t\t\t' Text '/* Fallthrough */' Comment.Multiline '\n' Text '\t\t\t' Text 'case' Keyword ' ' Text '2' Literal.Number.Integer ':' Operator '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation ' ' Text '/* value */' Comment.Multiline '\n' Text '\t\t\t\t' Text '/* Fallthrough */' Comment.Multiline '\n' Text '\t\t\t' Text 'case' Keyword ' ' Text '1' Literal.Number.Integer ':' Operator '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation ' ' Text '/* exc */' Comment.Multiline '\n' Text '\t\t\t' Text 'case' Keyword ' ' Text '0' Literal.Number.Integer ':' Operator ' ' Text '/* Fallthrough */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'do_raise' Name '(' Punctuation 'w' Name ',' Punctuation ' ' Text 'v' Name ',' Punctuation ' ' Text 'u' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'default' Keyword ':' Operator '\n' Text '\t\t\t\t' Text 'PyErr_SetString' Name '(' Punctuation 'PyExc_SystemError' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text '"' Literal.String 'bad RAISE_VARARGS oparg' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_EXCEPTION' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'LOAD_LOCALS' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'x' Name ' ' Text '=' Operator ' ' Text 'f' Name '-' Operator '>' Operator 'f_locals' Name ')' Punctuation ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'PyErr_SetString' Name '(' Punctuation 'PyExc_SystemError' Name ',' Punctuation ' ' Text '"' Literal.String 'no locals' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'RETURN_VALUE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'retval' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_RETURN' Name ';' Punctuation '\n' Text '\t\t\t' Text 'goto' Keyword ' ' Text 'fast_block_end' Name ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'YIELD_VALUE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'retval' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'f' Name '-' Operator '>' Operator 'f_stacktop' Name ' ' Text '=' Operator ' ' Text 'stack_pointer' Name ';' Punctuation '\n' Text '\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_YIELD' Name ';' Punctuation '\n' Text '\t\t\t' Text 'goto' Keyword ' ' Text 'fast_yield' Name ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'EXEC_STMT' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'SECOND' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'THIRD' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'STACKADJ' Name '(' Punctuation '-3' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'intr0' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'exec_statement' Name '(' Punctuation 'f' Name ',' Punctuation ' ' Text 'u' Name ',' Punctuation ' ' Text 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'intr1' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'u' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'POP_BLOCK' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'PyTryBlock' Name ' ' Text '*' Operator 'b' Name ' ' Text '=' Operator ' ' Text 'PyFrame_BlockPop' Name '(' Punctuation 'f' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'while' Keyword ' ' Text '(' Punctuation 'STACK_LEVEL' Name '(' Punctuation ')' Punctuation ' ' Text '>' Operator ' ' Text 'b' Name '-' Operator '>' Operator 'b_level' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'END_FINALLY' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyInt_Check' Name '(' Punctuation 'v' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text '(' Punctuation 'enum' Keyword ' ' Text 'why_code' Name ')' Punctuation ' ' Text 'PyInt_AS_LONG' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'assert' Name '(' Punctuation 'why' Name ' ' Text '!' Operator '=' Operator ' ' Text 'WHY_YIELD' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'why' Name ' ' Text '=' Operator '=' Operator ' ' Text 'WHY_RETURN' Name ' ' Text '|' Operator '|' Operator '\n' Text '\t\t\t\t ' Text 'why' Name ' ' Text '=' Operator '=' Operator ' ' Text 'WHY_CONTINUE' Name ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'retval' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text 'if' Keyword ' ' Text '(' Punctuation 'PyExceptionClass_Check' Name '(' Punctuation 'v' Name ')' Punctuation ' ' Text '|' Operator '|' Operator ' ' Text 'PyString_Check' Name '(' Punctuation 'v' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'PyErr_Restore' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text 'u' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_RERAISE' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text 'if' Keyword ' ' Text '(' Punctuation 'v' Name ' ' Text '!' Operator '=' Operator ' ' Text 'Py_None' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'PyErr_SetString' Name '(' Punctuation 'PyExc_SystemError' Name ',' Punctuation '\n' Text '\t\t\t\t\t' Text '"' Literal.String "'finally' pops bad exception" Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_EXCEPTION' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BUILD_CLASS' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'SECOND' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'THIRD' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'STACKADJ' Name '(' Punctuation '-2' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'build_class' Name '(' Punctuation 'u' Name ',' Punctuation ' ' Text 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'u' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'STORE_NAME' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'GETITEM' Name '(' Punctuation 'names' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'x' Name ' ' Text '=' Operator ' ' Text 'f' Name '-' Operator '>' Operator 'f_locals' Name ')' Punctuation ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyDict_CheckExact' Name '(' Punctuation 'x' Name ')' Punctuation ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyDict_SetItem' Name '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'else' Keyword '\n' Text '\t\t\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyObject_SetItem' Name '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'PyErr_Format' Name '(' Punctuation 'PyExc_SystemError' Name ',' Punctuation '\n' Text '\t\t\t\t ' Text '"' Literal.String 'no locals found when storing %s' Literal.String '"' Literal.String ',' Punctuation '\n' Text '\t\t\t\t ' Text 'PyObject_REPR' Name '(' Punctuation 'w' Name ')' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'DELETE_NAME' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'GETITEM' Name '(' Punctuation 'names' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'x' Name ' ' Text '=' Operator ' ' Text 'f' Name '-' Operator '>' Operator 'f_locals' Name ')' Punctuation ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'err' Name ' ' Text '=' Operator ' ' Text 'PyObject_DelItem' Name '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ')' Punctuation ' ' Text '!' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'format_exc_check_arg' Name '(' Punctuation 'PyExc_NameError' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t\t\t' Text 'NAME_ERROR_MSG' Name ' ' Text ',' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'PyErr_Format' Name '(' Punctuation 'PyExc_SystemError' Name ',' Punctuation '\n' Text '\t\t\t\t ' Text '"' Literal.String 'no locals when deleting %s' Literal.String '"' Literal.String ',' Punctuation '\n' Text '\t\t\t\t ' Text 'PyObject_REPR' Name '(' Punctuation 'w' Name ')' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'PREDICTED_WITH_ARG' Name '(' Punctuation 'UNPACK_SEQUENCE' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'UNPACK_SEQUENCE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyTuple_CheckExact' Name '(' Punctuation 'v' Name ')' Punctuation ' ' Text '&' Operator '&' Operator ' ' Text 'PyTuple_GET_SIZE' Name '(' Punctuation 'v' Name ')' Punctuation ' ' Text '=' Operator '=' Operator ' ' Text 'oparg' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'PyObject' Name ' ' Text '*' Operator '*' Operator 'items' Name ' ' Text '=' Operator ' ' Text '(' Punctuation '(' Punctuation 'PyTupleObject' Name ' ' Text '*' Operator ')' Punctuation 'v' Name ')' Punctuation '-' Operator '>' Operator 'ob_item' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'while' Keyword ' ' Text '(' Punctuation 'oparg' Name '-' Operator '-' Operator ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'items' Name '[' Punctuation 'oparg' Name ']' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation ' ' Text 'else' Keyword ' ' Text 'if' Keyword ' ' Text '(' Punctuation 'PyList_CheckExact' Name '(' Punctuation 'v' Name ')' Punctuation ' ' Text '&' Operator '&' Operator ' ' Text 'PyList_GET_SIZE' Name '(' Punctuation 'v' Name ')' Punctuation ' ' Text '=' Operator '=' Operator ' ' Text 'oparg' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'PyObject' Name ' ' Text '*' Operator '*' Operator 'items' Name ' ' Text '=' Operator ' ' Text '(' Punctuation '(' Punctuation 'PyListObject' Name ' ' Text '*' Operator ')' Punctuation 'v' Name ')' Punctuation '-' Operator '>' Operator 'ob_item' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'while' Keyword ' ' Text '(' Punctuation 'oparg' Name '-' Operator '-' Operator ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'items' Name '[' Punctuation 'oparg' Name ']' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation ' ' Text 'else' Keyword ' ' Text 'if' Keyword ' ' Text '(' Punctuation 'unpack_iterable' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'oparg' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t ' Text 'stack_pointer' Name ' ' Text '+' Operator ' ' Text 'oparg' Name ')' Punctuation ')' Punctuation '\n' Text '\t\t\t\t' Text 'stack_pointer' Name ' ' Text '+' Operator '=' Operator ' ' Text 'oparg' Name ';' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyErr_ExceptionMatches' Name '(' Punctuation 'PyExc_TypeError' Name ')' Punctuation ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'PyErr_SetString' Name '(' Punctuation 'PyExc_TypeError' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t' Text '"' Literal.String 'unpack non-sequence' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_EXCEPTION' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'STORE_ATTR' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'GETITEM' Name '(' Punctuation 'names' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'SECOND' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'STACKADJ' Name '(' Punctuation '-2' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyObject_SetAttr' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text 'u' Name ')' Punctuation ';' Punctuation ' ' Text '/* v.w = u */' Comment.Multiline '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'u' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'DELETE_ATTR' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'GETITEM' Name '(' Punctuation 'names' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyObject_SetAttr' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text '(' Punctuation 'PyObject' Name ' ' Text '*' Operator ')' Punctuation 'NULL' Name.Builtin ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t\t\t' Text '/* del v.w */' Comment.Multiline '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'STORE_GLOBAL' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'GETITEM' Name '(' Punctuation 'names' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyDict_SetItem' Name '(' Punctuation 'f' Name '-' Operator '>' Operator 'f_globals' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'DELETE_GLOBAL' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'GETITEM' Name '(' Punctuation 'names' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'err' Name ' ' Text '=' Operator ' ' Text 'PyDict_DelItem' Name '(' Punctuation 'f' Name '-' Operator '>' Operator 'f_globals' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ')' Punctuation ' ' Text '!' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t' Text 'format_exc_check_arg' Name '(' Punctuation '\n' Text '\t\t\t\t ' Text 'PyExc_NameError' Name ',' Punctuation ' ' Text 'GLOBAL_NAME_ERROR_MSG' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'LOAD_NAME' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'GETITEM' Name '(' Punctuation 'names' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'v' Name ' ' Text '=' Operator ' ' Text 'f' Name '-' Operator '>' Operator 'f_locals' Name ')' Punctuation ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'PyErr_Format' Name '(' Punctuation 'PyExc_SystemError' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text '"' Literal.String 'no locals when loading %s' Literal.String '"' Literal.String ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'PyObject_REPR' Name '(' Punctuation 'w' Name ')' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyDict_CheckExact' Name '(' Punctuation 'v' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyDict_GetItem' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_XINCREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyObject_GetItem' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ' ' Text '&' Operator '&' Operator ' ' Text 'PyErr_Occurred' Name '(' Punctuation ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '!' Operator 'PyErr_ExceptionMatches' Name '(' Punctuation 'PyExc_KeyError' Name ')' Punctuation ')' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'PyErr_Clear' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyDict_GetItem' Name '(' Punctuation 'f' Name '-' Operator '>' Operator 'f_globals' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyDict_GetItem' Name '(' Punctuation 'f' Name '-' Operator '>' Operator 'f_builtins' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'format_exc_check_arg' Name '(' Punctuation '\n' Text '\t\t\t\t\t\t\t ' Text 'PyExc_NameError' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t\t ' Text 'NAME_ERROR_MSG' Name ' ' Text ',' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'LOAD_GLOBAL' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'GETITEM' Name '(' Punctuation 'names' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyString_CheckExact' Name '(' Punctuation 'w' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text '/* Inline the PyDict_GetItem() calls.\n\t\t\t\t WARNING: this is an extreme speed hack.\n\t\t\t\t Do not try this at home. */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'long' Keyword.Type ' ' Text 'hash' Name ' ' Text '=' Operator ' ' Text '(' Punctuation '(' Punctuation 'PyStringObject' Name ' ' Text '*' Operator ')' Punctuation 'w' Name ')' Punctuation '-' Operator '>' Operator 'ob_shash' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'hash' Name ' ' Text '!' Operator '=' Operator ' ' Text '-1' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'PyDictObject' Name ' ' Text '*' Operator 'd' Name ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'PyDictEntry' Name ' ' Text '*' Operator 'e' Name ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'd' Name ' ' Text '=' Operator ' ' Text '(' Punctuation 'PyDictObject' Name ' ' Text '*' Operator ')' Punctuation '(' Punctuation 'f' Name '-' Operator '>' Operator 'f_globals' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'e' Name ' ' Text '=' Operator ' ' Text 'd' Name '-' Operator '>' Operator 'ma_lookup' Name '(' Punctuation 'd' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text 'hash' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'e' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'e' Name '-' Operator '>' Operator 'me_value' Name ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t\t' Text 'd' Name ' ' Text '=' Operator ' ' Text '(' Punctuation 'PyDictObject' Name ' ' Text '*' Operator ')' Punctuation '(' Punctuation 'f' Name '-' Operator '>' Operator 'f_builtins' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'e' Name ' ' Text '=' Operator ' ' Text 'd' Name '-' Operator '>' Operator 'ma_lookup' Name '(' Punctuation 'd' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text 'hash' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'e' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'e' Name '-' Operator '>' Operator 'me_value' Name ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t\t' Text 'goto' Keyword ' ' Text 'load_global_error' Name ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text '/* This is the un-inlined version of the code above */' Comment.Multiline '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyDict_GetItem' Name '(' Punctuation 'f' Name '-' Operator '>' Operator 'f_globals' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyDict_GetItem' Name '(' Punctuation 'f' Name '-' Operator '>' Operator 'f_builtins' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t ' Text 'load_global_error' Name.Label ':' Punctuation '\n' Text '\t\t\t\t\t' Text 'format_exc_check_arg' Name '(' Punctuation '\n' Text '\t\t\t\t\t\t ' Text 'PyExc_NameError' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t ' Text 'GLOBAL_NAME_ERROR_MSG' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'DELETE_FAST' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'GETLOCAL' Name '(' Punctuation 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'SETLOCAL' Name '(' Punctuation 'oparg' Name ',' Punctuation ' ' Text 'NULL' Name.Builtin ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'format_exc_check_arg' Name '(' Punctuation '\n' Text '\t\t\t\t' Text 'PyExc_UnboundLocalError' Name ',' Punctuation '\n' Text '\t\t\t\t' Text 'UNBOUNDLOCAL_ERROR_MSG' Name ',' Punctuation '\n' Text '\t\t\t\t' Text 'PyTuple_GetItem' Name '(' Punctuation 'co' Name '-' Operator '>' Operator 'co_varnames' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation '\n' Text '\t\t\t\t' Text ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'LOAD_CLOSURE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'freevars' Name '[' Punctuation 'oparg' Name ']' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'LOAD_DEREF' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'freevars' Name '[' Punctuation 'oparg' Name ']' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'PyCell_Get' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'w' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text '-1' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t\t' Text "/* Don't stomp existing exception */" Comment.Multiline '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyErr_Occurred' Name '(' Punctuation ')' Punctuation ')' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'oparg' Name ' ' Text '<' Operator ' ' Text 'PyTuple_GET_SIZE' Name '(' Punctuation 'co' Name '-' Operator '>' Operator 'co_cellvars' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'PyTuple_GET_ITEM' Name '(' Punctuation 'co' Name '-' Operator '>' Operator 'co_cellvars' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t ' Text 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t ' Text 'format_exc_check_arg' Name '(' Punctuation '\n' Text '\t\t\t\t ' Text 'PyExc_UnboundLocalError' Name ',' Punctuation '\n' Text '\t\t\t\t ' Text 'UNBOUNDLOCAL_ERROR_MSG' Name ',' Punctuation '\n' Text '\t\t\t\t ' Text 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation ' ' Text 'else' Keyword ' ' Text '{' Punctuation '\n' Text '\t\t\t ' Text 'v' Name ' ' Text '=' Operator ' ' Text 'PyTuple_GET_ITEM' Name '(' Punctuation '\n' Text '\t\t\t\t\t ' Text 'co' Name '-' Operator '>' Operator 'co_freevars' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'oparg' Name ' ' Text '-' Operator ' ' Text 'PyTuple_GET_SIZE' Name '(' Punctuation 'co' Name '-' Operator '>' Operator 'co_cellvars' Name ')' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t ' Text 'format_exc_check_arg' Name '(' Punctuation '\n' Text '\t\t\t\t ' Text 'PyExc_NameError' Name ',' Punctuation '\n' Text '\t\t\t\t ' Text 'UNBOUNDFREE_ERROR_MSG' Name ',' Punctuation '\n' Text '\t\t\t\t ' Text 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'STORE_DEREF' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'freevars' Name '[' Punctuation 'oparg' Name ']' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'PyCell_Set' Name '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BUILD_TUPLE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyTuple_New' Name '(' Punctuation 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'for' Keyword ' ' Text '(' Punctuation ';' Punctuation ' ' Text '-' Operator '-' Operator 'oparg' Name ' ' Text '>' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'PyTuple_SET_ITEM' Name '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'oparg' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BUILD_LIST' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyList_New' Name '(' Punctuation 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'for' Keyword ' ' Text '(' Punctuation ';' Punctuation ' ' Text '-' Operator '-' Operator 'oparg' Name ' ' Text '>' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'PyList_SET_ITEM' Name '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'oparg' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BUILD_MAP' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyDict_New' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'LOAD_ATTR' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'GETITEM' Name '(' Punctuation 'names' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyObject_GetAttr' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'COMPARE_OP' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyInt_CheckExact' Name '(' Punctuation 'w' Name ')' Punctuation ' ' Text '&' Operator '&' Operator ' ' Text 'PyInt_CheckExact' Name '(' Punctuation 'v' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text '/* INLINE: cmp(int, int) */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'register' Keyword ' ' Text 'long' Keyword.Type ' ' Text 'a' Name ',' Punctuation ' ' Text 'b' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'register' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'res' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'a' Name ' ' Text '=' Operator ' ' Text 'PyInt_AS_LONG' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'b' Name ' ' Text '=' Operator ' ' Text 'PyInt_AS_LONG' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'switch' Keyword ' ' Text '(' Punctuation 'oparg' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'case' Keyword ' ' Text 'PyCmp_LT' Name.Label ':' Punctuation ' ' Text 'res' Name ' ' Text '=' Operator ' ' Text 'a' Name ' ' Text '<' Operator ' ' Text 'b' Name ';' Punctuation ' ' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t' Text 'case' Keyword ' ' Text 'PyCmp_LE' Name.Label ':' Punctuation ' ' Text 'res' Name ' ' Text '=' Operator ' ' Text 'a' Name ' ' Text '<' Operator '=' Operator ' ' Text 'b' Name ';' Punctuation ' ' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t' Text 'case' Keyword ' ' Text 'PyCmp_EQ' Name.Label ':' Punctuation ' ' Text 'res' Name ' ' Text '=' Operator ' ' Text 'a' Name ' ' Text '=' Operator '=' Operator ' ' Text 'b' Name ';' Punctuation ' ' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t' Text 'case' Keyword ' ' Text 'PyCmp_NE' Name.Label ':' Punctuation ' ' Text 'res' Name ' ' Text '=' Operator ' ' Text 'a' Name ' ' Text '!' Operator '=' Operator ' ' Text 'b' Name ';' Punctuation ' ' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t' Text 'case' Keyword ' ' Text 'PyCmp_GT' Name.Label ':' Punctuation ' ' Text 'res' Name ' ' Text '=' Operator ' ' Text 'a' Name ' ' Text '>' Operator ' ' Text 'b' Name ';' Punctuation ' ' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t' Text 'case' Keyword ' ' Text 'PyCmp_GE' Name.Label ':' Punctuation ' ' Text 'res' Name ' ' Text '=' Operator ' ' Text 'a' Name ' ' Text '>' Operator '=' Operator ' ' Text 'b' Name ';' Punctuation ' ' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t' Text 'case' Keyword ' ' Text 'PyCmp_IS' Name.Label ':' Punctuation ' ' Text 'res' Name ' ' Text '=' Operator ' ' Text 'v' Name ' ' Text '=' Operator '=' Operator ' ' Text 'w' Name ';' Punctuation ' ' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t' Text 'case' Keyword ' ' Text 'PyCmp_IS_NOT' Name.Label ':' Punctuation ' ' Text 'res' Name ' ' Text '=' Operator ' ' Text 'v' Name ' ' Text '!' Operator '=' Operator ' ' Text 'w' Name ';' Punctuation ' ' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t' Text 'default' Keyword ':' Operator ' ' Text 'goto' Keyword ' ' Text 'slow_compare' Name ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'res' Name ' ' Text '?' Operator ' ' Text 'Py_True' Name.Label ' ' Text ':' Punctuation ' ' Text 'Py_False' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text '{' Punctuation '\n' Text '\t\t\t ' Text 'slow_compare' Name.Label ':' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'cmp_outcome' Name '(' Punctuation 'oparg' Name ',' Punctuation ' ' Text 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'PREDICT' Name '(' Punctuation 'JUMP_IF_FALSE' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'PREDICT' Name '(' Punctuation 'JUMP_IF_TRUE' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'IMPORT_NAME' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'GETITEM' Name '(' Punctuation 'names' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyDict_GetItemString' Name '(' Punctuation 'f' Name '-' Operator '>' Operator 'f_builtins' Name ',' Punctuation ' ' Text '"' Literal.String '__import__' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'PyErr_SetString' Name '(' Punctuation 'PyExc_ImportError' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t' Text '"' Literal.String '__import__ not found' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyInt_AsLong' Name '(' Punctuation 'u' Name ')' Punctuation ' ' Text '!' Operator '=' Operator ' ' Text '-1' Literal.Number.Integer ' ' Text '|' Operator '|' Operator ' ' Text 'PyErr_Occurred' Name '(' Punctuation ')' Punctuation ')' Punctuation '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'PyTuple_Pack' Name '(' Punctuation '5' Literal.Number.Integer ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'w' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'f' Name '-' Operator '>' Operator 'f_globals' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'f' Name '-' Operator '>' Operator 'f_locals' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ' ' Text '?' Operator '\n' Text '\t\t\t\t\t\t ' Text 'Py_None' Name.Label ' ' Text ':' Punctuation ' ' Text 'f' Name '-' Operator '>' Operator 'f_locals' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'v' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'u' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'PyTuple_Pack' Name '(' Punctuation '4' Literal.Number.Integer ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'w' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'f' Name '-' Operator '>' Operator 'f_globals' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'f' Name '-' Operator '>' Operator 'f_locals' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ' ' Text '?' Operator '\n' Text '\t\t\t\t\t\t ' Text 'Py_None' Name.Label ' ' Text ':' Punctuation ' ' Text 'f' Name '-' Operator '>' Operator 'f_locals' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'u' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'w' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'intr0' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyEval_CallObject' Name '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'intr1' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'IMPORT_STAR' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'PyFrame_FastToLocals' Name '(' Punctuation 'f' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '(' Punctuation 'x' Name ' ' Text '=' Operator ' ' Text 'f' Name '-' Operator '>' Operator 'f_locals' Name ')' Punctuation ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'PyErr_SetString' Name '(' Punctuation 'PyExc_SystemError' Name ',' Punctuation '\n' Text '\t\t\t\t\t' Text '"' Literal.String "no locals found during 'import *'" Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'intr0' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'import_all_from' Name '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'intr1' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'PyFrame_LocalsToFast' Name '(' Punctuation 'f' Name ',' Punctuation ' ' Text '0' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'IMPORT_FROM' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'GETITEM' Name '(' Punctuation 'names' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'intr0' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'import_from' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'intr1' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'JUMP_FORWARD' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'JUMPBY' Name '(' Punctuation 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'PREDICTED_WITH_ARG' Name '(' Punctuation 'JUMP_IF_FALSE' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'JUMP_IF_FALSE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'w' Name ' ' Text '=' Operator '=' Operator ' ' Text 'Py_True' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'PREDICT' Name '(' Punctuation 'POP_TOP' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'w' Name ' ' Text '=' Operator '=' Operator ' ' Text 'Py_False' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'JUMPBY' Name '(' Punctuation 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyObject_IsTrue' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '>' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t' Text 'JUMPBY' Name '(' Punctuation 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'PREDICTED_WITH_ARG' Name '(' Punctuation 'JUMP_IF_TRUE' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'JUMP_IF_TRUE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'w' Name ' ' Text '=' Operator '=' Operator ' ' Text 'Py_False' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'PREDICT' Name '(' Punctuation 'POP_TOP' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'w' Name ' ' Text '=' Operator '=' Operator ' ' Text 'Py_True' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'JUMPBY' Name '(' Punctuation 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'goto' Keyword ' ' Text 'fast_next_opcode' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyObject_IsTrue' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '>' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t\t\t' Text 'JUMPBY' Name '(' Punctuation 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t' Text ';' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'PREDICTED_WITH_ARG' Name '(' Punctuation 'JUMP_ABSOLUTE' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'JUMP_ABSOLUTE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'JUMPTO' Name '(' Punctuation 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'GET_ITER' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text '/* before: [obj]; after [getiter(obj)] */' Comment.Multiline '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyObject_GetIter' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'PREDICT' Name '(' Punctuation 'FOR_ITER' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'STACKADJ' Name '(' Punctuation '-1' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'PREDICTED_WITH_ARG' Name '(' Punctuation 'FOR_ITER' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'FOR_ITER' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text '/* before: [iter]; after: [iter, iter()] *or* [] */' Comment.Multiline '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text '(' Punctuation '*' Operator 'v' Name '-' Operator '>' Operator 'ob_type' Name '-' Operator '>' Operator 'tp_iternext' Name ')' Punctuation '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'PREDICT' Name '(' Punctuation 'STORE_FAST' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'PREDICT' Name '(' Punctuation 'UNPACK_SEQUENCE' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyErr_Occurred' Name '(' Punctuation ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '!' Operator 'PyErr_ExceptionMatches' Name '(' Punctuation 'PyExc_StopIteration' Name ')' Punctuation ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t' Text 'PyErr_Clear' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text '/* iterator ended normally */' Comment.Multiline '\n' Text ' \t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'JUMPBY' Name '(' Punctuation 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BREAK_LOOP' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_BREAK' Name ';' Punctuation '\n' Text '\t\t\t' Text 'goto' Keyword ' ' Text 'fast_block_end' Name ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'CONTINUE_LOOP' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'retval' Name ' ' Text '=' Operator ' ' Text 'PyInt_FromLong' Name '(' Punctuation 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '!' Operator 'retval' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_CONTINUE' Name ';' Punctuation '\n' Text '\t\t\t' Text 'goto' Keyword ' ' Text 'fast_block_end' Name ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'SETUP_LOOP' Name.Label ':' Punctuation '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'SETUP_EXCEPT' Name.Label ':' Punctuation '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'SETUP_FINALLY' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text '/* NOTE: If you add any new block-setup opcodes that are not try/except/finally\n\t\t\t handlers, you may need to update the PyGen_NeedsFinalizing() function. */' Comment.Multiline '\n' Text '\n' Text '\t\t\t' Text 'PyFrame_BlockSetup' Name '(' Punctuation 'f' Name ',' Punctuation ' ' Text 'opcode' Name ',' Punctuation ' ' Text 'INSTR_OFFSET' Name '(' Punctuation ')' Punctuation ' ' Text '+' Operator ' ' Text 'oparg' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'STACK_LEVEL' Name '(' Punctuation ')' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'WITH_CLEANUP' Name.Label ':' Punctuation '\n' Text '\t\t' Text '{' Punctuation '\n' Text '\t\t\t' Text '/* TOP is the context.__exit__ bound method.\n\t\t\t Below that are 1-3 values indicating how/why\n\t\t\t we entered the finally clause:\n\t\t\t - SECOND = None\n\t\t\t - (SECOND, THIRD) = (WHY_{RETURN,CONTINUE}), retval\n\t\t\t - SECOND = WHY_*; no retval below it\n\t\t\t - (SECOND, THIRD, FOURTH) = exc_info()\n\t\t\t In the last case, we must call\n\t\t\t TOP(SECOND, THIRD, FOURTH)\n\t\t\t otherwise we must call\n\t\t\t TOP(None, None, None)\n\n\t\t\t In addition, if the stack represents an exception,\n\t\t\t *and* the function call returns a \'true\' value, we\n\t\t\t "zap" this information, to prevent END_FINALLY from\n\t\t\t re-raising the exception. (But non-local gotos\n\t\t\t should still be resumed.)\n\t\t\t*/' Comment.Multiline '\n' Text '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'SECOND' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyInt_Check' Name '(' Punctuation 'u' Name ')' Punctuation ' ' Text '|' Operator '|' Operator ' ' Text 'u' Name ' ' Text '=' Operator '=' Operator ' ' Text 'Py_None' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'v' Name ' ' Text '=' Operator ' ' Text 'w' Name ' ' Text '=' Operator ' ' Text 'Py_None' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'THIRD' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'FOURTH' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text '/* XXX Not the fastest way to call it... */' Comment.Multiline '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyObject_CallFunctionObjArgs' Name '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'u' Name ',' Punctuation ' ' Text 'v' Name ',' Punctuation ' ' Text 'w' Name ',' Punctuation ' ' Text 'NULL' Name.Builtin ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation ' ' Text '/* Go to error exit */' Comment.Multiline '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'u' Name ' ' Text '!' Operator '=' Operator ' ' Text 'Py_None' Name ' ' Text '&' Operator '&' Operator ' ' Text 'PyObject_IsTrue' Name '(' Punctuation 'x' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text '/* There was an exception and a true return */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation ' ' Text '/* Again */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'STACKADJ' Name '(' Punctuation '-3' Literal.Number.Integer ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'Py_None' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'Py_None' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'u' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation ' ' Text 'else' Keyword ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text '/* Let END_FINALLY do its thing */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'CALL_FUNCTION' Name.Label ':' Punctuation '\n' Text '\t\t' Text '{' Punctuation '\n' Text '\t\t\t' Text 'PyObject' Name ' ' Text '*' Operator '*' Operator 'sp' Name ';' Punctuation '\n' Text '\t\t\t' Text 'PCALL' Name '(' Punctuation 'PCALL_ALL' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'sp' Name ' ' Text '=' Operator ' ' Text 'stack_pointer' Name ';' Punctuation '\n' Text '#' Comment.Preproc 'ifdef WITH_TSC' Comment.Preproc '\n' Comment.Preproc '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'call_function' Name '(' Punctuation '&' Operator 'sp' Name ',' Punctuation ' ' Text 'oparg' Name ',' Punctuation ' ' Text '&' Operator 'intr0' Name ',' Punctuation ' ' Text '&' Operator 'intr1' Name ')' Punctuation ';' Punctuation '\n' Text '#' Comment.Preproc 'else' Comment.Preproc '\n' Comment.Preproc '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'call_function' Name '(' Punctuation '&' Operator 'sp' Name ',' Punctuation ' ' Text 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\t\t\t' Text 'stack_pointer' Name ' ' Text '=' Operator ' ' Text 'sp' Name ';' Punctuation '\n' Text '\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation '\n' Text '\t\t\t\t' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'CALL_FUNCTION_VAR' Name.Label ':' Punctuation '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'CALL_FUNCTION_KW' Name.Label ':' Punctuation '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'CALL_FUNCTION_VAR_KW' Name.Label ':' Punctuation '\n' Text '\t\t' Text '{' Punctuation '\n' Text '\t\t ' Text 'int' Keyword.Type ' ' Text 'na' Name ' ' Text '=' Operator ' ' Text 'oparg' Name ' ' Text '&' Operator ' ' Text '0xff' Literal.Number.Hex ';' Punctuation '\n' Text '\t\t ' Text 'int' Keyword.Type ' ' Text 'nk' Name ' ' Text '=' Operator ' ' Text '(' Punctuation 'oparg' Name '>' Operator '>' Operator '8' Literal.Number.Integer ')' Punctuation ' ' Text '&' Operator ' ' Text '0xff' Literal.Number.Hex ';' Punctuation '\n' Text '\t\t ' Text 'int' Keyword.Type ' ' Text 'flags' Name ' ' Text '=' Operator ' ' Text '(' Punctuation 'opcode' Name ' ' Text '-' Operator ' ' Text 'CALL_FUNCTION' Name ')' Punctuation ' ' Text '&' Operator ' ' Text '3' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t ' Text 'int' Keyword.Type ' ' Text 'n' Name ' ' Text '=' Operator ' ' Text 'na' Name ' ' Text '+' Operator ' ' Text '2' Literal.Number.Integer ' ' Text '*' Operator ' ' Text 'nk' Name ';' Punctuation '\n' Text '\t\t ' Text 'PyObject' Name ' ' Text '*' Operator '*' Operator 'pfunc' Name ',' Punctuation ' ' Text '*' Operator 'func' Name ',' Punctuation ' ' Text '*' Operator '*' Operator 'sp' Name ';' Punctuation '\n' Text '\t\t ' Text 'PCALL' Name '(' Punctuation 'PCALL_ALL' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t ' Text 'if' Keyword ' ' Text '(' Punctuation 'flags' Name ' ' Text '&' Operator ' ' Text 'CALL_FLAG_VAR' Name ')' Punctuation '\n' Text '\t\t\t ' Text 'n' Name '+' Operator '+' Operator ';' Punctuation '\n' Text '\t\t ' Text 'if' Keyword ' ' Text '(' Punctuation 'flags' Name ' ' Text '&' Operator ' ' Text 'CALL_FLAG_KW' Name ')' Punctuation '\n' Text '\t\t\t ' Text 'n' Name '+' Operator '+' Operator ';' Punctuation '\n' Text '\t\t ' Text 'pfunc' Name ' ' Text '=' Operator ' ' Text 'stack_pointer' Name ' ' Text '-' Operator ' ' Text 'n' Name ' ' Text '-' Operator ' ' Text '1' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t ' Text 'func' Name ' ' Text '=' Operator ' ' Text '*' Operator 'pfunc' Name ';' Punctuation '\n' Text '\n' Text '\t\t ' Text 'if' Keyword ' ' Text '(' Punctuation 'PyMethod_Check' Name '(' Punctuation 'func' Name ')' Punctuation '\n' Text '\t\t\t' Text '&' Operator '&' Operator ' ' Text 'PyMethod_GET_SELF' Name '(' Punctuation 'func' Name ')' Punctuation ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t ' Text 'PyObject' Name ' ' Text '*' Operator 'self' Name ' ' Text '=' Operator ' ' Text 'PyMethod_GET_SELF' Name '(' Punctuation 'func' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t ' Text 'Py_INCREF' Name '(' Punctuation 'self' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t ' Text 'func' Name ' ' Text '=' Operator ' ' Text 'PyMethod_GET_FUNCTION' Name '(' Punctuation 'func' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t ' Text 'Py_INCREF' Name '(' Punctuation 'func' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t ' Text 'Py_DECREF' Name '(' Punctuation '*' Operator 'pfunc' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t ' Text '*' Operator 'pfunc' Name ' ' Text '=' Operator ' ' Text 'self' Name ';' Punctuation '\n' Text '\t\t\t ' Text 'na' Name '+' Operator '+' Operator ';' Punctuation '\n' Text '\t\t\t ' Text 'n' Name '+' Operator '+' Operator ';' Punctuation '\n' Text '\t\t ' Text '}' Punctuation ' ' Text 'else' Keyword '\n' Text '\t\t\t ' Text 'Py_INCREF' Name '(' Punctuation 'func' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t ' Text 'sp' Name ' ' Text '=' Operator ' ' Text 'stack_pointer' Name ';' Punctuation '\n' Text '\t\t ' Text 'READ_TIMESTAMP' Name '(' Punctuation 'intr0' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t ' Text 'x' Name ' ' Text '=' Operator ' ' Text 'ext_do_call' Name '(' Punctuation 'func' Name ',' Punctuation ' ' Text '&' Operator 'sp' Name ',' Punctuation ' ' Text 'flags' Name ',' Punctuation ' ' Text 'na' Name ',' Punctuation ' ' Text 'nk' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t ' Text 'READ_TIMESTAMP' Name '(' Punctuation 'intr1' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t ' Text 'stack_pointer' Name ' ' Text '=' Operator ' ' Text 'sp' Name ';' Punctuation '\n' Text '\t\t ' Text 'Py_DECREF' Name '(' Punctuation 'func' Name ')' Punctuation ';' Punctuation '\n' Text '\n' Text '\t\t ' Text 'while' Keyword ' ' Text '(' Punctuation 'stack_pointer' Name ' ' Text '>' Operator ' ' Text 'pfunc' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t ' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t ' Text 'Py_DECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t ' Text '}' Punctuation '\n' Text '\t\t ' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t ' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation '\n' Text '\t\t\t ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t ' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'MAKE_FUNCTION' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation ' ' Text '/* code object */' Comment.Multiline '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyFunction_New' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'f' Name '-' Operator '>' Operator 'f_globals' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '/* XXX Maybe this should be a separate opcode? */' Comment.Multiline '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ' ' Text '&' Operator '&' Operator ' ' Text 'oparg' Name ' ' Text '>' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'PyTuple_New' Name '(' Punctuation 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'v' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t' Text 'while' Keyword ' ' Text '(' Punctuation '-' Operator '-' Operator 'oparg' Name ' ' Text '>' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'PyTuple_SET_ITEM' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'oparg' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyFunction_SetDefaults' Name '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'MAKE_CLOSURE' Name.Label ':' Punctuation '\n' Text '\t\t' Text '{' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation ' ' Text '/* code object */' Comment.Multiline '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PyFunction_New' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'f' Name '-' Operator '>' Operator 'f_globals' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyFunction_SetClosure' Name '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ' ' Text '&' Operator '&' Operator ' ' Text 'oparg' Name ' ' Text '>' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'PyTuple_New' Name '(' Punctuation 'oparg' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'v' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t' Text 'while' Keyword ' ' Text '(' Punctuation '-' Operator '-' Operator 'oparg' Name ' ' Text '>' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'PyTuple_SET_ITEM' Name '(' Punctuation 'v' Name ',' Punctuation ' ' Text 'oparg' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text 'PyFunction_SetDefaults' Name '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'PUSH' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'BUILD_SLICE' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'oparg' Name ' ' Text '=' Operator '=' Operator ' ' Text '3' Literal.Number.Integer ')' Punctuation '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword '\n' Text '\t\t\t\t' Text 'w' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'u' Name ' ' Text '=' Operator ' ' Text 'TOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'PySlice_New' Name '(' Punctuation 'u' Name ',' Punctuation ' ' Text 'v' Name ',' Punctuation ' ' Text 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'u' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'w' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'SET_TOP' Name '(' Punctuation 'x' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text 'continue' Keyword ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'case' Keyword ' ' Text 'EXTENDED_ARG' Name.Label ':' Punctuation '\n' Text '\t\t\t' Text 'opcode' Name ' ' Text '=' Operator ' ' Text 'NEXTOP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'oparg' Name ' ' Text '=' Operator ' ' Text 'oparg' Name '<' Operator '<' Operator '16' Literal.Number.Integer ' ' Text '|' Operator ' ' Text 'NEXTARG' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'goto' Keyword ' ' Text 'dispatch_opcode' Name ';' Punctuation '\n' Text '\n' Text '\t\t' Text 'default' Keyword ':' Operator '\n' Text '\t\t\t' Text 'fprintf' Name '(' Punctuation 'stderr' Name ',' Punctuation '\n' Text '\t\t\t\t' Text '"' Literal.String 'XXX lineno: %d, opcode: %d' Literal.String '\\n' Literal.String.Escape '"' Literal.String ',' Punctuation '\n' Text '\t\t\t\t' Text 'PyCode_Addr2Line' Name '(' Punctuation 'f' Name '-' Operator '>' Operator 'f_code' Name ',' Punctuation ' ' Text 'f' Name '-' Operator '>' Operator 'f_lasti' Name ')' Punctuation ',' Punctuation '\n' Text '\t\t\t\t' Text 'opcode' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'PyErr_SetString' Name '(' Punctuation 'PyExc_SystemError' Name ',' Punctuation ' ' Text '"' Literal.String 'unknown opcode' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_EXCEPTION' Name ';' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\n' Text '#' Comment.Preproc 'ifdef CASE_TOO_BIG' Comment.Preproc '\n' Comment.Preproc '\t\t' Text '}' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text '\t\t' Text '}' Punctuation ' ' Text '/* switch */' Comment.Multiline '\n' Text '\n' Text '\t ' Text 'on_error' Name.Label ':' Punctuation '\n' Text '\n' Text '\t\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'inst1' Name ')' Punctuation ';' Punctuation '\n' Text '\n' Text '\t\t' Text '/* Quickly continue if no error occurred */' Comment.Multiline '\n' Text '\n' Text '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'why' Name ' ' Text '=' Operator '=' Operator ' ' Text 'WHY_NOT' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'err' Name ' ' Text '=' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ' ' Text '&' Operator '&' Operator ' ' Text 'x' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '#' Comment.Preproc 'ifdef CHECKEXC' Comment.Preproc '\n' Comment.Preproc '\t\t\t\t' Text '/* This check is expensive! */' Comment.Multiline '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyErr_Occurred' Name '(' Punctuation ')' Punctuation ')' Punctuation '\n' Text '\t\t\t\t\t' Text 'fprintf' Name '(' Punctuation 'stderr' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t' Text '"' Literal.String 'XXX undetected error' Literal.String '\\n' Literal.String.Escape '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'else' Keyword ' ' Text '{' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\t\t\t\t\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'loop1' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'continue' Keyword ';' Punctuation ' ' Text '/* Normal, fast path */' Comment.Multiline '\n' Text '#' Comment.Preproc 'ifdef CHECKEXC' Comment.Preproc '\n' Comment.Preproc '\t\t\t\t' Text '}' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_EXCEPTION' Name ';' Punctuation '\n' Text '\t\t\t' Text 'x' Name ' ' Text '=' Operator ' ' Text 'Py_None' Name ';' Punctuation '\n' Text '\t\t\t' Text 'err' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '\n' Text '\t\t' Text '/* Double-check exception status */' Comment.Multiline '\n' Text '\n' Text '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'why' Name ' ' Text '=' Operator '=' Operator ' ' Text 'WHY_EXCEPTION' Name ' ' Text '|' Operator '|' Operator ' ' Text 'why' Name ' ' Text '=' Operator '=' Operator ' ' Text 'WHY_RERAISE' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation '!' Operator 'PyErr_Occurred' Name '(' Punctuation ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'PyErr_SetString' Name '(' Punctuation 'PyExc_SystemError' Name ',' Punctuation '\n' Text '\t\t\t\t\t' Text '"' Literal.String 'error return without exception set' Literal.String '"' Literal.String ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_EXCEPTION' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '#' Comment.Preproc 'ifdef CHECKEXC' Comment.Preproc '\n' Comment.Preproc '\t\t' Text 'else' Keyword ' ' Text '{' Punctuation '\n' Text '\t\t\t' Text '/* This check is expensive! */' Comment.Multiline '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'PyErr_Occurred' Name '(' Punctuation ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'char' Keyword.Type ' ' Text 'buf' Name '[' Punctuation '1024' Literal.Number.Integer ']' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'sprintf' Name '(' Punctuation 'buf' Name ',' Punctuation ' ' Text '"' Literal.String 'Stack unwind with exception ' Literal.String '"' Literal.String '\n' Text '\t\t\t\t\t' Text '"' Literal.String 'set and why=%d' Literal.String '"' Literal.String ',' Punctuation ' ' Text 'why' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_FatalError' Name '(' Punctuation 'buf' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '#' Comment.Preproc 'endif' Comment.Preproc '\n' Comment.Preproc '\n' Text '\t\t' Text '/* Log traceback info if this is a real exception */' Comment.Multiline '\n' Text '\n' Text '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'why' Name ' ' Text '=' Operator '=' Operator ' ' Text 'WHY_EXCEPTION' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t' Text 'PyTraceBack_Here' Name '(' Punctuation 'f' Name ')' Punctuation ';' Punctuation '\n' Text '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'c_tracefunc' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation '\n' Text '\t\t\t\t' Text 'call_exc_trace' Name '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'c_tracefunc' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'tstate' Name '-' Operator '>' Operator 'c_traceobj' Name ',' Punctuation ' ' Text 'f' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '\n' Text '\t\t' Text '/* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */' Comment.Multiline '\n' Text '\n' Text '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'why' Name ' ' Text '=' Operator '=' Operator ' ' Text 'WHY_RERAISE' Name ')' Punctuation '\n' Text '\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_EXCEPTION' Name ';' Punctuation '\n' Text '\n' Text '\t\t' Text '/* Unwind stacks if a (pseudo) exception occurred */' Comment.Multiline '\n' Text '\n' Text 'fast_block_end' Name.Label ':' Punctuation '\n' Text '\t\t' Text 'while' Keyword ' ' Text '(' Punctuation 'why' Name ' ' Text '!' Operator '=' Operator ' ' Text 'WHY_NOT' Name ' ' Text '&' Operator '&' Operator ' ' Text 'f' Name '-' Operator '>' Operator 'f_iblock' Name ' ' Text '>' Operator ' ' Text '0' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t' Text 'PyTryBlock' Name ' ' Text '*' Operator 'b' Name ' ' Text '=' Operator ' ' Text 'PyFrame_BlockPop' Name '(' Punctuation 'f' Name ')' Punctuation ';' Punctuation '\n' Text '\n' Text '\t\t\t' Text 'assert' Name '(' Punctuation 'why' Name ' ' Text '!' Operator '=' Operator ' ' Text 'WHY_YIELD' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'b' Name '-' Operator '>' Operator 'b_type' Name ' ' Text '=' Operator '=' Operator ' ' Text 'SETUP_LOOP' Name ' ' Text '&' Operator '&' Operator ' ' Text 'why' Name ' ' Text '=' Operator '=' Operator ' ' Text 'WHY_CONTINUE' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text "/* For a continue inside a try block,\n\t\t\t\t don't pop the block for the loop. */" Comment.Multiline '\n' Text '\t\t\t\t' Text 'PyFrame_BlockSetup' Name '(' Punctuation 'f' Name ',' Punctuation ' ' Text 'b' Name '-' Operator '>' Operator 'b_type' Name ',' Punctuation ' ' Text 'b' Name '-' Operator '>' Operator 'b_handler' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t ' Text 'b' Name '-' Operator '>' Operator 'b_level' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_NOT' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'JUMPTO' Name '(' Punctuation 'PyInt_AS_LONG' Name '(' Punctuation 'retval' Name ')' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_DECREF' Name '(' Punctuation 'retval' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\n' Text '\t\t\t' Text 'while' Keyword ' ' Text '(' Punctuation 'STACK_LEVEL' Name '(' Punctuation ')' Punctuation ' ' Text '>' Operator ' ' Text 'b' Name '-' Operator '>' Operator 'b_level' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'b' Name '-' Operator '>' Operator 'b_type' Name ' ' Text '=' Operator '=' Operator ' ' Text 'SETUP_LOOP' Name ' ' Text '&' Operator '&' Operator ' ' Text 'why' Name ' ' Text '=' Operator '=' Operator ' ' Text 'WHY_BREAK' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_NOT' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'JUMPTO' Name '(' Punctuation 'b' Name '-' Operator '>' Operator 'b_handler' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'b' Name '-' Operator '>' Operator 'b_type' Name ' ' Text '=' Operator '=' Operator ' ' Text 'SETUP_FINALLY' Name ' ' Text '|' Operator '|' Operator '\n' Text '\t\t\t ' Text '(' Punctuation 'b' Name '-' Operator '>' Operator 'b_type' Name ' ' Text '=' Operator '=' Operator ' ' Text 'SETUP_EXCEPT' Name ' ' Text '&' Operator '&' Operator '\n' Text '\t\t\t ' Text 'why' Name ' ' Text '=' Operator '=' Operator ' ' Text 'WHY_EXCEPTION' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'why' Name ' ' Text '=' Operator '=' Operator ' ' Text 'WHY_EXCEPTION' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'PyObject' Name ' ' Text '*' Operator 'exc' Name ',' Punctuation ' ' Text '*' Operator 'val' Name ',' Punctuation ' ' Text '*' Operator 'tb' Name ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'PyErr_Fetch' Name '(' Punctuation '&' Operator 'exc' Name ',' Punctuation ' ' Text '&' Operator 'val' Name ',' Punctuation ' ' Text '&' Operator 'tb' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'val' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'val' Name ' ' Text '=' Operator ' ' Text 'Py_None' Name ';' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'val' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t\t' Text "/* Make the raw exception data\n\t\t\t\t\t available to the handler,\n\t\t\t\t\t so a program can emulate the\n\t\t\t\t\t Python main loop. Don't do\n\t\t\t\t\t this for 'finally'. */" Comment.Multiline '\n' Text '\t\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'b' Name '-' Operator '>' Operator 'b_type' Name ' ' Text '=' Operator '=' Operator ' ' Text 'SETUP_EXCEPT' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'PyErr_NormalizeException' Name '(' Punctuation '\n' Text '\t\t\t\t\t\t\t' Text '&' Operator 'exc' Name ',' Punctuation ' ' Text '&' Operator 'val' Name ',' Punctuation ' ' Text '&' Operator 'tb' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'set_exc_info' Name '(' Punctuation 'tstate' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t\t ' Text 'exc' Name ',' Punctuation ' ' Text 'val' Name ',' Punctuation ' ' Text 'tb' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tb' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'Py_INCREF' Name '(' Punctuation 'Py_None' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'Py_None' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text '}' Punctuation ' ' Text 'else' Keyword '\n' Text '\t\t\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'tb' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'val' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'exc' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t' Text 'else' Keyword ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'why' Name ' ' Text '&' Operator ' ' Text '(' Punctuation 'WHY_RETURN' Name ' ' Text '|' Operator ' ' Text 'WHY_CONTINUE' Name ')' Punctuation ')' Punctuation '\n' Text '\t\t\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'retval' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'PyInt_FromLong' Name '(' Punctuation '(' Punctuation 'long' Keyword.Type ')' Punctuation 'why' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'PUSH' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_NOT' Name ';' Punctuation '\n' Text '\t\t\t\t' Text 'JUMPTO' Name '(' Punctuation 'b' Name '-' Operator '>' Operator 'b_handler' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t' Text '}' Punctuation ' ' Text '/* unwind stack */' Comment.Multiline '\n' Text '\n' Text '\t\t' Text '/* End the loop if we still have an error (or return) */' Comment.Multiline '\n' Text '\n' Text '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'why' Name ' ' Text '!' Operator '=' Operator ' ' Text 'WHY_NOT' Name ')' Punctuation '\n' Text '\t\t\t' Text 'break' Keyword ';' Punctuation '\n' Text '\t\t' Text 'READ_TIMESTAMP' Name '(' Punctuation 'loop1' Name ')' Punctuation ';' Punctuation '\n' Text '\n' Text '\t' Text '}' Punctuation ' ' Text '/* main loop */' Comment.Multiline '\n' Text '\n' Text '\t' Text 'assert' Name '(' Punctuation 'why' Name ' ' Text '!' Operator '=' Operator ' ' Text 'WHY_YIELD' Name ')' Punctuation ';' Punctuation '\n' Text '\t' Text '/* Pop remaining stack entries. */' Comment.Multiline '\n' Text '\t' Text 'while' Keyword ' ' Text '(' Punctuation '!' Operator 'EMPTY' Name '(' Punctuation ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t' Text 'v' Name ' ' Text '=' Operator ' ' Text 'POP' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'v' Name ')' Punctuation ';' Punctuation '\n' Text '\t' Text '}' Punctuation '\n' Text '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'why' Name ' ' Text '!' Operator '=' Operator ' ' Text 'WHY_RETURN' Name ')' Punctuation '\n' Text '\t\t' Text 'retval' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\n' Text 'fast_yield' Name.Label ':' Punctuation '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'use_tracing' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'c_tracefunc' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'why' Name ' ' Text '=' Operator '=' Operator ' ' Text 'WHY_RETURN' Name ' ' Text '|' Operator '|' Operator ' ' Text 'why' Name ' ' Text '=' Operator '=' Operator ' ' Text 'WHY_YIELD' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'call_trace' Name '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'c_tracefunc' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'tstate' Name '-' Operator '>' Operator 'c_traceobj' Name ',' Punctuation ' ' Text 'f' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'PyTrace_RETURN' Name ',' Punctuation ' ' Text 'retval' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'retval' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'retval' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_EXCEPTION' Name ';' Punctuation '\n' Text '\t\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text 'if' Keyword ' ' Text '(' Punctuation 'why' Name ' ' Text '=' Operator '=' Operator ' ' Text 'WHY_EXCEPTION' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'call_trace_protected' Name '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'c_tracefunc' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t ' Text 'tstate' Name '-' Operator '>' Operator 'c_traceobj' Name ',' Punctuation ' ' Text 'f' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t ' Text 'PyTrace_RETURN' Name ',' Punctuation ' ' Text 'NULL' Name.Builtin ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'c_profilefunc' Name ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t' Text 'if' Keyword ' ' Text '(' Punctuation 'why' Name ' ' Text '=' Operator '=' Operator ' ' Text 'WHY_EXCEPTION' Name ')' Punctuation '\n' Text '\t\t\t\t' Text 'call_trace_protected' Name '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'c_profilefunc' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t ' Text 'tstate' Name '-' Operator '>' Operator 'c_profileobj' Name ',' Punctuation ' ' Text 'f' Name ',' Punctuation '\n' Text '\t\t\t\t\t\t ' Text 'PyTrace_RETURN' Name ',' Punctuation ' ' Text 'NULL' Name.Builtin ')' Punctuation ';' Punctuation '\n' Text '\t\t\t' Text 'else' Keyword ' ' Text 'if' Keyword ' ' Text '(' Punctuation 'call_trace' Name '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'c_profilefunc' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'tstate' Name '-' Operator '>' Operator 'c_profileobj' Name ',' Punctuation ' ' Text 'f' Name ',' Punctuation '\n' Text '\t\t\t\t\t ' Text 'PyTrace_RETURN' Name ',' Punctuation ' ' Text 'retval' Name ')' Punctuation ')' Punctuation ' ' Text '{' Punctuation '\n' Text '\t\t\t\t' Text 'Py_XDECREF' Name '(' Punctuation 'retval' Name ')' Punctuation ';' Punctuation '\n' Text '\t\t\t\t' Text 'retval' Name ' ' Text '=' Operator ' ' Text 'NULL' Name.Builtin ';' Punctuation '\n' Text '\t\t\t\t' Text 'why' Name ' ' Text '=' Operator ' ' Text 'WHY_EXCEPTION' Name ';' Punctuation '\n' Text '\t\t\t' Text '}' Punctuation '\n' Text '\t\t' Text '}' Punctuation '\n' Text '\t' Text '}' Punctuation '\n' Text '\n' Text '\t' Text 'if' Keyword ' ' Text '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'frame' Name '-' Operator '>' Operator 'f_exc_type' Name ' ' Text '!' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation '\n' Text '\t\t' Text 'reset_exc_info' Name '(' Punctuation 'tstate' Name ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'else' Keyword ' ' Text '{' Punctuation '\n' Text '\t\t' Text 'assert' Name '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'frame' Name '-' Operator '>' Operator 'f_exc_value' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ';' Punctuation '\n' Text '\t\t' Text 'assert' Name '(' Punctuation 'tstate' Name '-' Operator '>' Operator 'frame' Name '-' Operator '>' Operator 'f_exc_traceback' Name ' ' Text '=' Operator '=' Operator ' ' Text 'NULL' Name.Builtin ')' Punctuation ';' Punctuation '\n' Text '\t' Text '}' Punctuation '\n' Text '\n' Text '\t' Text '/* pop frame */' Comment.Multiline '\n' Text ' ' Text 'exit_eval_frame' Name.Label ':' Punctuation '\n' Text '\t' Text 'Py_LeaveRecursiveCall' Name '(' Punctuation ')' Punctuation ';' Punctuation '\n' Text '\t' Text 'tstate' Name '-' Operator '>' Operator 'frame' Name ' ' Text '=' Operator ' ' Text 'f' Name '-' Operator '>' Operator 'f_back' Name ';' Punctuation '\n' Text '\n' Text '\t' Text 'return' Keyword ' ' Text 'retval' Name ';' Punctuation '\n' Text '}' Punctuation '\n' Text