summaryrefslogtreecommitdiff
path: root/tests/lexers/c
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2021-01-18 21:24:00 +0100
committerGeorg Brandl <georg@python.org>2021-01-18 22:08:36 +0100
commit2a3d3a7d5b9c60dedf6638d876161d9563faebcf (patch)
tree809c0b4a686db98f5954afa1944404cd9652c6b2 /tests/lexers/c
parentf0445be718da83541ea3401aad882f3937147263 (diff)
downloadpygments-git-examplefiles.tar.gz
Move test_examplefiles to new tests/lexers scheme.examplefiles
Diffstat (limited to 'tests/lexers/c')
-rw-r--r--tests/lexers/c/example.txt99
-rw-r--r--tests/lexers/c/example2.txt23177
-rw-r--r--tests/lexers/c/example3.txt16585
3 files changed, 39861 insertions, 0 deletions
diff --git a/tests/lexers/c/example.txt b/tests/lexers/c/example.txt
new file mode 100644
index 00000000..b579a5ed
--- /dev/null
+++ b/tests/lexers/c/example.txt
@@ -0,0 +1,99 @@
+---input---
+/*
+ * Some Number Test
+ */
+
+int i = 24241424;
+float f1 = 342423423.24234;
+float f2 = 25235235.;
+float f3 = .234234;
+float f4 = 234243e+34343;
+float f5 = 24234e-234;
+int o = 0234;
+int h = 0x2342;
+
+---tokens---
+'/*\n * Some Number Test\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'int' Keyword.Type
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'24241424' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'float' Keyword.Type
+' ' Text
+'f1' Name
+' ' Text
+'=' Operator
+' ' Text
+'342423423.24234' Literal.Number.Float
+';' Punctuation
+'\n' Text
+
+'float' Keyword.Type
+' ' Text
+'f2' Name
+' ' Text
+'=' Operator
+' ' Text
+'25235235.' Literal.Number.Float
+';' Punctuation
+'\n' Text
+
+'float' Keyword.Type
+' ' Text
+'f3' Name
+' ' Text
+'=' Operator
+' ' Text
+'.234234' Literal.Number.Float
+';' Punctuation
+'\n' Text
+
+'float' Keyword.Type
+' ' Text
+'f4' Name
+' ' Text
+'=' Operator
+' ' Text
+'234243e+34343' Literal.Number.Float
+';' Punctuation
+'\n' Text
+
+'float' Keyword.Type
+' ' Text
+'f5' Name
+' ' Text
+'=' Operator
+' ' Text
+'24234e-234' Literal.Number.Float
+';' Punctuation
+'\n' Text
+
+'int' Keyword.Type
+' ' Text
+'o' Name
+' ' Text
+'=' Operator
+' ' Text
+'0234' Literal.Number.Oct
+';' Punctuation
+'\n' Text
+
+'int' Keyword.Type
+' ' Text
+'h' Name
+' ' Text
+'=' Operator
+' ' Text
+'0x2342' Literal.Number.Hex
+';' Punctuation
+'\n' Text
diff --git a/tests/lexers/c/example2.txt b/tests/lexers/c/example2.txt
new file mode 100644
index 00000000..fe4d6c06
--- /dev/null
+++ b/tests/lexers/c/example2.txt
@@ -0,0 +1,23177 @@
+---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 <ctype.h>
+
+#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 <errno.h>
+#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
+'<ctype.h>' 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
+'<errno.h>' 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
diff --git a/tests/lexers/c/example3.txt b/tests/lexers/c/example3.txt
new file mode 100644
index 00000000..1643fc7b
--- /dev/null
+++ b/tests/lexers/c/example3.txt
@@ -0,0 +1,16585 @@
+---input---
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "codegen.h"
+#include "symboltable.h"
+#include "stringbuffer.h"
+
+extern void yyerror(char* msg);
+
+static stringBuffer* staticVariableBuffer;
+static stringBuffer* classInitBuffer;
+static stringBuffer* currentMethodBuffer;
+static stringBuffer* finishedMethodsBuffer;
+static stringBuffer* mainBuffer;
+
+static int currentMethodBufferIndex;
+static int currentMethodStackSize;
+static int currentMethodStackSizeMax;
+static int currentMethodNumberOfLocals;
+
+static int classInitBufferIndex;
+static int classInitStackSize;
+static int classInitStackSizeMax;
+
+static int labelCounter = 0;
+static int global = 1;
+
+char tempString[MAX_LENGTH_OF_COMMAND];
+
+extern char* className; /* from minako-syntax.y */
+
+/* forward declarations */
+static void increaseStackby(int stackdiff);
+char convertType(int type);
+
+void codegenInit() {
+ staticVariableBuffer = newStringBuffer();
+ classInitBuffer = newStringBuffer();
+ currentMethodBuffer = 0;
+ finishedMethodsBuffer = newStringBuffer();
+ mainBuffer = newStringBuffer();
+
+ stringBufferAppend(mainBuffer, "; ------- Header --------------------------------------------");
+ sprintf(tempString, ".class public synchronized %s", className);
+ stringBufferAppend(mainBuffer, tempString);
+ stringBufferAppend(mainBuffer, ".super java/lang/Object");
+ stringBufferAppend(mainBuffer, "; -----------------------------------------------------------");
+ stringBufferAppend(mainBuffer, "");
+
+ stringBufferAppend(finishedMethodsBuffer, "; ------- Constructor ---------------------------------------");
+ stringBufferAppend(finishedMethodsBuffer, ".method public <init>()V");
+ stringBufferAppend(finishedMethodsBuffer, "\t.limit stack 1");
+ stringBufferAppend(finishedMethodsBuffer, "\t.limit locals 1");
+ stringBufferAppend(finishedMethodsBuffer, "\taload_0");
+ stringBufferAppend(finishedMethodsBuffer, "\tinvokenonvirtual java/lang/Object/<init>()V");
+ stringBufferAppend(finishedMethodsBuffer, "\treturn");
+ stringBufferAppend(finishedMethodsBuffer, ".end method");
+ stringBufferAppend(finishedMethodsBuffer, "; -----------------------------------------------------------");
+ stringBufferAppend(finishedMethodsBuffer, "");
+
+ stringBufferAppend(staticVariableBuffer, "; ------- Class Variables -----------------------------------");
+
+ stringBufferAppend(classInitBuffer, "; ------- Class Initializer ---------------------------------");
+ stringBufferAppend(classInitBuffer, ".method static <clinit>()V");
+ classInitBufferIndex = classInitBuffer->numberOfNextElement;
+ stringBufferAppend(classInitBuffer, "\t.limit locals 0");
+
+}
+
+void codegenAppendCommand(char* cmd, int stackdiff) {
+ char tempString[MAX_LENGTH_OF_COMMAND];
+ sprintf(tempString, "\t%s", cmd);
+ if (global) stringBufferAppend(classInitBuffer, tempString);
+ else stringBufferAppend(currentMethodBuffer, tempString);
+ increaseStackby(stackdiff);
+}
+
+void codegenInsertCommand(int address, char* cmd, int stackdiff) {
+ char tempString[MAX_LENGTH_OF_COMMAND];
+ sprintf(tempString, "\t%s", cmd);
+ if (global) stringBufferInsert(classInitBuffer, address, tempString);
+ else stringBufferInsert(currentMethodBuffer, address, tempString);
+ increaseStackby(stackdiff);
+}
+
+void codegenAppendLabel(int label) {
+ char tempString[MAX_LENGTH_OF_COMMAND];
+ sprintf(tempString, "Label%d:", label);
+ if (global) stringBufferAppend(classInitBuffer, tempString);
+ else stringBufferAppend(currentMethodBuffer, tempString);
+}
+
+void codegenAddVariable(char* name, int type) {
+ /*fprintf(stderr, "add variable %s(%d) global=%d ", name, convertType(type), global);*/
+ if (global) {
+ if (type == TYPE_INT) sprintf(tempString, ".field static %s %c", name, 'I');
+ else if (type == TYPE_FLOAT) sprintf(tempString, ".field static %s %c", name, 'F');
+ else if (type == TYPE_BOOLEAN) sprintf(tempString, ".field static %s %c", name, 'Z');
+ else yyerror("compiler-intern error in codegenAddGlobalVariable().\n");
+ stringBufferAppend(staticVariableBuffer, tempString);
+ }
+ else {
+ currentMethodNumberOfLocals++;
+ }
+}
+
+int codegenGetNextLabel() {
+ return labelCounter++;
+}
+
+int codegenGetCurrentAddress() {
+ if (global) return classInitBuffer->numberOfNextElement;
+ else return currentMethodBuffer->numberOfNextElement;
+}
+
+void codegenEnterFunction(symtabEntry* entry) {
+ currentMethodBuffer = newStringBuffer();
+ currentMethodStackSize = 0;
+ currentMethodStackSizeMax = 0;
+ labelCounter = 1;
+ global = 0;
+
+ if (strcmp(entry->name, "main") == 0) {
+ if (entry->idtype != TYPE_VOID) yyerror("main has to be void.\n");
+ currentMethodNumberOfLocals = 1;
+ symtabInsert(strdup("#main-param#"), TYPE_VOID, CLASS_FUNC);
+ stringBufferAppend(currentMethodBuffer, "; ------- Methode ---- void main() --------------------------");
+ stringBufferAppend(currentMethodBuffer, ".method public static main([Ljava/lang/String;)V");
+ }
+ else {
+ int i;
+ currentMethodNumberOfLocals = entry->paramIndex;
+ stringBufferAppend(currentMethodBuffer, "; ------- Methode -------------------------------------------");
+ sprintf(tempString, ".method public static %s(", entry->name);
+ for (i=entry->paramIndex-1; i>=0; i--) {
+ int type = entry->params[i]->idtype;
+ tempString[strlen(tempString)+1] = 0;
+ tempString[strlen(tempString)] = convertType(type);
+ }
+ tempString[strlen(tempString)+2] = 0;
+ tempString[strlen(tempString)+1] = convertType(entry->idtype);
+ tempString[strlen(tempString)] = ')';
+ stringBufferAppend(currentMethodBuffer, tempString);
+ }
+ currentMethodBufferIndex = currentMethodBuffer->numberOfNextElement;
+}
+
+void codegenLeaveFunction() {
+ global = 1;
+ sprintf(tempString, "\t.limit locals %d", currentMethodNumberOfLocals);
+ stringBufferInsert(currentMethodBuffer, currentMethodBufferIndex, tempString);
+ sprintf(tempString, "\t.limit stack %d", currentMethodStackSizeMax);
+ stringBufferInsert(currentMethodBuffer, currentMethodBufferIndex, tempString);
+ stringBufferAppend(currentMethodBuffer, "\treturn");
+ stringBufferAppend(currentMethodBuffer, ".end method");
+ stringBufferAppend(currentMethodBuffer, "; -----------------------------------------------------------");
+ stringBufferAppend(currentMethodBuffer, "");
+
+ stringBufferConcatenate(finishedMethodsBuffer, currentMethodBuffer);
+}
+
+
+
+void codegenFinishCode() {
+ stringBufferAppend(staticVariableBuffer, "; -----------------------------------------------------------");
+ stringBufferAppend(staticVariableBuffer, "");
+
+ sprintf(tempString, "\t.limit stack %d", classInitStackSizeMax);
+ stringBufferInsert(classInitBuffer, classInitBufferIndex, tempString);
+ stringBufferAppend(classInitBuffer, "\treturn");
+ stringBufferAppend(classInitBuffer, ".end method");
+ stringBufferAppend(classInitBuffer, "; -----------------------------------------------------------");
+
+ stringBufferConcatenate(mainBuffer, staticVariableBuffer);
+ stringBufferConcatenate(mainBuffer, finishedMethodsBuffer);
+ stringBufferConcatenate(mainBuffer, classInitBuffer);
+
+ stringBufferPrint(mainBuffer);
+}
+
+static void increaseStackby(int stackdiff) {
+ if (global) {
+ classInitStackSize += stackdiff;
+ if (classInitStackSize > classInitStackSizeMax) classInitStackSizeMax = classInitStackSize;
+ }
+ else {
+ currentMethodStackSize += stackdiff;
+ if (currentMethodStackSize > currentMethodStackSizeMax) currentMethodStackSizeMax = currentMethodStackSize;
+ }
+}
+
+char convertType(int type) {
+ switch(type) {
+ case TYPE_VOID: return 'V';
+ case TYPE_INT: return 'I';
+ case TYPE_FLOAT: return 'F';
+ case TYPE_BOOLEAN: return 'Z';
+ default : yyerror("compiler-intern error in convertType().\n");
+ }
+ return 0; /* to avoid compiler-warning */
+}
+
+
+//#include <stdlib.h>
+//#include <stdio.h>
+
+int main() {
+ int a = 12, b = 44;
+ while (a != b) {
+ if (a > b)
+ a -= b;
+ else
+ b -= a;
+ }
+ printf("%d\n%d", a, 0X0);\
+}
+
+
+/**********************************************************************
+
+ array.c -
+
+ $Author: murphy $
+ $Date: 2005-11-05 04:33:55 +0100 (Sa, 05 Nov 2005) $
+ created at: Fri Aug 6 09:46:12 JST 1993
+
+ Copyright (C) 1993-2003 Yukihiro Matsumoto
+ Copyright (C) 2000 Network Applied Communication Laboratory, Inc.
+ Copyright (C) 2000 Information-technology Promotion Agency, Japan
+
+**********************************************************************/
+
+#include "ruby.h"
+#include "util.h"
+#include "st.h"
+#include "node.h"
+
+VALUE rb_cArray, rb_cValues;
+
+static ID id_cmp;
+
+#define ARY_DEFAULT_SIZE 16
+
+
+void
+rb_mem_clear(mem, size)
+ register VALUE *mem;
+ register long size;
+{
+ while (size--) {
+ *mem++ = Qnil;
+ }
+}
+
+static inline void
+memfill(mem, size, val)
+ register VALUE *mem;
+ register long size;
+ register VALUE val;
+{
+ while (size--) {
+ *mem++ = val;
+ }
+}
+
+#define ARY_TMPLOCK FL_USER1
+
+static inline void
+rb_ary_modify_check(ary)
+ VALUE ary;
+{
+ if (OBJ_FROZEN(ary)) rb_error_frozen("array");
+ if (FL_TEST(ary, ARY_TMPLOCK))
+ rb_raise(rb_eRuntimeError, "can't modify array during iteration");
+ if (!OBJ_TAINTED(ary) && rb_safe_level() >= 4)
+ rb_raise(rb_eSecurityError, "Insecure: can't modify array");
+}
+
+static void
+rb_ary_modify(ary)
+ VALUE ary;
+{
+ VALUE *ptr;
+
+ rb_ary_modify_check(ary);
+ if (FL_TEST(ary, ELTS_SHARED)) {
+ ptr = ALLOC_N(VALUE, RARRAY(ary)->len);
+ FL_UNSET(ary, ELTS_SHARED);
+ RARRAY(ary)->aux.capa = RARRAY(ary)->len;
+ MEMCPY(ptr, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len);
+ RARRAY(ary)->ptr = ptr;
+ }
+}
+
+VALUE
+rb_ary_freeze(ary)
+ VALUE ary;
+{
+ return rb_obj_freeze(ary);
+}
+
+/*
+ * call-seq:
+ * array.frozen? -> true or false
+ *
+ * Return <code>true</code> if this array is frozen (or temporarily frozen
+ * while being sorted).
+ */
+
+static VALUE
+rb_ary_frozen_p(ary)
+ VALUE ary;
+{
+ if (OBJ_FROZEN(ary)) return Qtrue;
+ if (FL_TEST(ary, ARY_TMPLOCK)) return Qtrue;
+ return Qfalse;
+}
+
+static VALUE ary_alloc(VALUE);
+static VALUE
+ary_alloc(klass)
+ VALUE klass;
+{
+ NEWOBJ(ary, struct RArray);
+ OBJSETUP(ary, klass, T_ARRAY);
+
+ ary->len = 0;
+ ary->ptr = 0;
+ ary->aux.capa = 0;
+
+ return (VALUE)ary;
+}
+
+static VALUE
+ary_new(klass, len)
+ VALUE klass;
+ long len;
+{
+ VALUE ary;
+
+ if (len < 0) {
+ rb_raise(rb_eArgError, "negative array size (or size too big)");
+ }
+ if (len > 0 && len * sizeof(VALUE) <= len) {
+ rb_raise(rb_eArgError, "array size too big");
+ }
+ if (len == 0) len++;
+
+ ary = ary_alloc(klass);
+ RARRAY(ary)->ptr = ALLOC_N(VALUE, len);
+ RARRAY(ary)->aux.capa = len;
+
+ return ary;
+}
+
+VALUE
+rb_ary_new2(len)
+ long len;
+{
+ return ary_new(rb_cArray, len);
+}
+
+
+VALUE
+rb_ary_new()
+{
+ return rb_ary_new2(ARY_DEFAULT_SIZE);
+}
+
+#ifdef HAVE_STDARG_PROTOTYPES
+#include <stdarg.h>
+#define va_init_list(a,b) va_start(a,b)
+#else
+#include <varargs.h>
+#define va_init_list(a,b) va_start(a)
+#endif
+
+VALUE
+#ifdef HAVE_STDARG_PROTOTYPES
+rb_ary_new3(long n, ...)
+#else
+rb_ary_new3(n, va_alist)
+ long n;
+ va_dcl
+#endif
+{
+ va_list ar;
+ VALUE ary;
+ long i;
+
+ ary = rb_ary_new2(n);
+
+ va_init_list(ar, n);
+ for (i=0; i<n; i++) {
+ RARRAY(ary)->ptr[i] = va_arg(ar, VALUE);
+ }
+ va_end(ar);
+
+ RARRAY(ary)->len = n;
+ return ary;
+}
+
+VALUE
+rb_ary_new4(n, elts)
+ long n;
+ const VALUE *elts;
+{
+ VALUE ary;
+
+ ary = rb_ary_new2(n);
+ if (n > 0 && elts) {
+ MEMCPY(RARRAY(ary)->ptr, elts, VALUE, n);
+ }
+ RARRAY(ary)->len = n;
+
+ return ary;
+}
+
+VALUE
+#ifdef HAVE_STDARG_PROTOTYPES
+rb_values_new(long n, ...)
+#else
+rb_values_new(n, va_alist)
+ long n;
+ va_dcl
+#endif
+{
+ va_list ar;
+ VALUE val;
+ long i;
+
+ val = ary_new(rb_cValues, n);
+ va_init_list(ar, n);
+ for (i=0; i<n; i++) {
+ RARRAY(val)->ptr[i] = va_arg(ar, VALUE);
+ }
+ va_end(ar);
+ RARRAY(val)->len = n;
+
+ return val;
+}
+
+VALUE
+rb_values_new2(n, elts)
+ long n;
+ const VALUE *elts;
+{
+ VALUE val;
+
+ val = ary_new(rb_cValues, n);
+ if (n > 0 && elts) {
+ RARRAY(val)->len = n;
+ MEMCPY(RARRAY(val)->ptr, elts, VALUE, n);
+ }
+
+ return val;
+}
+
+static VALUE
+ary_make_shared(ary)
+ VALUE ary;
+{
+ if (!FL_TEST(ary, ELTS_SHARED)) {
+ NEWOBJ(shared, struct RArray);
+ OBJSETUP(shared, rb_cArray, T_ARRAY);
+
+ shared->len = RARRAY(ary)->len;
+ shared->ptr = RARRAY(ary)->ptr;
+ shared->aux.capa = RARRAY(ary)->aux.capa;
+ RARRAY(ary)->aux.shared = (VALUE)shared;
+ FL_SET(ary, ELTS_SHARED);
+ OBJ_FREEZE(shared);
+ return (VALUE)shared;
+ }
+ else {
+ return RARRAY(ary)->aux.shared;
+ }
+}
+
+static VALUE
+ary_shared_array(klass, ary)
+ VALUE klass, ary;
+{
+ VALUE val = ary_alloc(klass);
+
+ ary_make_shared(ary);
+ RARRAY(val)->ptr = RARRAY(ary)->ptr;
+ RARRAY(val)->len = RARRAY(ary)->len;
+ RARRAY(val)->aux.shared = RARRAY(ary)->aux.shared;
+ FL_SET(val, ELTS_SHARED);
+ return val;
+}
+
+VALUE
+rb_values_from_ary(ary)
+ VALUE ary;
+{
+ return ary_shared_array(rb_cValues, ary);
+}
+
+VALUE
+rb_ary_from_values(val)
+ VALUE val;
+{
+ return ary_shared_array(rb_cArray, val);
+}
+
+VALUE
+rb_assoc_new(car, cdr)
+ VALUE car, cdr;
+{
+ return rb_values_new(2, car, cdr);
+}
+
+static VALUE
+to_ary(ary)
+ VALUE ary;
+{
+ return rb_convert_type(ary, T_ARRAY, "Array", "to_ary");
+}
+
+static VALUE
+to_a(ary)
+ VALUE ary;
+{
+ return rb_convert_type(ary, T_ARRAY, "Array", "to_a");
+}
+
+VALUE
+rb_check_array_type(ary)
+ VALUE ary;
+{
+ return rb_check_convert_type(ary, T_ARRAY, "Array", "to_ary");
+}
+
+static VALUE rb_ary_replace _((VALUE, VALUE));
+
+/*
+ * call-seq:
+ * Array.new(size=0, obj=nil)
+ * Array.new(array)
+ * Array.new(size) {|index| block }
+ *
+ * Returns a new array. In the first form, the new array is
+ * empty. In the second it is created with _size_ copies of _obj_
+ * (that is, _size_ references to the same
+ * _obj_). The third form creates a copy of the array
+ * passed as a parameter (the array is generated by calling
+ * to_ary on the parameter). In the last form, an array
+ * of the given size is created. Each element in this array is
+ * calculated by passing the element's index to the given block and
+ * storing the return value.
+ *
+ * Array.new
+ * Array.new(2)
+ * Array.new(5, "A")
+ *
+ * # only one copy of the object is created
+ * a = Array.new(2, Hash.new)
+ * a[0]['cat'] = 'feline'
+ * a
+ * a[1]['cat'] = 'Felix'
+ * a
+ *
+ * # here multiple copies are created
+ * a = Array.new(2) { Hash.new }
+ * a[0]['cat'] = 'feline'
+ * a
+ *
+ * squares = Array.new(5) {|i| i*i}
+ * squares
+ *
+ * copy = Array.new(squares)
+ */
+
+static VALUE
+rb_ary_initialize(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ long len;
+ VALUE size, val;
+
+ if (rb_scan_args(argc, argv, "02", &size, &val) == 0) {
+ RARRAY(ary)->len = 0;
+ if (rb_block_given_p()) {
+ rb_warning("given block not used");
+ }
+ return ary;
+ }
+
+ if (argc == 1 && !FIXNUM_P(size)) {
+ val = rb_check_array_type(size);
+ if (!NIL_P(val)) {
+ rb_ary_replace(ary, val);
+ return ary;
+ }
+ }
+
+ len = NUM2LONG(size);
+ if (len < 0) {
+ rb_raise(rb_eArgError, "negative array size");
+ }
+ if (len > 0 && len * (long)sizeof(VALUE) <= len) {
+ rb_raise(rb_eArgError, "array size too big");
+ }
+ rb_ary_modify(ary);
+ if (len > RARRAY(ary)->aux.capa) {
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, len);
+ RARRAY(ary)->aux.capa = len;
+ }
+ if (rb_block_given_p()) {
+ long i;
+
+ if (argc == 2) {
+ rb_warn("block supersedes default value argument");
+ }
+ for (i=0; i<len; i++) {
+ rb_ary_store(ary, i, rb_yield(LONG2NUM(i)));
+ RARRAY(ary)->len = i + 1;
+ }
+ }
+ else {
+ memfill(RARRAY(ary)->ptr, len, val);
+ RARRAY(ary)->len = len;
+ }
+
+ return ary;
+}
+
+
+/*
+* Returns a new array populated with the given objects.
+*
+* Array.[]( 1, 'a', /^A/ )
+* Array[ 1, 'a', /^A/ ]
+* [ 1, 'a', /^A/ ]
+*/
+
+static VALUE
+rb_ary_s_create(argc, argv, klass)
+ int argc;
+ VALUE *argv;
+ VALUE klass;
+{
+ VALUE ary = ary_alloc(klass);
+
+ if (argc > 0) {
+ RARRAY(ary)->ptr = ALLOC_N(VALUE, argc);
+ MEMCPY(RARRAY(ary)->ptr, argv, VALUE, argc);
+ }
+ RARRAY(ary)->len = RARRAY(ary)->aux.capa = argc;
+
+ return ary;
+}
+
+void
+rb_ary_store(ary, idx, val)
+ VALUE ary;
+ long idx;
+ VALUE val;
+{
+ if (idx < 0) {
+ idx += RARRAY(ary)->len;
+ if (idx < 0) {
+ rb_raise(rb_eIndexError, "index %ld out of array",
+ idx - RARRAY(ary)->len);
+ }
+ }
+
+ rb_ary_modify(ary);
+ if (idx >= RARRAY(ary)->aux.capa) {
+ long new_capa = RARRAY(ary)->aux.capa / 2;
+
+ if (new_capa < ARY_DEFAULT_SIZE) {
+ new_capa = ARY_DEFAULT_SIZE;
+ }
+ new_capa += idx;
+ if (new_capa * (long)sizeof(VALUE) <= new_capa) {
+ rb_raise(rb_eArgError, "index too big");
+ }
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, new_capa);
+ RARRAY(ary)->aux.capa = new_capa;
+ }
+ if (idx > RARRAY(ary)->len) {
+ rb_mem_clear(RARRAY(ary)->ptr + RARRAY(ary)->len,
+ idx-RARRAY(ary)->len + 1);
+ }
+
+ if (idx >= RARRAY(ary)->len) {
+ RARRAY(ary)->len = idx + 1;
+ }
+ RARRAY(ary)->ptr[idx] = val;
+}
+
+static VALUE
+ary_shared_first(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ VALUE nv, result;
+ long n;
+
+ rb_scan_args(argc, argv, "1", &nv);
+ n = NUM2LONG(nv);
+ if (n > RARRAY(ary)->len) {
+ n = RARRAY(ary)->len;
+ }
+ else if (n < 0) {
+ rb_raise(rb_eArgError, "negative array size");
+ }
+ result = ary_shared_array(rb_cArray, ary);
+ RARRAY(result)->len = n;
+ return result;
+}
+
+static VALUE
+ary_shared_last(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ VALUE result = ary_shared_first(argc, argv, ary);
+
+ RARRAY(result)->ptr += RARRAY(ary)->len - RARRAY(result)->len;
+ return result;
+}
+
+/*
+ * call-seq:
+ * array << obj -> array
+ *
+ * Append---Pushes the given object on to the end of this array. This
+ * expression returns the array itself, so several appends
+ * may be chained together.
+ *
+ * [ 1, 2 ] << "c" << "d" << [ 3, 4 ]
+ * #=> [ 1, 2, "c", "d", [ 3, 4 ] ]
+ *
+ */
+
+VALUE
+rb_ary_push(ary, item)
+ VALUE ary;
+ VALUE item;
+{
+ rb_ary_store(ary, RARRAY(ary)->len, item);
+ return ary;
+}
+
+/*
+ * call-seq:
+ * array.push(obj, ... ) -> array
+ *
+ * Append---Pushes the given object(s) on to the end of this array. This
+ * expression returns the array itself, so several appends
+ * may be chained together.
+ *
+ * a = [ "a", "b", "c" ]
+ * a.push("d", "e", "f")
+ * #=> ["a", "b", "c", "d", "e", "f"]
+ */
+
+static VALUE
+rb_ary_push_m(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ while (argc--) {
+ rb_ary_push(ary, *argv++);
+ }
+ return ary;
+}
+
+VALUE
+rb_ary_pop(ary)
+ VALUE ary;
+{
+ rb_ary_modify_check(ary);
+ if (RARRAY(ary)->len == 0) return Qnil;
+ if (!FL_TEST(ary, ELTS_SHARED) &&
+ RARRAY(ary)->len * 2 < RARRAY(ary)->aux.capa &&
+ RARRAY(ary)->aux.capa > ARY_DEFAULT_SIZE) {
+ RARRAY(ary)->aux.capa = RARRAY(ary)->len * 2;
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->aux.capa);
+ }
+ return RARRAY(ary)->ptr[--RARRAY(ary)->len];
+}
+
+/*
+ * call-seq:
+ * array.pop -> obj or nil
+ *
+ * Removes the last element from <i>self</i> and returns it, or
+ * <code>nil</code> if the array is empty.
+ *
+ * a = [ "a", "b", "c", "d" ]
+ * a.pop #=> "d"
+ * a.pop(2) #=> ["b", "c"]
+ * a #=> ["a"]
+ */
+
+static VALUE
+rb_ary_pop_m(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ VALUE result;
+
+ if (argc == 0) {
+ return rb_ary_pop(ary);
+ }
+
+ rb_ary_modify_check(ary);
+
+ result = ary_shared_last(argc, argv, ary);
+ RARRAY(ary)->len -= RARRAY(result)->len;
+ return result;
+}
+
+VALUE
+rb_ary_shift(ary)
+ VALUE ary;
+{
+ VALUE top;
+
+ rb_ary_modify_check(ary);
+ if (RARRAY(ary)->len == 0) return Qnil;
+ top = RARRAY(ary)->ptr[0];
+ ary_make_shared(ary);
+ RARRAY(ary)->ptr++; /* shift ptr */
+ RARRAY(ary)->len--;
+
+ return top;
+}
+
+/*
+ * call-seq:
+ * array.shift -> obj or nil
+ *
+ * Returns the first element of <i>self</i> and removes it (shifting all
+ * other elements down by one). Returns <code>nil</code> if the array
+ * is empty.
+ *
+ * args = [ "-m", "-q", "filename" ]
+ * args.shift #=> "-m"
+ * args #=> ["-q", "filename"]
+ *
+ * args = [ "-m", "-q", "filename" ]
+ * args.shift(2) #=> ["-m", "-q"]
+ * args #=> ["filename"]
+ */
+
+static VALUE
+rb_ary_shift_m(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ VALUE result;
+ long n;
+
+ if (argc == 0) {
+ return rb_ary_shift(ary);
+ }
+
+ rb_ary_modify_check(ary);
+
+ result = ary_shared_first(argc, argv, ary);
+ n = RARRAY(result)->len;
+ RARRAY(ary)->ptr += n;
+ RARRAY(ary)->len -= n;
+
+ return result;
+}
+
+VALUE
+rb_ary_unshift(ary, item)
+ VALUE ary, item;
+{
+ rb_ary_modify(ary);
+ if (RARRAY(ary)->len == RARRAY(ary)->aux.capa) {
+ long capa_inc = RARRAY(ary)->aux.capa / 2;
+ if (capa_inc < ARY_DEFAULT_SIZE) {
+ capa_inc = ARY_DEFAULT_SIZE;
+ }
+ RARRAY(ary)->aux.capa += capa_inc;
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->aux.capa);
+ }
+
+ /* sliding items */
+ MEMMOVE(RARRAY(ary)->ptr + 1, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len);
+
+ RARRAY(ary)->len++;
+ RARRAY(ary)->ptr[0] = item;
+
+ return ary;
+}
+
+/*
+ * call-seq:
+ * array.unshift(obj, ...) -> array
+ *
+ * Prepends objects to the front of <i>array</i>.
+ * other elements up one.
+ *
+ * a = [ "b", "c", "d" ]
+ * a.unshift("a") #=> ["a", "b", "c", "d"]
+ * a.unshift(1, 2) #=> [ 1, 2, "a", "b", "c", "d"]
+ */
+
+static VALUE
+rb_ary_unshift_m(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ long len = RARRAY(ary)->len;
+
+ if (argc == 0) return ary;
+
+ /* make rooms by setting the last item */
+ rb_ary_store(ary, len + argc - 1, Qnil);
+
+ /* sliding items */
+ MEMMOVE(RARRAY(ary)->ptr + argc, RARRAY(ary)->ptr, VALUE, len);
+ MEMCPY(RARRAY(ary)->ptr, argv, VALUE, argc);
+
+ return ary;
+}
+
+/* faster version - use this if you don't need to treat negative offset */
+static inline VALUE
+rb_ary_elt(ary, offset)
+ VALUE ary;
+ long offset;
+{
+ if (RARRAY(ary)->len == 0) return Qnil;
+ if (offset < 0 || RARRAY(ary)->len <= offset) {
+ return Qnil;
+ }
+ return RARRAY(ary)->ptr[offset];
+}
+
+VALUE
+rb_ary_entry(ary, offset)
+ VALUE ary;
+ long offset;
+{
+ if (offset < 0) {
+ offset += RARRAY(ary)->len;
+ }
+ return rb_ary_elt(ary, offset);
+}
+
+static VALUE
+rb_ary_subseq(ary, beg, len)
+ VALUE ary;
+ long beg, len;
+{
+ VALUE klass, ary2, shared;
+ VALUE *ptr;
+
+ if (beg > RARRAY(ary)->len) return Qnil;
+ if (beg < 0 || len < 0) return Qnil;
+
+ if (beg + len > RARRAY(ary)->len) {
+ len = RARRAY(ary)->len - beg;
+ if (len < 0)
+ len = 0;
+ }
+ klass = rb_obj_class(ary);
+ if (len == 0) return ary_new(klass, 0);
+
+ shared = ary_make_shared(ary);
+ ptr = RARRAY(ary)->ptr;
+ ary2 = ary_alloc(klass);
+ RARRAY(ary2)->ptr = ptr + beg;
+ RARRAY(ary2)->len = len;
+ RARRAY(ary2)->aux.shared = shared;
+ FL_SET(ary2, ELTS_SHARED);
+
+ return ary2;
+}
+
+/*
+ * call-seq:
+ * array[index] -> obj or nil
+ * array[start, length] -> an_array or nil
+ * array[range] -> an_array or nil
+ * array.slice(index) -> obj or nil
+ * array.slice(start, length) -> an_array or nil
+ * array.slice(range) -> an_array or nil
+ *
+ * Element Reference---Returns the element at _index_,
+ * or returns a subarray starting at _start_ and
+ * continuing for _length_ elements, or returns a subarray
+ * specified by _range_.
+ * Negative indices count backward from the end of the
+ * array (-1 is the last element). Returns nil if the index
+ * (or starting index) are out of range.
+ *
+ * a = [ "a", "b", "c", "d", "e" ]
+ * a[2] + a[0] + a[1] #=> "cab"
+ * a[6] #=> nil
+ * a[1, 2] #=> [ "b", "c" ]
+ * a[1..3] #=> [ "b", "c", "d" ]
+ * a[4..7] #=> [ "e" ]
+ * a[6..10] #=> nil
+ * a[-3, 3] #=> [ "c", "d", "e" ]
+ * # special cases
+ * a[5] #=> nil
+ * a[5, 1] #=> []
+ * a[5..10] #=> []
+ *
+ */
+
+VALUE
+rb_ary_aref(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ VALUE arg;
+ long beg, len;
+
+ if (argc == 2) {
+ beg = NUM2LONG(argv[0]);
+ len = NUM2LONG(argv[1]);
+ if (beg < 0) {
+ beg += RARRAY(ary)->len;
+ }
+ return rb_ary_subseq(ary, beg, len);
+ }
+ if (argc != 1) {
+ rb_scan_args(argc, argv, "11", 0, 0);
+ }
+ arg = argv[0];
+ /* special case - speeding up */
+ if (FIXNUM_P(arg)) {
+ return rb_ary_entry(ary, FIX2LONG(arg));
+ }
+ /* check if idx is Range */
+ switch (rb_range_beg_len(arg, &beg, &len, RARRAY(ary)->len, 0)) {
+ case Qfalse:
+ break;
+ case Qnil:
+ return Qnil;
+ default:
+ return rb_ary_subseq(ary, beg, len);
+ }
+ return rb_ary_entry(ary, NUM2LONG(arg));
+}
+
+/*
+ * call-seq:
+ * array.at(index) -> obj or nil
+ *
+ * Returns the element at _index_. A
+ * negative index counts from the end of _self_. Returns +nil+
+ * if the index is out of range. See also <code>Array#[]</code>.
+ * (<code>Array#at</code> is slightly faster than <code>Array#[]</code>,
+ * as it does not accept ranges and so on.)
+ *
+ * a = [ "a", "b", "c", "d", "e" ]
+ * a.at(0) #=> "a"
+ * a.at(-1) #=> "e"
+ */
+
+static VALUE
+rb_ary_at(ary, pos)
+ VALUE ary, pos;
+{
+ return rb_ary_entry(ary, NUM2LONG(pos));
+}
+
+/*
+ * call-seq:
+ * array.first -> obj or nil
+ * array.first(n) -> an_array
+ *
+ * Returns the first element of the array. If the array is empty,
+ * returns <code>nil</code>.
+ *
+ * a = [ "q", "r", "s", "t" ]
+ * a.first #=> "q"
+ * a.first(2) #=> ["q", "r"]
+ */
+
+static VALUE
+rb_ary_first(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ if (argc == 0) {
+ if (RARRAY(ary)->len == 0) return Qnil;
+ return RARRAY(ary)->ptr[0];
+ }
+ else {
+ return ary_shared_first(argc, argv, ary);
+ }
+}
+
+/*
+ * call-seq:
+ * array.last -> obj or nil
+ * array.last(n) -> an_array
+ *
+ * Returns the last element(s) of <i>self</i>. If the array is empty,
+ * the first form returns <code>nil</code>.
+ *
+ * a = [ "w", "x", "y", "z" ]
+ * a.last #=> "z"
+ * a.last(2) #=> ["y", "z"]
+ */
+
+static VALUE
+rb_ary_last(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ if (argc == 0) {
+ if (RARRAY(ary)->len == 0) return Qnil;
+ return RARRAY(ary)->ptr[RARRAY(ary)->len-1];
+ }
+ else {
+ return ary_shared_last(argc, argv, ary);
+ }
+}
+
+/*
+ * call-seq:
+ * array.fetch(index) -> obj
+ * array.fetch(index, default ) -> obj
+ * array.fetch(index) {|index| block } -> obj
+ *
+ * Tries to return the element at position <i>index</i>. If the index
+ * lies outside the array, the first form throws an
+ * <code>IndexError</code> exception, the second form returns
+ * <i>default</i>, and the third form returns the value of invoking
+ * the block, passing in the index. Negative values of <i>index</i>
+ * count from the end of the array.
+ *
+ * a = [ 11, 22, 33, 44 ]
+ * a.fetch(1) #=> 22
+ * a.fetch(-1) #=> 44
+ * a.fetch(4, 'cat') #=> "cat"
+ * a.fetch(4) { |i| i*i } #=> 16
+ */
+
+static VALUE
+rb_ary_fetch(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ VALUE pos, ifnone;
+ long block_given;
+ long idx;
+
+ rb_scan_args(argc, argv, "11", &pos, &ifnone);
+ block_given = rb_block_given_p();
+ if (block_given && argc == 2) {
+ rb_warn("block supersedes default value argument");
+ }
+ idx = NUM2LONG(pos);
+
+ if (idx < 0) {
+ idx += RARRAY(ary)->len;
+ }
+ if (idx < 0 || RARRAY(ary)->len <= idx) {
+ if (block_given) return rb_yield(pos);
+ if (argc == 1) {
+ rb_raise(rb_eIndexError, "index %ld out of array", idx);
+ }
+ return ifnone;
+ }
+ return RARRAY(ary)->ptr[idx];
+}
+
+/*
+ * call-seq:
+ * array.index(obj) -> int or nil
+ * array.index {|item| block} -> int or nil
+ *
+ * Returns the index of the first object in <i>self</i> such that is
+ * <code>==</code> to <i>obj</i>. If a block is given instead of an
+ * argument, returns first object for which <em>block</em> is true.
+ * Returns <code>nil</code> if no match is found.
+ *
+ * a = [ "a", "b", "c" ]
+ * a.index("b") #=> 1
+ * a.index("z") #=> nil
+ * a.index{|x|x=="b"} #=> 1
+ */
+
+static VALUE
+rb_ary_index(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ VALUE val;
+ long i;
+
+ if (rb_scan_args(argc, argv, "01", &val) == 0) {
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ if (RTEST(rb_yield(RARRAY(ary)->ptr[i]))) {
+ return LONG2NUM(i);
+ }
+ }
+ }
+ else {
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ if (rb_equal(RARRAY(ary)->ptr[i], val))
+ return LONG2NUM(i);
+ }
+ }
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * array.rindex(obj) -> int or nil
+ *
+ * Returns the index of the last object in <i>array</i>
+ * <code>==</code> to <i>obj</i>. If a block is given instead of an
+ * argument, returns first object for which <em>block</em> is
+ * true. Returns <code>nil</code> if no match is found.
+ *
+ * a = [ "a", "b", "b", "b", "c" ]
+ * a.rindex("b") #=> 3
+ * a.rindex("z") #=> nil
+ * a.rindex{|x|x=="b"} #=> 3
+ */
+
+static VALUE
+rb_ary_rindex(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ VALUE val;
+ long i = RARRAY(ary)->len;
+
+ if (rb_scan_args(argc, argv, "01", &val) == 0) {
+ while (i--) {
+ if (RTEST(rb_yield(RARRAY(ary)->ptr[i])))
+ return LONG2NUM(i);
+ if (i > RARRAY(ary)->len) {
+ i = RARRAY(ary)->len;
+ }
+ }
+ }
+ else {
+ while (i--) {
+ if (rb_equal(RARRAY(ary)->ptr[i], val))
+ return LONG2NUM(i);
+ if (i > RARRAY(ary)->len) {
+ i = RARRAY(ary)->len;
+ }
+ }
+ }
+ return Qnil;
+}
+
+VALUE
+rb_ary_to_ary(obj)
+ VALUE obj;
+{
+ if (TYPE(obj) == T_ARRAY) {
+ return obj;
+ }
+ if (rb_respond_to(obj, rb_intern("to_ary"))) {
+ return to_ary(obj);
+ }
+ return rb_ary_new3(1, obj);
+}
+
+static void
+rb_ary_splice(ary, beg, len, rpl)
+ VALUE ary;
+ long beg, len;
+ VALUE rpl;
+{
+ long rlen;
+
+ if (len < 0) rb_raise(rb_eIndexError, "negative length (%ld)", len);
+ if (beg < 0) {
+ beg += RARRAY(ary)->len;
+ if (beg < 0) {
+ beg -= RARRAY(ary)->len;
+ rb_raise(rb_eIndexError, "index %ld out of array", beg);
+ }
+ }
+ if (beg + len > RARRAY(ary)->len) {
+ len = RARRAY(ary)->len - beg;
+ }
+
+ if (rpl == Qundef) {
+ rlen = 0;
+ }
+ else {
+ rpl = rb_ary_to_ary(rpl);
+ rlen = RARRAY(rpl)->len;
+ }
+ rb_ary_modify(ary);
+
+ if (beg >= RARRAY(ary)->len) {
+ len = beg + rlen;
+ if (len >= RARRAY(ary)->aux.capa) {
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, len);
+ RARRAY(ary)->aux.capa = len;
+ }
+ rb_mem_clear(RARRAY(ary)->ptr + RARRAY(ary)->len, beg - RARRAY(ary)->len);
+ if (rlen > 0) {
+ MEMCPY(RARRAY(ary)->ptr + beg, RARRAY(rpl)->ptr, VALUE, rlen);
+ }
+ RARRAY(ary)->len = len;
+ }
+ else {
+ long alen;
+
+ if (beg + len > RARRAY(ary)->len) {
+ len = RARRAY(ary)->len - beg;
+ }
+
+ alen = RARRAY(ary)->len + rlen - len;
+ if (alen >= RARRAY(ary)->aux.capa) {
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, alen);
+ RARRAY(ary)->aux.capa = alen;
+ }
+
+ if (len != rlen) {
+ MEMMOVE(RARRAY(ary)->ptr + beg + rlen, RARRAY(ary)->ptr + beg + len,
+ VALUE, RARRAY(ary)->len - (beg + len));
+ RARRAY(ary)->len = alen;
+ }
+ if (rlen > 0) {
+ MEMMOVE(RARRAY(ary)->ptr + beg, RARRAY(rpl)->ptr, VALUE, rlen);
+ }
+ }
+}
+
+/*
+ * call-seq:
+ * array[index] = obj -> obj
+ * array[start, length] = obj or an_array or nil -> obj or an_array or nil
+ * array[range] = obj or an_array or nil -> obj or an_array or nil
+ *
+ * Element Assignment---Sets the element at _index_,
+ * or replaces a subarray starting at _start_ and
+ * continuing for _length_ elements, or replaces a subarray
+ * specified by _range_. If indices are greater than
+ * the current capacity of the array, the array grows
+ * automatically. A negative indices will count backward
+ * from the end of the array. Inserts elements if _length_ is
+ * zero. An +IndexError+ is raised if a negative index points
+ * past the beginning of the array. See also
+ * <code>Array#push</code>, and <code>Array#unshift</code>.
+ *
+ * a = Array.new
+ * a[4] = "4"; #=> [nil, nil, nil, nil, "4"]
+ * a[0, 3] = [ 'a', 'b', 'c' ] #=> ["a", "b", "c", nil, "4"]
+ * a[1..2] = [ 1, 2 ] #=> ["a", 1, 2, nil, "4"]
+ * a[0, 2] = "?" #=> ["?", 2, nil, "4"]
+ * a[0..2] = "A" #=> ["A", "4"]
+ * a[-1] = "Z" #=> ["A", "Z"]
+ * a[1..-1] = nil #=> ["A", nil]
+ * a[1..-1] = [] #=> ["A"]
+ */
+
+static VALUE
+rb_ary_aset(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ long offset, beg, len;
+
+ if (argc == 3) {
+ rb_ary_splice(ary, NUM2LONG(argv[0]), NUM2LONG(argv[1]), argv[2]);
+ return argv[2];
+ }
+ if (argc != 2) {
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)", argc);
+ }
+ if (FIXNUM_P(argv[0])) {
+ offset = FIX2LONG(argv[0]);
+ goto fixnum;
+ }
+ if (rb_range_beg_len(argv[0], &beg, &len, RARRAY(ary)->len, 1)) {
+ /* check if idx is Range */
+ rb_ary_splice(ary, beg, len, argv[1]);
+ return argv[1];
+ }
+
+ offset = NUM2LONG(argv[0]);
+fixnum:
+ rb_ary_store(ary, offset, argv[1]);
+ return argv[1];
+}
+
+/*
+ * call-seq:
+ * array.insert(index, obj...) -> array
+ *
+ * Inserts the given values before the element with the given index
+ * (which may be negative).
+ *
+ * a = %w{ a b c d }
+ * a.insert(2, 99) #=> ["a", "b", 99, "c", "d"]
+ * a.insert(-2, 1, 2, 3) #=> ["a", "b", 99, "c", 1, 2, 3, "d"]
+ */
+
+static VALUE
+rb_ary_insert(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ long pos;
+
+ if (argc < 1) {
+ rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");
+ }
+ pos = NUM2LONG(argv[0]);
+ if (pos == -1) {
+ pos = RARRAY(ary)->len;
+ }
+ else if (pos < 0) {
+ pos++;
+ }
+
+ if (argc == 1) return ary;
+ rb_ary_splice(ary, pos, 0, rb_ary_new4(argc - 1, argv + 1));
+ return ary;
+}
+
+/*
+ * call-seq:
+ * array.each {|item| block } -> array
+ *
+ * Calls <i>block</i> once for each element in <i>self</i>, passing that
+ * element as a parameter.
+ *
+ * a = [ "a", "b", "c" ]
+ * a.each {|x| print x, " -- " }
+ *
+ * produces:
+ *
+ * a -- b -- c --
+ */
+
+VALUE
+rb_ary_each(ary)
+ VALUE ary;
+{
+ long i;
+
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ rb_yield(RARRAY(ary)->ptr[i]);
+ }
+ return ary;
+}
+
+/*
+ * call-seq:
+ * array.each_index {|index| block } -> array
+ *
+ * Same as <code>Array#each</code>, but passes the index of the element
+ * instead of the element itself.
+ *
+ * a = [ "a", "b", "c" ]
+ * a.each_index {|x| print x, " -- " }
+ *
+ * produces:
+ *
+ * 0 -- 1 -- 2 --
+ */
+
+static VALUE
+rb_ary_each_index(ary)
+ VALUE ary;
+{
+ long i;
+
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ rb_yield(LONG2NUM(i));
+ }
+ return ary;
+}
+
+/*
+ * call-seq:
+ * array.reverse_each {|item| block }
+ *
+ * Same as <code>Array#each</code>, but traverses <i>self</i> in reverse
+ * order.
+ *
+ * a = [ "a", "b", "c" ]
+ * a.reverse_each {|x| print x, " " }
+ *
+ * produces:
+ *
+ * c b a
+ */
+
+static VALUE
+rb_ary_reverse_each(ary)
+ VALUE ary;
+{
+ long len = RARRAY(ary)->len;
+
+ while (len--) {
+ rb_yield(RARRAY(ary)->ptr[len]);
+ if (RARRAY(ary)->len < len) {
+ len = RARRAY(ary)->len;
+ }
+ }
+ return ary;
+}
+
+/*
+ * call-seq:
+ * array.length -> int
+ *
+ * Returns the number of elements in <i>self</i>. May be zero.
+ *
+ * [ 1, 2, 3, 4, 5 ].length #=> 5
+ */
+
+static VALUE
+rb_ary_length(ary)
+ VALUE ary;
+{
+ return LONG2NUM(RARRAY(ary)->len);
+}
+
+/*
+ * call-seq:
+ * array.empty? -> true or false
+ *
+ * Returns <code>true</code> if <i>self</i> array contains no elements.
+ *
+ * [].empty? #=> true
+ */
+
+static VALUE
+rb_ary_empty_p(ary)
+ VALUE ary;
+{
+ if (RARRAY(ary)->len == 0)
+ return Qtrue;
+ return Qfalse;
+}
+
+VALUE
+rb_ary_dup(ary)
+ VALUE ary;
+{
+ VALUE dup = rb_ary_new2(RARRAY(ary)->len);
+
+ DUPSETUP(dup, ary);
+ MEMCPY(RARRAY(dup)->ptr, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len);
+ RARRAY(dup)->len = RARRAY(ary)->len;
+ return dup;
+}
+
+extern VALUE rb_output_fs;
+
+static VALUE
+recursive_join(ary, arg, recur)
+ VALUE ary;
+ VALUE *arg;
+ int recur;
+{
+ if (recur) {
+ return rb_str_new2("[...]");
+ }
+ return rb_ary_join(arg[0], arg[1]);
+}
+
+VALUE
+rb_ary_join(ary, sep)
+ VALUE ary, sep;
+{
+ long len = 1, i;
+ int taint = Qfalse;
+ VALUE result, tmp;
+
+ if (RARRAY(ary)->len == 0) return rb_str_new(0, 0);
+ if (OBJ_TAINTED(ary) || OBJ_TAINTED(sep)) taint = Qtrue;
+
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ tmp = rb_check_string_type(RARRAY(ary)->ptr[i]);
+ len += NIL_P(tmp) ? 10 : RSTRING(tmp)->len;
+ }
+ if (!NIL_P(sep)) {
+ StringValue(sep);
+ len += RSTRING(sep)->len * (RARRAY(ary)->len - 1);
+ }
+ result = rb_str_buf_new(len);
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ tmp = RARRAY(ary)->ptr[i];
+ switch (TYPE(tmp)) {
+ case T_STRING:
+ break;
+ case T_ARRAY:
+ {
+ VALUE args[2];
+
+ args[0] = tmp;
+ args[1] = sep;
+ tmp = rb_exec_recursive(recursive_join, ary, (VALUE)args);
+ }
+ break;
+ default:
+ tmp = rb_obj_as_string(tmp);
+ }
+ if (i > 0 && !NIL_P(sep))
+ rb_str_buf_append(result, sep);
+ rb_str_buf_append(result, tmp);
+ if (OBJ_TAINTED(tmp)) taint = Qtrue;
+ }
+
+ if (taint) OBJ_TAINT(result);
+ return result;
+}
+
+/*
+ * call-seq:
+ * array.join(sep=$,) -> str
+ *
+ * Returns a string created by converting each element of the array to
+ * a string, separated by <i>sep</i>.
+ *
+ * [ "a", "b", "c" ].join #=> "abc"
+ * [ "a", "b", "c" ].join("-") #=> "a-b-c"
+ */
+
+static VALUE
+rb_ary_join_m(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ VALUE sep;
+
+ rb_scan_args(argc, argv, "01", &sep);
+ if (NIL_P(sep)) sep = rb_output_fs;
+
+ return rb_ary_join(ary, sep);
+}
+
+/*
+ * call-seq:
+ * array.to_s -> string
+ *
+ * Returns _self_<code>.join</code>.
+ *
+ * [ "a", "e", "i", "o" ].to_s #=> "aeio"
+ *
+ */
+
+VALUE
+rb_ary_to_s(ary)
+ VALUE ary;
+{
+ if (RARRAY(ary)->len == 0) return rb_str_new(0, 0);
+
+ return rb_ary_join(ary, rb_output_fs);
+}
+
+static VALUE
+inspect_ary(ary, dummy, recur)
+ VALUE ary;
+ VALUE dummy;
+ int recur;
+{
+ int tainted = OBJ_TAINTED(ary);
+ long i;
+ VALUE s, str;
+
+ if (recur) return rb_tainted_str_new2("[...]");
+ str = rb_str_buf_new2("[");
+ for (i=0; i<RARRAY(ary)->len; i++) {
+ s = rb_inspect(RARRAY(ary)->ptr[i]);
+ if (OBJ_TAINTED(s)) tainted = Qtrue;
+ if (i > 0) rb_str_buf_cat2(str, ", ");
+ rb_str_buf_append(str, s);
+ }
+ rb_str_buf_cat2(str, "]");
+ if (tainted) OBJ_TAINT(str);
+ return str;
+}
+
+/*
+ * call-seq:
+ * array.inspect -> string
+ *
+ * Create a printable version of <i>array</i>.
+ */
+
+static VALUE
+rb_ary_inspect(ary)
+ VALUE ary;
+{
+ if (RARRAY(ary)->len == 0) return rb_str_new2("[]");
+ return rb_exec_recursive(inspect_ary, ary, 0);
+}
+
+/*
+ * call-seq:
+ * array.to_a -> array
+ *
+ * Returns _self_. If called on a subclass of Array, converts
+ * the receiver to an Array object.
+ */
+
+static VALUE
+rb_ary_to_a(ary)
+ VALUE ary;
+{
+ if (rb_obj_class(ary) != rb_cArray) {
+ VALUE dup = rb_ary_new2(RARRAY(ary)->len);
+ rb_ary_replace(dup, ary);
+ return dup;
+ }
+ return ary;
+}
+
+/*
+ * call-seq:
+ * array.to_ary -> array
+ *
+ * Returns _self_.
+ */
+
+static VALUE
+rb_ary_to_ary_m(ary)
+ VALUE ary;
+{
+ return ary;
+}
+
+VALUE
+rb_ary_reverse(ary)
+ VALUE ary;
+{
+ VALUE *p1, *p2;
+ VALUE tmp;
+
+ rb_ary_modify(ary);
+ if (RARRAY(ary)->len > 1) {
+ p1 = RARRAY(ary)->ptr;
+ p2 = p1 + RARRAY(ary)->len - 1; /* points last item */
+
+ while (p1 < p2) {
+ tmp = *p1;
+ *p1++ = *p2;
+ *p2-- = tmp;
+ }
+ }
+ return ary;
+}
+
+/*
+ * call-seq:
+ * array.reverse! -> array
+ *
+ * Reverses _self_ in place.
+ *
+ * a = [ "a", "b", "c" ]
+ * a.reverse! #=> ["c", "b", "a"]
+ * a #=> ["c", "b", "a"]
+ */
+
+static VALUE
+rb_ary_reverse_bang(ary)
+ VALUE ary;
+{
+ return rb_ary_reverse(ary);
+}
+
+/*
+ * call-seq:
+ * array.reverse -> an_array
+ *
+ * Returns a new array containing <i>self</i>'s elements in reverse order.
+ *
+ * [ "a", "b", "c" ].reverse #=> ["c", "b", "a"]
+ * [ 1 ].reverse #=> [1]
+ */
+
+static VALUE
+rb_ary_reverse_m(ary)
+ VALUE ary;
+{
+ return rb_ary_reverse(rb_ary_dup(ary));
+}
+
+struct ary_sort_data {
+ VALUE ary;
+ VALUE *ptr;
+ long len;
+};
+
+static void
+ary_sort_check(data)
+ struct ary_sort_data *data;
+{
+ if (RARRAY(data->ary)->ptr != data->ptr || RARRAY(data->ary)->len != data->len) {
+ rb_raise(rb_eRuntimeError, "array modified during sort");
+ }
+}
+
+static int
+sort_1(a, b, data)
+ VALUE *a, *b;
+ struct ary_sort_data *data;
+{
+ VALUE retval = rb_yield_values(2, *a, *b);
+ int n;
+
+ n = rb_cmpint(retval, *a, *b);
+ ary_sort_check(data);
+ return n;
+}
+
+static int
+sort_2(ap, bp, data)
+ VALUE *ap, *bp;
+ struct ary_sort_data *data;
+{
+ VALUE retval;
+ VALUE a = *ap, b = *bp;
+ int n;
+
+ if (FIXNUM_P(a) && FIXNUM_P(b)) {
+ if ((long)a > (long)b) return 1;
+ if ((long)a < (long)b) return -1;
+ return 0;
+ }
+ if (TYPE(a) == T_STRING && TYPE(b) == T_STRING) {
+ return rb_str_cmp(a, b);
+ }
+
+ retval = rb_funcall(a, id_cmp, 1, b);
+ n = rb_cmpint(retval, a, b);
+ ary_sort_check(data);
+
+ return n;
+}
+
+static VALUE
+sort_internal(ary)
+ VALUE ary;
+{
+ struct ary_sort_data data;
+
+ data.ary = ary;
+ data.ptr = RARRAY(ary)->ptr; data.len = RARRAY(ary)->len;
+ qsort(RARRAY(ary)->ptr, RARRAY(ary)->len, sizeof(VALUE),
+ rb_block_given_p()?sort_1:sort_2, &data);
+ return ary;
+}
+
+static VALUE
+sort_unlock(ary)
+ VALUE ary;
+{
+ FL_UNSET(ary, ARY_TMPLOCK);
+ return ary;
+}
+
+/*
+ * call-seq:
+ * array.sort! -> array
+ * array.sort! {| a,b | block } -> array
+ *
+ * Sorts _self_. Comparisons for
+ * the sort will be done using the <code><=></code> operator or using
+ * an optional code block. The block implements a comparison between
+ * <i>a</i> and <i>b</i>, returning -1, 0, or +1. See also
+ * <code>Enumerable#sort_by</code>.
+ *
+ * a = [ "d", "a", "e", "c", "b" ]
+ * a.sort #=> ["a", "b", "c", "d", "e"]
+ * a.sort {|x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
+ */
+
+VALUE
+rb_ary_sort_bang(ary)
+ VALUE ary;
+{
+ rb_ary_modify(ary);
+ if (RARRAY(ary)->len > 1) {
+ FL_SET(ary, ARY_TMPLOCK); /* prohibit modification during sort */
+ rb_ensure(sort_internal, ary, sort_unlock, ary);
+ }
+ return ary;
+}
+
+/*
+ * call-seq:
+ * array.sort -> an_array
+ * array.sort {| a,b | block } -> an_array
+ *
+ * Returns a new array created by sorting <i>self</i>. Comparisons for
+ * the sort will be done using the <code><=></code> operator or using
+ * an optional code block. The block implements a comparison between
+ * <i>a</i> and <i>b</i>, returning -1, 0, or +1. See also
+ * <code>Enumerable#sort_by</code>.
+ *
+ * a = [ "d", "a", "e", "c", "b" ]
+ * a.sort #=> ["a", "b", "c", "d", "e"]
+ * a.sort {|x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
+ */
+
+VALUE
+rb_ary_sort(ary)
+ VALUE ary;
+{
+ ary = rb_ary_dup(ary);
+ rb_ary_sort_bang(ary);
+ return ary;
+}
+
+/*
+ * call-seq:
+ * array.collect {|item| block } -> an_array
+ * array.map {|item| block } -> an_array
+ *
+ * Invokes <i>block</i> once for each element of <i>self</i>. Creates a
+ * new array containing the values returned by the block.
+ * See also <code>Enumerable#collect</code>.
+ *
+ * a = [ "a", "b", "c", "d" ]
+ * a.collect {|x| x + "!" } #=> ["a!", "b!", "c!", "d!"]
+ * a #=> ["a", "b", "c", "d"]
+ */
+
+static VALUE
+rb_ary_collect(ary)
+ VALUE ary;
+{
+ long i;
+ VALUE collect;
+
+ if (!rb_block_given_p()) {
+ return rb_ary_new4(RARRAY(ary)->len, RARRAY(ary)->ptr);
+ }
+
+ collect = rb_ary_new2(RARRAY(ary)->len);
+ for (i = 0; i < RARRAY(ary)->len; i++) {
+ rb_ary_push(collect, rb_yield(RARRAY(ary)->ptr[i]));
+ }
+ return collect;
+}
+
+/*
+ * call-seq:
+ * array.collect! {|item| block } -> array
+ * array.map! {|item| block } -> array
+ *
+ * Invokes the block once for each element of _self_, replacing the
+ * element with the value returned by _block_.
+ * See also <code>Enumerable#collect</code>.
+ *
+ * a = [ "a", "b", "c", "d" ]
+ * a.collect! {|x| x + "!" }
+ * a #=> [ "a!", "b!", "c!", "d!" ]
+ */
+
+static VALUE
+rb_ary_collect_bang(ary)
+ VALUE ary;
+{
+ long i;
+
+ rb_ary_modify(ary);
+ for (i = 0; i < RARRAY(ary)->len; i++) {
+ rb_ary_store(ary, i, rb_yield(RARRAY(ary)->ptr[i]));
+ }
+ return ary;
+}
+
+VALUE
+rb_get_values_at(obj, olen, argc, argv, func)
+ VALUE obj;
+ long olen;
+ int argc;
+ VALUE *argv;
+ VALUE (*func) _((VALUE,long));
+{
+ VALUE result = rb_ary_new2(argc);
+ long beg, len, i, j;
+
+ for (i=0; i<argc; i++) {
+ if (FIXNUM_P(argv[i])) {
+ rb_ary_push(result, (*func)(obj, FIX2LONG(argv[i])));
+ continue;
+ }
+ /* check if idx is Range */
+ switch (rb_range_beg_len(argv[i], &beg, &len, olen, 0)) {
+ case Qfalse:
+ break;
+ case Qnil:
+ continue;
+ default:
+ for (j=0; j<len; j++) {
+ rb_ary_push(result, (*func)(obj, j+beg));
+ }
+ continue;
+ }
+ rb_ary_push(result, (*func)(obj, NUM2LONG(argv[i])));
+ }
+ return result;
+}
+
+/*
+ * call-seq:
+ * array.values_at(selector,... ) -> an_array
+ *
+ * Returns an array containing the elements in
+ * _self_ corresponding to the given selector(s). The selectors
+ * may be either integer indices or ranges.
+ * See also <code>Array#select</code>.
+ *
+ * a = %w{ a b c d e f }
+ * a.values_at(1, 3, 5)
+ * a.values_at(1, 3, 5, 7)
+ * a.values_at(-1, -3, -5, -7)
+ * a.values_at(1..3, 2...5)
+ */
+
+static VALUE
+rb_ary_values_at(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ return rb_get_values_at(ary, RARRAY(ary)->len, argc, argv, rb_ary_entry);
+}
+
+/*
+ * call-seq:
+ * array.select {|item| block } -> an_array
+ *
+ * Invokes the block passing in successive elements from <i>array</i>,
+ * returning an array containing those elements for which the block
+ * returns a true value (equivalent to <code>Enumerable#select</code>).
+ *
+ * a = %w{ a b c d e f }
+ * a.select {|v| v =~ /[aeiou]/} #=> ["a", "e"]
+ */
+
+static VALUE
+rb_ary_select(ary)
+ VALUE ary;
+{
+ VALUE result;
+ long i;
+
+ result = rb_ary_new2(RARRAY(ary)->len);
+ for (i = 0; i < RARRAY(ary)->len; i++) {
+ if (RTEST(rb_yield(RARRAY(ary)->ptr[i]))) {
+ rb_ary_push(result, rb_ary_elt(ary, i));
+ }
+ }
+ return result;
+}
+
+
+---tokens---
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text
+'<string.h>' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text
+'<stdlib.h>' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text
+'<stdio.h>' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text
+'"codegen.h"' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text
+'"symboltable.h"' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text
+'"stringbuffer.h"' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'\n' Text
+
+'extern' Keyword
+' ' Text
+'void' Keyword.Type
+' ' Text
+'yyerror' Name
+'(' Punctuation
+'char' Keyword.Type
+'*' Operator
+' ' Text
+'msg' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'stringBuffer' Name
+'*' Operator
+' ' Text
+'staticVariableBuffer' Name
+';' Punctuation
+'\n' Text
+
+'static' Keyword
+' ' Text
+'stringBuffer' Name
+'*' Operator
+' ' Text
+'classInitBuffer' Name
+';' Punctuation
+'\n' Text
+
+'static' Keyword
+' ' Text
+'stringBuffer' Name
+'*' Operator
+' ' Text
+'currentMethodBuffer' Name
+';' Punctuation
+'\n' Text
+
+'static' Keyword
+' ' Text
+'stringBuffer' Name
+'*' Operator
+' ' Text
+'finishedMethodsBuffer' Name
+';' Punctuation
+'\n' Text
+
+'static' Keyword
+' ' Text
+'stringBuffer' Name
+'*' Operator
+' ' Text
+'mainBuffer' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'int' Keyword.Type
+' ' Text
+'currentMethodBufferIndex' Name
+';' Punctuation
+'\n' Text
+
+'static' Keyword
+' ' Text
+'int' Keyword.Type
+' ' Text
+'currentMethodStackSize' Name
+';' Punctuation
+'\n' Text
+
+'static' Keyword
+' ' Text
+'int' Keyword.Type
+' ' Text
+'currentMethodStackSizeMax' Name
+';' Punctuation
+'\n' Text
+
+'static' Keyword
+' ' Text
+'int' Keyword.Type
+' ' Text
+'currentMethodNumberOfLocals' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'int' Keyword.Type
+' ' Text
+'classInitBufferIndex' Name
+';' Punctuation
+'\n' Text
+
+'static' Keyword
+' ' Text
+'int' Keyword.Type
+' ' Text
+'classInitStackSize' Name
+';' Punctuation
+'\n' Text
+
+'static' Keyword
+' ' Text
+'int' Keyword.Type
+' ' Text
+'classInitStackSizeMax' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'int' Keyword.Type
+' ' Text
+'labelCounter' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'static' Keyword
+' ' Text
+'int' Keyword.Type
+' ' Text
+'global' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'char' Keyword.Type
+' ' Text
+'tempString' Name
+'[' Punctuation
+'MAX_LENGTH_OF_COMMAND' Name
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'extern' Keyword
+' ' Text
+'char' Keyword.Type
+'*' Operator
+' ' Text
+'className' Name
+';' Punctuation
+' ' Text
+'/* from minako-syntax.y */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'/* forward declarations */' Comment.Multiline
+'\n' Text
+
+'static' Keyword
+' ' Text
+'void' Keyword.Type
+' ' Text
+'increaseStackby' Name
+'(' Punctuation
+'int' Keyword.Type
+' ' Text
+'stackdiff' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'char' Keyword.Type
+' ' Text
+'convertType' Name.Function
+'(' Punctuation
+'int' Keyword.Type
+' ' Text
+'type' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'void' Keyword.Type
+' ' Text
+'codegenInit' Name.Function
+'(' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'staticVariableBuffer' Name
+' ' Text
+'=' Operator
+' ' Text
+'newStringBuffer' Name
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'classInitBuffer' Name
+' ' Text
+'=' Operator
+' ' Text
+'newStringBuffer' Name
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'currentMethodBuffer' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'finishedMethodsBuffer' Name
+' ' Text
+'=' Operator
+' ' Text
+'newStringBuffer' Name
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'mainBuffer' Name
+' ' Text
+'=' Operator
+' ' Text
+'newStringBuffer' Name
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'mainBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'; ------- Header --------------------------------------------' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+' \n\t' Text
+'sprintf' Name
+'(' Punctuation
+'tempString' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'.class public synchronized %s' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'className' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'mainBuffer' Name
+',' Punctuation
+' ' Text
+'tempString' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'mainBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'.super java/lang/Object' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'mainBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'; -----------------------------------------------------------' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'mainBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t\n\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'finishedMethodsBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'; ------- Constructor ---------------------------------------' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'finishedMethodsBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'.method public <init>()V' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'finishedMethodsBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'\\t' Literal.String.Escape
+'.limit stack 1' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'finishedMethodsBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'\\t' Literal.String.Escape
+'.limit locals 1' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'finishedMethodsBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'\\t' Literal.String.Escape
+'aload_0' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'finishedMethodsBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'\\t' Literal.String.Escape
+'invokenonvirtual java/lang/Object/<init>()V' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'finishedMethodsBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'\\t' Literal.String.Escape
+'return' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'finishedMethodsBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'.end method' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'finishedMethodsBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'; -----------------------------------------------------------' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'finishedMethodsBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'staticVariableBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'; ------- Class Variables -----------------------------------' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'classInitBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'; ------- Class Initializer ---------------------------------' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'classInitBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'.method static <clinit>()V' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'classInitBufferIndex' Name
+' ' Text
+'=' Operator
+' ' Text
+'classInitBuffer' Name
+'-' Operator
+'>' Operator
+'numberOfNextElement' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'classInitBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'\\t' Literal.String.Escape
+'.limit locals 0' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'void' Keyword.Type
+' ' Text
+'codegenAppendCommand' Name.Function
+'(' Punctuation
+'char' Keyword.Type
+'*' Operator
+' ' Text
+'cmd' Name
+',' Punctuation
+' ' Text
+'int' Keyword.Type
+' ' Text
+'stackdiff' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'char' Keyword.Type
+' ' Text
+'tempString' Name
+'[' Punctuation
+'MAX_LENGTH_OF_COMMAND' Name
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'sprintf' Name
+'(' Punctuation
+'tempString' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'\\t' Literal.String.Escape
+'%s' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'cmd' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'global' Name
+')' Punctuation
+' ' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'classInitBuffer' Name
+',' Punctuation
+' ' Text
+'tempString' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'else' Keyword
+' ' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'currentMethodBuffer' Name
+',' Punctuation
+' ' Text
+'tempString' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'increaseStackby' Name
+'(' Punctuation
+'stackdiff' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'void' Keyword.Type
+' ' Text
+'codegenInsertCommand' Name.Function
+'(' Punctuation
+'int' Keyword.Type
+' ' Text
+'address' Name
+',' Punctuation
+' ' Text
+'char' Keyword.Type
+'*' Operator
+' ' Text
+'cmd' Name
+',' Punctuation
+' ' Text
+'int' Keyword.Type
+' ' Text
+'stackdiff' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'char' Keyword.Type
+' ' Text
+'tempString' Name
+'[' Punctuation
+'MAX_LENGTH_OF_COMMAND' Name
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'sprintf' Name
+'(' Punctuation
+'tempString' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'\\t' Literal.String.Escape
+'%s' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'cmd' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'global' Name
+')' Punctuation
+' ' Text
+'stringBufferInsert' Name
+'(' Punctuation
+'classInitBuffer' Name
+',' Punctuation
+' ' Text
+'address' Name
+',' Punctuation
+' ' Text
+'tempString' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'else' Keyword
+' ' Text
+'stringBufferInsert' Name
+'(' Punctuation
+'currentMethodBuffer' Name
+',' Punctuation
+' ' Text
+'address' Name
+',' Punctuation
+' ' Text
+'tempString' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'increaseStackby' Name
+'(' Punctuation
+'stackdiff' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'void' Keyword.Type
+' ' Text
+'codegenAppendLabel' Name.Function
+'(' Punctuation
+'int' Keyword.Type
+' ' Text
+'label' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'char' Keyword.Type
+' ' Text
+'tempString' Name
+'[' Punctuation
+'MAX_LENGTH_OF_COMMAND' Name
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'sprintf' Name
+'(' Punctuation
+'tempString' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'Label%d:' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'label' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'global' Name
+')' Punctuation
+' ' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'classInitBuffer' Name
+',' Punctuation
+' ' Text
+'tempString' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'else' Keyword
+' ' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'currentMethodBuffer' Name
+',' Punctuation
+' ' Text
+'tempString' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'void' Keyword.Type
+' ' Text
+'codegenAddVariable' Name.Function
+'(' Punctuation
+'char' Keyword.Type
+'*' Operator
+' ' Text
+'name' Name
+',' Punctuation
+' ' Text
+'int' Keyword.Type
+' ' Text
+'type' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'/*fprintf(stderr, "add variable %s(%d) global=%d ", name, convertType(type), global);*/' Comment.Multiline
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'global' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'type' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'TYPE_INT' Name
+')' Punctuation
+' ' Text
+'sprintf' Name
+'(' Punctuation
+'tempString' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'.field static %s %c' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'name' Name
+',' Punctuation
+' ' Text
+"'" Literal.String.Char
+'I' Literal.String.Char
+"'" Literal.String.Char
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'else' Keyword
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'type' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'TYPE_FLOAT' Name
+')' Punctuation
+' ' Text
+'sprintf' Name
+'(' Punctuation
+'tempString' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'.field static %s %c' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'name' Name
+',' Punctuation
+' ' Text
+"'" Literal.String.Char
+'F' Literal.String.Char
+"'" Literal.String.Char
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'else' Keyword
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'type' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'TYPE_BOOLEAN' Name
+')' Punctuation
+' ' Text
+'sprintf' Name
+'(' Punctuation
+'tempString' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'.field static %s %c' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'name' Name
+',' Punctuation
+' ' Text
+"'" Literal.String.Char
+'Z' Literal.String.Char
+"'" Literal.String.Char
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'else' Keyword
+' ' Text
+'yyerror' Name
+'(' Punctuation
+'"' Literal.String
+'compiler-intern error in codegenAddGlobalVariable().' Literal.String
+'\\n' Literal.String.Escape
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'staticVariableBuffer' Name
+',' Punctuation
+' ' Text
+'tempString' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'else' Keyword
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t\t' Text
+'currentMethodNumberOfLocals' Name
+'+' Operator
+'+' Operator
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'int' Keyword.Type
+' ' Text
+'codegenGetNextLabel' Name.Function
+'(' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'labelCounter' Name
+'+' Operator
+'+' Operator
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'int' Keyword.Type
+' ' Text
+'codegenGetCurrentAddress' Name.Function
+'(' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'global' Name
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'classInitBuffer' Name
+'-' Operator
+'>' Operator
+'numberOfNextElement' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'else' Keyword
+' ' Text
+'return' Keyword
+' ' Text
+'currentMethodBuffer' Name
+'-' Operator
+'>' Operator
+'numberOfNextElement' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'void' Keyword.Type
+' ' Text
+'codegenEnterFunction' Name.Function
+'(' Punctuation
+'symtabEntry' Name
+'*' Operator
+' ' Text
+'entry' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'currentMethodBuffer' Name
+' ' Text
+'=' Operator
+' ' Text
+'newStringBuffer' Name
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'currentMethodStackSize' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'currentMethodStackSizeMax' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'labelCounter' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'global' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t\n\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'strcmp' Name
+'(' Punctuation
+'entry' Name
+'-' Operator
+'>' Operator
+'name' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'main' Literal.String
+'"' Literal.String
+')' Punctuation
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'entry' Name
+'-' Operator
+'>' Operator
+'idtype' Name
+' ' Text
+'!' Operator
+'=' Operator
+' ' Text
+'TYPE_VOID' Name
+')' Punctuation
+' ' Text
+'yyerror' Name
+'(' Punctuation
+'"' Literal.String
+'main has to be void.' Literal.String
+'\\n' Literal.String.Escape
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'currentMethodNumberOfLocals' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'symtabInsert' Name
+'(' Punctuation
+'strdup' Name
+'(' Punctuation
+'"' Literal.String
+'#main-param#' Literal.String
+'"' Literal.String
+')' Punctuation
+',' Punctuation
+' ' Text
+'TYPE_VOID' Name
+',' Punctuation
+' ' Text
+'CLASS_FUNC' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'currentMethodBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'; ------- Methode ---- void main() --------------------------' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'currentMethodBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'.method public static main([Ljava/lang/String;)V' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'else' Keyword
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t\t' Text
+'int' Keyword.Type
+' ' Text
+'i' Name
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'currentMethodNumberOfLocals' Name
+' ' Text
+'=' Operator
+' ' Text
+'entry' Name
+'-' Operator
+'>' Operator
+'paramIndex' Name
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'currentMethodBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'; ------- Methode -------------------------------------------' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'sprintf' Name
+'(' Punctuation
+'tempString' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'.method public static %s(' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'entry' Name
+'-' Operator
+'>' Operator
+'name' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+'=' Operator
+'entry' Name
+'-' Operator
+'>' Operator
+'paramIndex' Name
+'-1' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+'>' Operator
+'=' Operator
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+'-' Operator
+'-' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t\t\t' Text
+'int' Keyword.Type
+' ' Text
+'type' Name
+' ' Text
+'=' Operator
+' ' Text
+'entry' Name
+'-' Operator
+'>' Operator
+'params' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+'-' Operator
+'>' Operator
+'idtype' Name
+';' Punctuation
+'\n' Text
+
+'\t\t\t' Text
+'tempString' Name
+'[' Punctuation
+'strlen' Name
+'(' Punctuation
+'tempString' Name
+')' Punctuation
+'+' Operator
+'1' Literal.Number.Integer
+']' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t\t\t' Text
+'tempString' Name
+'[' Punctuation
+'strlen' Name
+'(' Punctuation
+'tempString' Name
+')' Punctuation
+']' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'convertType' Name
+'(' Punctuation
+'type' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t\t' Text
+'tempString' Name
+'[' Punctuation
+'strlen' Name
+'(' Punctuation
+'tempString' Name
+')' Punctuation
+'+' Operator
+'2' Literal.Number.Integer
+']' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'tempString' Name
+'[' Punctuation
+'strlen' Name
+'(' Punctuation
+'tempString' Name
+')' Punctuation
+'+' Operator
+'1' Literal.Number.Integer
+']' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'convertType' Name
+'(' Punctuation
+'entry' Name
+'-' Operator
+'>' Operator
+'idtype' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'tempString' Name
+'[' Punctuation
+'strlen' Name
+'(' Punctuation
+'tempString' Name
+')' Punctuation
+']' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+"'" Literal.String.Char
+')' Literal.String.Char
+"'" Literal.String.Char
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'currentMethodBuffer' Name
+',' Punctuation
+' ' Text
+'tempString' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'currentMethodBufferIndex' Name
+' ' Text
+'=' Operator
+' ' Text
+'currentMethodBuffer' Name
+'-' Operator
+'>' Operator
+'numberOfNextElement' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'void' Keyword.Type
+' ' Text
+'codegenLeaveFunction' Name.Function
+'(' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'global' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'sprintf' Name
+'(' Punctuation
+'tempString' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'\\t' Literal.String.Escape
+'.limit locals %d' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'currentMethodNumberOfLocals' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferInsert' Name
+'(' Punctuation
+'currentMethodBuffer' Name
+',' Punctuation
+' ' Text
+'currentMethodBufferIndex' Name
+',' Punctuation
+' ' Text
+'tempString' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'sprintf' Name
+'(' Punctuation
+'tempString' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'\\t' Literal.String.Escape
+'.limit stack %d' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'currentMethodStackSizeMax' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferInsert' Name
+'(' Punctuation
+'currentMethodBuffer' Name
+',' Punctuation
+' ' Text
+'currentMethodBufferIndex' Name
+',' Punctuation
+' ' Text
+'tempString' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'currentMethodBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'\\t' Literal.String.Escape
+'return' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'currentMethodBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'.end method' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'currentMethodBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'; -----------------------------------------------------------' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'currentMethodBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\t' Text
+'stringBufferConcatenate' Name
+'(' Punctuation
+'finishedMethodsBuffer' Name
+',' Punctuation
+' ' Text
+'currentMethodBuffer' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\n' Text
+
+'\n' Text
+
+'void' Keyword.Type
+' ' Text
+'codegenFinishCode' Name.Function
+'(' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'staticVariableBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'; -----------------------------------------------------------' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'staticVariableBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\t' Text
+'sprintf' Name
+'(' Punctuation
+'tempString' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'\\t' Literal.String.Escape
+'.limit stack %d' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'classInitStackSizeMax' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferInsert' Name
+'(' Punctuation
+'classInitBuffer' Name
+',' Punctuation
+' ' Text
+'classInitBufferIndex' Name
+',' Punctuation
+' ' Text
+'tempString' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'classInitBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'\\t' Literal.String.Escape
+'return' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'classInitBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'.end method' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferAppend' Name
+'(' Punctuation
+'classInitBuffer' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'; -----------------------------------------------------------' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t\n\t' Text
+'stringBufferConcatenate' Name
+'(' Punctuation
+'mainBuffer' Name
+',' Punctuation
+' ' Text
+'staticVariableBuffer' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferConcatenate' Name
+'(' Punctuation
+'mainBuffer' Name
+',' Punctuation
+' ' Text
+'finishedMethodsBuffer' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'stringBufferConcatenate' Name
+'(' Punctuation
+'mainBuffer' Name
+',' Punctuation
+' ' Text
+'classInitBuffer' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\t' Text
+'stringBufferPrint' Name
+'(' Punctuation
+'mainBuffer' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'void' Keyword.Type
+' ' Text
+'increaseStackby' Name
+'(' Punctuation
+'int' Keyword.Type
+' ' Text
+'stackdiff' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'global' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t\t' Text
+'classInitStackSize' Name
+' ' Text
+'+' Operator
+'=' Operator
+' ' Text
+'stackdiff' Name
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'classInitStackSize' Name
+' ' Text
+'>' Operator
+' ' Text
+'classInitStackSizeMax' Name
+')' Punctuation
+' ' Text
+'classInitStackSizeMax' Name
+' ' Text
+'=' Operator
+' ' Text
+'classInitStackSize' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'else' Keyword
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t\t' Text
+'currentMethodStackSize' Name
+' ' Text
+'+' Operator
+'=' Operator
+' ' Text
+'stackdiff' Name
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'currentMethodStackSize' Name
+' ' Text
+'>' Operator
+' ' Text
+'currentMethodStackSizeMax' Name
+')' Punctuation
+' ' Text
+'currentMethodStackSizeMax' Name
+' ' Text
+'=' Operator
+' ' Text
+'currentMethodStackSize' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'char' Keyword.Type
+' ' Text
+'convertType' Name
+'(' Punctuation
+'int' Keyword.Type
+' ' Text
+'type' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'switch' Keyword
+'(' Punctuation
+'type' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t\t' Text
+'case' Keyword
+' ' Text
+'TYPE_VOID' Name.Label
+':' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+"'" Literal.String.Char
+'V' Literal.String.Char
+"'" Literal.String.Char
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'case' Keyword
+' ' Text
+'TYPE_INT' Name.Label
+':' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+"'" Literal.String.Char
+'I' Literal.String.Char
+"'" Literal.String.Char
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'case' Keyword
+' ' Text
+'TYPE_FLOAT' Name.Label
+':' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+"'" Literal.String.Char
+'F' Literal.String.Char
+"'" Literal.String.Char
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'case' Keyword
+' ' Text
+'TYPE_BOOLEAN' Name.Label
+':' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+"'" Literal.String.Char
+'Z' Literal.String.Char
+"'" Literal.String.Char
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'default' Keyword
+' ' Text
+':' Operator
+' ' Text
+'yyerror' Name
+'(' Punctuation
+'"' Literal.String
+'compiler-intern error in convertType().' Literal.String
+'\\n' Literal.String.Escape
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'/* to avoid compiler-warning */' Comment.Multiline
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\n' Text
+
+'//#include <stdlib.h>\n' Comment.Single
+
+'//#include <stdio.h>\n' Comment.Single
+
+'\n' Text
+
+'int' Keyword.Type
+' ' Text
+'main' Name
+'(' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'int' Keyword.Type
+' ' Text
+'a' Name
+' ' Text
+'=' Operator
+' ' Text
+'12' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'b' Name
+' ' Text
+'=' Operator
+' ' Text
+'44' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'while' Keyword
+' ' Text
+'(' Punctuation
+'a' Name
+' ' Text
+'!' Operator
+'=' Operator
+' ' Text
+'b' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'a' Name
+' ' Text
+'>' Operator
+' ' Text
+'b' Name
+')' Punctuation
+'\n' Text
+
+'\t\t\t' Text
+'a' Name
+' ' Text
+'-' Operator
+'=' Operator
+' ' Text
+'b' Name
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'else' Keyword
+'\n' Text
+
+'\t\t\t' Text
+'b' Name
+' ' Text
+'-' Operator
+'=' Operator
+' ' Text
+'a' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'printf' Name
+'(' Punctuation
+'"' Literal.String
+'%d' Literal.String
+'\\n' Literal.String.Escape
+'%d' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'a' Name
+',' Punctuation
+' ' Text
+'0X0' Literal.Number.Hex
+')' Punctuation
+';' Punctuation
+'\\\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\n' Text
+
+'/**********************************************************************\n\n array.c -\n\n $Author: murphy $\n $Date: 2005-11-05 04:33:55 +0100 (Sa, 05 Nov 2005) $\n created at: Fri Aug 6 09:46:12 JST 1993\n\n Copyright (C) 1993-2003 Yukihiro Matsumoto\n Copyright (C) 2000 Network Applied Communication Laboratory, Inc.\n Copyright (C) 2000 Information-technology Promotion Agency, Japan\n\n**********************************************************************/' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text
+'"ruby.h"' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text
+'"util.h"' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text
+'"st.h"' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text
+'"node.h"' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'\n' Text
+
+'VALUE' Name
+' ' Text
+'rb_cArray' Name
+',' Punctuation
+' ' Text
+'rb_cValues' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'ID' Name
+' ' Text
+'id_cmp' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'#' Comment.Preproc
+'define ARY_DEFAULT_SIZE 16' Comment.Preproc
+'\n' Comment.Preproc
+
+'\n' Text
+
+'\n' Text
+
+'void' Keyword.Type
+'\n' Text
+
+'rb_mem_clear' Name.Function
+'(' Punctuation
+'mem' Name
+',' Punctuation
+' ' Text
+'size' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'register' Keyword
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'mem' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'register' Keyword
+' ' Text
+'long' Keyword.Type
+' ' Text
+'size' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'while' Keyword
+' ' Text
+'(' Punctuation
+'size' Name
+'-' Operator
+'-' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'*' Operator
+'mem' Name
+'+' Operator
+'+' Operator
+' ' Text
+'=' Operator
+' ' Text
+'Qnil' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'inline' Keyword.Reserved
+' ' Text
+'void' Keyword.Type
+'\n' Text
+
+'memfill' Name
+'(' Punctuation
+'mem' Name
+',' Punctuation
+' ' Text
+'size' Name
+',' Punctuation
+' ' Text
+'val' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'register' Keyword
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'mem' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'register' Keyword
+' ' Text
+'long' Keyword.Type
+' ' Text
+'size' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'register' Keyword
+' ' Text
+'VALUE' Name
+' ' Text
+'val' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'while' Keyword
+' ' Text
+'(' Punctuation
+'size' Name
+'-' Operator
+'-' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'*' Operator
+'mem' Name
+'+' Operator
+'+' Operator
+' ' Text
+'=' Operator
+' ' Text
+'val' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'#' Comment.Preproc
+'define ARY_TMPLOCK FL_USER1' Comment.Preproc
+'\n' Comment.Preproc
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'inline' Keyword.Reserved
+' ' Text
+'void' Keyword.Type
+'\n' Text
+
+'rb_ary_modify_check' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'OBJ_FROZEN' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'rb_error_frozen' Name
+'(' Punctuation
+'"' Literal.String
+'array' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'FL_TEST' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'ARY_TMPLOCK' Name
+')' Punctuation
+')' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_raise' Name
+'(' Punctuation
+'rb_eRuntimeError' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+"can't modify array during iteration" Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'!' Operator
+'OBJ_TAINTED' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+' ' Text
+'&' Operator
+'&' Operator
+' ' Text
+'rb_safe_level' Name
+'(' Punctuation
+')' Punctuation
+' ' Text
+'>' Operator
+'=' Operator
+' ' Text
+'4' Literal.Number.Integer
+')' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_raise' Name
+'(' Punctuation
+'rb_eSecurityError' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+"Insecure: can't modify array" Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'void' Keyword.Type
+'\n' Text
+
+'rb_ary_modify' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'ptr' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'rb_ary_modify_check' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'FL_TEST' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'ELTS_SHARED' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'ptr' Name
+' ' Text
+'=' Operator
+' ' Text
+'ALLOC_N' Name
+'(' Punctuation
+'VALUE' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'FL_UNSET' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'ELTS_SHARED' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'MEMCPY' Name
+'(' Punctuation
+'ptr' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'=' Operator
+' ' Text
+'ptr' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_freeze' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'rb_obj_freeze' Name.Function
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.frozen? -> true or false\n *\n * Return <code>true</code> if this array is frozen (or temporarily frozen\n * while being sorted).\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_frozen_p' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'OBJ_FROZEN' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'Qtrue' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'FL_TEST' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'ARY_TMPLOCK' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'Qtrue' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'Qfalse' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+' ' Text
+'ary_alloc' Name
+'(' Punctuation
+'VALUE' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'ary_alloc' Name
+'(' Punctuation
+'klass' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'klass' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'NEWOBJ' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'struct' Keyword
+' ' Text
+'RArray' Name.Class
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'OBJSETUP' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'klass' Name
+',' Punctuation
+' ' Text
+'T_ARRAY' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'ary' Name
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+' ' Text
+'ary' Name
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+' ' Text
+'ary' Name
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'(' Punctuation
+'VALUE' Name
+')' Punctuation
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'ary_new' Name
+'(' Punctuation
+'klass' Name
+',' Punctuation
+' ' Text
+'len' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'klass' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'len' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'len' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_raise' Name
+'(' Punctuation
+'rb_eArgError' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'negative array size (or size too big)' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'len' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'&' Operator
+'&' Operator
+' ' Text
+'len' Name
+' ' Text
+'*' Operator
+' ' Text
+'sizeof' Keyword
+'(' Punctuation
+'VALUE' Name
+')' Punctuation
+' ' Text
+'<' Operator
+'=' Operator
+' ' Text
+'len' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_raise' Name
+'(' Punctuation
+'rb_eArgError' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'array size too big' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'len' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'len' Name
+'+' Operator
+'+' Operator
+';' Punctuation
+'\n' Text
+
+' \n ' Text
+'ary' Name
+' ' Text
+'=' Operator
+' ' Text
+'ary_alloc' Name
+'(' Punctuation
+'klass' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'=' Operator
+' ' Text
+'ALLOC_N' Name
+'(' Punctuation
+'VALUE' Name
+',' Punctuation
+' ' Text
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+' ' Text
+'=' Operator
+' ' Text
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_new2' Name
+'(' Punctuation
+'len' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'len' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary_new' Name.Function
+'(' Punctuation
+'rb_cArray' Name
+',' Punctuation
+' ' Text
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_new' Name
+'(' Punctuation
+')' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'rb_ary_new2' Name.Function
+'(' Punctuation
+'ARY_DEFAULT_SIZE' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'#' Comment.Preproc
+'ifdef HAVE_STDARG_PROTOTYPES' Comment.Preproc
+'\n' Comment.Preproc
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text
+'<stdarg.h>' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'#' Comment.Preproc
+'define va_init_list(a,b) va_start(a,b)' Comment.Preproc
+'\n' Comment.Preproc
+
+'#' Comment.Preproc
+'else' Comment.Preproc
+'\n' Comment.Preproc
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text
+'<varargs.h>' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'#' Comment.Preproc
+'define va_init_list(a,b) va_start(a)' Comment.Preproc
+'\n' Comment.Preproc
+
+'#' Comment.Preproc
+'endif' Comment.Preproc
+'\n' Comment.Preproc
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'#' Comment.Preproc
+'ifdef HAVE_STDARG_PROTOTYPES' Comment.Preproc
+'\n' Comment.Preproc
+
+'rb_ary_new3' Name
+'(' Punctuation
+'long' Keyword.Type
+' ' Text
+'n' Name
+',' Punctuation
+' ' Text
+'.' Punctuation
+'.' Punctuation
+'.' Punctuation
+')' Punctuation
+'\n' Text
+
+'#' Comment.Preproc
+'else' Comment.Preproc
+'\n' Comment.Preproc
+
+'rb_ary_new3' Name
+'(' Punctuation
+'n' Name
+',' Punctuation
+' ' Text
+'va_alist' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'va_dcl' Name
+'\n' Text
+
+'#' Comment.Preproc
+'endif' Comment.Preproc
+'\n' Comment.Preproc
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'va_list' Keyword.Type
+' ' Text
+'ar' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'i' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'ary' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_ary_new2' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'va_init_list' Name
+'(' Punctuation
+'ar' Name
+',' Punctuation
+' ' Text
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+'=' Operator
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+'<' Operator
+'n' Name
+';' Punctuation
+' ' Text
+'i' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'va_arg' Name
+'(' Punctuation
+'ar' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'va_end' Name
+'(' Punctuation
+'ar' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_new4' Name
+'(' Punctuation
+'n' Name
+',' Punctuation
+' ' Text
+'elts' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'const' Keyword
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'elts' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'ary' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_ary_new2' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'n' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'&' Operator
+'&' Operator
+' ' Text
+'elts' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'MEMCPY' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'elts' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'#' Comment.Preproc
+'ifdef HAVE_STDARG_PROTOTYPES' Comment.Preproc
+'\n' Comment.Preproc
+
+'rb_values_new' Name
+'(' Punctuation
+'long' Keyword.Type
+' ' Text
+'n' Name
+',' Punctuation
+' ' Text
+'.' Punctuation
+'.' Punctuation
+'.' Punctuation
+')' Punctuation
+'\n' Text
+
+'#' Comment.Preproc
+'else' Comment.Preproc
+'\n' Comment.Preproc
+
+'rb_values_new' Name
+'(' Punctuation
+'n' Name
+',' Punctuation
+' ' Text
+'va_alist' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'va_dcl' Name
+'\n' Text
+
+'#' Comment.Preproc
+'endif' Comment.Preproc
+'\n' Comment.Preproc
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'va_list' Keyword.Type
+' ' Text
+'ar' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'val' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'i' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'val' Name
+' ' Text
+'=' Operator
+' ' Text
+'ary_new' Name
+'(' Punctuation
+'rb_cValues' Name
+',' Punctuation
+' ' Text
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'va_init_list' Name
+'(' Punctuation
+'ar' Name
+',' Punctuation
+' ' Text
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+'=' Operator
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+'<' Operator
+'n' Name
+';' Punctuation
+' ' Text
+'i' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'RARRAY' Name
+'(' Punctuation
+'val' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'va_arg' Name
+'(' Punctuation
+'ar' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'va_end' Name
+'(' Punctuation
+'ar' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'val' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'val' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_values_new2' Name
+'(' Punctuation
+'n' Name
+',' Punctuation
+' ' Text
+'elts' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'const' Keyword
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'elts' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'val' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'val' Name
+' ' Text
+'=' Operator
+' ' Text
+'ary_new' Name
+'(' Punctuation
+'rb_cValues' Name
+',' Punctuation
+' ' Text
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'n' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'&' Operator
+'&' Operator
+' ' Text
+'elts' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'RARRAY' Name
+'(' Punctuation
+'val' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'MEMCPY' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'val' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'elts' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'val' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'ary_make_shared' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'!' Operator
+'FL_TEST' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'ELTS_SHARED' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'NEWOBJ' Name
+'(' Punctuation
+'shared' Name
+',' Punctuation
+' ' Text
+'struct' Keyword
+' ' Text
+'RArray' Name.Class
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'OBJSETUP' Name
+'(' Punctuation
+'shared' Name
+',' Punctuation
+' ' Text
+'rb_cArray' Name
+',' Punctuation
+' ' Text
+'T_ARRAY' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\t' Text
+'shared' Name
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'shared' Name
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'shared' Name
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'shared' Name
+' ' Text
+'=' Operator
+' ' Text
+'(' Punctuation
+'VALUE' Name
+')' Punctuation
+'shared' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'FL_SET' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'ELTS_SHARED' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'OBJ_FREEZE' Name
+'(' Punctuation
+'shared' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'(' Punctuation
+'VALUE' Name
+')' Punctuation
+'shared' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'else' Keyword
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'RARRAY' Name.Function
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'shared' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'ary_shared_array' Name
+'(' Punctuation
+'klass' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'klass' Name
+',' Punctuation
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'val' Name
+' ' Text
+'=' Operator
+' ' Text
+'ary_alloc' Name
+'(' Punctuation
+'klass' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'ary_make_shared' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'val' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'val' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'val' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'shared' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'shared' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'FL_SET' Name
+'(' Punctuation
+'val' Name
+',' Punctuation
+' ' Text
+'ELTS_SHARED' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'val' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_values_from_ary' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary_shared_array' Name.Function
+'(' Punctuation
+'rb_cValues' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_from_values' Name
+'(' Punctuation
+'val' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'val' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary_shared_array' Name.Function
+'(' Punctuation
+'rb_cArray' Name
+',' Punctuation
+' ' Text
+'val' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_assoc_new' Name
+'(' Punctuation
+'car' Name
+',' Punctuation
+' ' Text
+'cdr' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'car' Name
+',' Punctuation
+' ' Text
+'cdr' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'rb_values_new' Name.Function
+'(' Punctuation
+'2' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'car' Name
+',' Punctuation
+' ' Text
+'cdr' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'to_ary' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'rb_convert_type' Name.Function
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'T_ARRAY' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'Array' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'"' Literal.String
+'to_ary' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'to_a' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'rb_convert_type' Name.Function
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'T_ARRAY' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'Array' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'"' Literal.String
+'to_a' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_check_array_type' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'rb_check_convert_type' Name.Function
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'T_ARRAY' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'Array' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'"' Literal.String
+'to_ary' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+' ' Text
+'rb_ary_replace' Name
+' ' Text
+'_' Name
+'(' Punctuation
+'(' Punctuation
+'VALUE' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * Array.new(size=0, obj=nil)\n * Array.new(array)\n * Array.new(size) {|index| block }\n *\n * Returns a new array. In the first form, the new array is\n * empty. In the second it is created with _size_ copies of _obj_\n * (that is, _size_ references to the same\n * _obj_). The third form creates a copy of the array\n * passed as a parameter (the array is generated by calling\n * to_ary on the parameter). In the last form, an array\n * of the given size is created. Each element in this array is\n * calculated by passing the element\'s index to the given block and\n * storing the return value.\n *\n * Array.new\n * Array.new(2)\n * Array.new(5, "A")\n * \n * # only one copy of the object is created\n * a = Array.new(2, Hash.new)\n * a[0][\'cat\'] = \'feline\'\n * a\n * a[1][\'cat\'] = \'Felix\'\n * a\n * \n * # here multiple copies are created\n * a = Array.new(2) { Hash.new }\n * a[0][\'cat\'] = \'feline\'\n * a\n * \n * squares = Array.new(5) {|i| i*i}\n * squares\n * \n * copy = Array.new(squares)\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_initialize' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'size' Name
+',' Punctuation
+' ' Text
+'val' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'rb_scan_args' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'02' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'&' Operator
+'size' Name
+',' Punctuation
+' ' Text
+'&' Operator
+'val' Name
+')' Punctuation
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'rb_block_given_p' Name
+'(' Punctuation
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'rb_warning' Name
+'(' Punctuation
+'"' Literal.String
+'given block not used' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'&' Operator
+'&' Operator
+' ' Text
+'!' Operator
+'FIXNUM_P' Name
+'(' Punctuation
+'size' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'val' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_check_array_type' Name
+'(' Punctuation
+'size' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'!' Operator
+'NIL_P' Name
+'(' Punctuation
+'val' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'rb_ary_replace' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'val' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'NUM2LONG' Name
+'(' Punctuation
+'size' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'len' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_raise' Name
+'(' Punctuation
+'rb_eArgError' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'negative array size' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'len' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'&' Operator
+'&' Operator
+' ' Text
+'len' Name
+' ' Text
+'*' Operator
+' ' Text
+'(' Punctuation
+'long' Keyword.Type
+')' Punctuation
+'sizeof' Keyword
+'(' Punctuation
+'VALUE' Name
+')' Punctuation
+' ' Text
+'<' Operator
+'=' Operator
+' ' Text
+'len' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_raise' Name
+'(' Punctuation
+'rb_eArgError' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'array size too big' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'rb_ary_modify' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'len' Name
+' ' Text
+'>' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'REALLOC_N' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+' ' Text
+'=' Operator
+' ' Text
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'rb_block_given_p' Name
+'(' Punctuation
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'long' Keyword.Type
+' ' Text
+'i' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'2' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'rb_warn' Name
+'(' Punctuation
+'"' Literal.String
+'block supersedes default value argument' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+'=' Operator
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+'<' Operator
+'len' Name
+';' Punctuation
+' ' Text
+'i' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'rb_ary_store' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'i' Name
+',' Punctuation
+' ' Text
+'rb_yield' Name
+'(' Punctuation
+'LONG2NUM' Name
+'(' Punctuation
+'i' Name
+')' Punctuation
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'i' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'else' Keyword
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'memfill' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'len' Name
+',' Punctuation
+' ' Text
+'val' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\n' Text
+
+"/* \n* Returns a new array populated with the given objects. \n*\n* Array.[]( 1, 'a', /^A/ )\n* Array[ 1, 'a', /^A/ ]\n* [ 1, 'a', /^A/ ]\n*/" Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_s_create' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'klass' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'klass' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+' ' Text
+'=' Operator
+' ' Text
+'ary_alloc' Name
+'(' Punctuation
+'klass' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'=' Operator
+' ' Text
+'ALLOC_N' Name
+'(' Punctuation
+'VALUE' Name
+',' Punctuation
+' ' Text
+'argc' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'MEMCPY' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'argc' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+' ' Text
+'=' Operator
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'void' Keyword.Type
+'\n' Text
+
+'rb_ary_store' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'idx' Name
+',' Punctuation
+' ' Text
+'val' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'idx' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'val' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'idx' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'idx' Name
+' ' Text
+'+' Operator
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'idx' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'rb_raise' Name
+'(' Punctuation
+'rb_eIndexError' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'index %ld out of array' Literal.String
+'"' Literal.String
+',' Punctuation
+'\n' Text
+
+'\t\t ' Text
+'idx' Name
+' ' Text
+'-' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'rb_ary_modify' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'idx' Name
+' ' Text
+'>' Operator
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'long' Keyword.Type
+' ' Text
+'new_capa' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+' ' Text
+'/' Operator
+' ' Text
+'2' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'new_capa' Name
+' ' Text
+'<' Operator
+' ' Text
+'ARY_DEFAULT_SIZE' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'new_capa' Name
+' ' Text
+'=' Operator
+' ' Text
+'ARY_DEFAULT_SIZE' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'new_capa' Name
+' ' Text
+'+' Operator
+'=' Operator
+' ' Text
+'idx' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'new_capa' Name
+' ' Text
+'*' Operator
+' ' Text
+'(' Punctuation
+'long' Keyword.Type
+')' Punctuation
+'sizeof' Keyword
+'(' Punctuation
+'VALUE' Name
+')' Punctuation
+' ' Text
+'<' Operator
+'=' Operator
+' ' Text
+'new_capa' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'rb_raise' Name
+'(' Punctuation
+'rb_eArgError' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'index too big' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'REALLOC_N' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'new_capa' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+' ' Text
+'=' Operator
+' ' Text
+'new_capa' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'idx' Name
+' ' Text
+'>' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_mem_clear' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'+' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+',' Punctuation
+'\n' Text
+
+'\t\t ' Text
+'idx' Name
+'-' Operator
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'idx' Name
+' ' Text
+'>' Operator
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'idx' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'idx' Name
+']' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'val' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'ary_shared_first' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'nv' Name
+',' Punctuation
+' ' Text
+'result' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'rb_scan_args' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'1' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'&' Operator
+'nv' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'NUM2LONG' Name
+'(' Punctuation
+'nv' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'n' Name
+' ' Text
+'>' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'else' Keyword
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'n' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_raise' Name
+'(' Punctuation
+'rb_eArgError' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'negative array size' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'result' Name
+' ' Text
+'=' Operator
+' ' Text
+'ary_shared_array' Name
+'(' Punctuation
+'rb_cArray' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'result' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'result' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'ary_shared_last' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'result' Name
+' ' Text
+'=' Operator
+' ' Text
+'ary_shared_first' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'result' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'+' Operator
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'-' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'result' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'result' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array << obj -> array\n * \n * Append---Pushes the given object on to the end of this array. This\n * expression returns the array itself, so several appends\n * may be chained together.\n *\n * [ 1, 2 ] << "c" << "d" << [ 3, 4 ]\n * #=> [ 1, 2, "c", "d", [ 3, 4 ] ]\n *\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_push' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'item' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'item' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'rb_ary_store' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+',' Punctuation
+' ' Text
+'item' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/* \n * call-seq:\n * array.push(obj, ... ) -> array\n * \n * Append---Pushes the given object(s) on to the end of this array. This\n * expression returns the array itself, so several appends\n * may be chained together.\n *\n * a = [ "a", "b", "c" ]\n * a.push("d", "e", "f") \n * #=> ["a", "b", "c", "d", "e", "f"]\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_push_m' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'while' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+'-' Operator
+'-' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_ary_push' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'*' Operator
+'argv' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_pop' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'rb_ary_modify_check' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'Qnil' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'!' Operator
+'FL_TEST' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'ELTS_SHARED' Name
+')' Punctuation
+' ' Text
+'&' Operator
+'&' Operator
+'\n' Text
+
+'\t ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'*' Operator
+' ' Text
+'2' Literal.Number.Integer
+' ' Text
+'<' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+' ' Text
+'&' Operator
+'&' Operator
+'\n' Text
+
+'\t ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+' ' Text
+'>' Operator
+' ' Text
+'ARY_DEFAULT_SIZE' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'*' Operator
+' ' Text
+'2' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'REALLOC_N' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'-' Operator
+'-' Operator
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.pop -> obj or nil\n * \n * Removes the last element from <i>self</i> and returns it, or\n * <code>nil</code> if the array is empty.\n * \n * a = [ "a", "b", "c", "d" ]\n * a.pop #=> "d"\n * a.pop(2) #=> ["b", "c"]\n * a #=> ["a"]\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_pop_m' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'result' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'rb_ary_pop' Name.Function
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'rb_ary_modify_check' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'result' Name
+' ' Text
+'=' Operator
+' ' Text
+'ary_shared_last' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'-' Operator
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'result' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'result' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_shift' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'top' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'rb_ary_modify_check' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'Qnil' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'top' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'0' Literal.Number.Integer
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'ary_make_shared' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'+' Operator
+'+' Operator
+';' Punctuation
+'\t\t' Text
+'/* shift ptr */' Comment.Multiline
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+'-' Operator
+'-' Operator
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'top' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.shift -> obj or nil\n * \n * Returns the first element of <i>self</i> and removes it (shifting all\n * other elements down by one). Returns <code>nil</code> if the array\n * is empty.\n * \n * args = [ "-m", "-q", "filename" ]\n * args.shift #=> "-m"\n * args #=> ["-q", "filename"]\n *\n * args = [ "-m", "-q", "filename" ]\n * args.shift(2) #=> ["-m", "-q"]\n * args #=> ["filename"]\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_shift_m' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'result' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'rb_ary_shift' Name.Function
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'rb_ary_modify_check' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'result' Name
+' ' Text
+'=' Operator
+' ' Text
+'ary_shared_first' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'result' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'+' Operator
+'=' Operator
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'-' Operator
+'=' Operator
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'result' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_unshift' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'item' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+',' Punctuation
+' ' Text
+'item' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'rb_ary_modify' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'long' Keyword.Type
+' ' Text
+'capa_inc' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+' ' Text
+'/' Operator
+' ' Text
+'2' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'capa_inc' Name
+' ' Text
+'<' Operator
+' ' Text
+'ARY_DEFAULT_SIZE' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'capa_inc' Name
+' ' Text
+'=' Operator
+' ' Text
+'ARY_DEFAULT_SIZE' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+' ' Text
+'+' Operator
+'=' Operator
+' ' Text
+'capa_inc' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'REALLOC_N' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'/* sliding items */' Comment.Multiline
+'\n' Text
+
+' ' Text
+'MEMMOVE' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+'+' Operator
+'+' Operator
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'0' Literal.Number.Integer
+']' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'item' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.unshift(obj, ...) -> array\n * \n * Prepends objects to the front of <i>array</i>.\n * other elements up one.\n * \n * a = [ "b", "c", "d" ]\n * a.unshift("a") #=> ["a", "b", "c", "d"]\n * a.unshift(1, 2) #=> [ 1, 2, "a", "b", "c", "d"]\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_unshift_m' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'/* make rooms by setting the last item */' Comment.Multiline
+'\n' Text
+
+' ' Text
+'rb_ary_store' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'len' Name
+' ' Text
+'+' Operator
+' ' Text
+'argc' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'Qnil' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'/* sliding items */' Comment.Multiline
+'\n' Text
+
+' ' Text
+'MEMMOVE' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'+' Operator
+' ' Text
+'argc' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'MEMCPY' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'argc' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' \n ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+"/* faster version - use this if you don't need to treat negative offset */" Comment.Multiline
+'\n' Text
+
+'static' Keyword
+' ' Text
+'inline' Keyword.Reserved
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_elt' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'offset' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'offset' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'Qnil' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'offset' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'|' Operator
+'|' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'<' Operator
+'=' Operator
+' ' Text
+'offset' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'Qnil' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'offset' Name
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_entry' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'offset' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'offset' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'offset' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'offset' Name
+' ' Text
+'+' Operator
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'rb_ary_elt' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'offset' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_subseq' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'beg' Name
+',' Punctuation
+' ' Text
+'len' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'beg' Name
+',' Punctuation
+' ' Text
+'len' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'klass' Name
+',' Punctuation
+' ' Text
+'ary2' Name
+',' Punctuation
+' ' Text
+'shared' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'ptr' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'beg' Name
+' ' Text
+'>' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'Qnil' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'beg' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'|' Operator
+'|' Operator
+' ' Text
+'len' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'Qnil' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'beg' Name
+' ' Text
+'+' Operator
+' ' Text
+'len' Name
+' ' Text
+'>' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'-' Operator
+' ' Text
+'beg' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'len' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+'\n' Text
+
+'\t ' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'klass' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_obj_class' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'len' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'ary_new' Name
+'(' Punctuation
+'klass' Name
+',' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'shared' Name
+' ' Text
+'=' Operator
+' ' Text
+'ary_make_shared' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'ptr' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'ary2' Name
+' ' Text
+'=' Operator
+' ' Text
+'ary_alloc' Name
+'(' Punctuation
+'klass' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary2' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'=' Operator
+' ' Text
+'ptr' Name
+' ' Text
+'+' Operator
+' ' Text
+'beg' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary2' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary2' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'shared' Name
+' ' Text
+'=' Operator
+' ' Text
+'shared' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'FL_SET' Name
+'(' Punctuation
+'ary2' Name
+',' Punctuation
+' ' Text
+'ELTS_SHARED' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary2' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/* \n * call-seq:\n * array[index] -> obj or nil\n * array[start, length] -> an_array or nil\n * array[range] -> an_array or nil\n * array.slice(index) -> obj or nil\n * array.slice(start, length) -> an_array or nil\n * array.slice(range) -> an_array or nil\n *\n * Element Reference---Returns the element at _index_,\n * or returns a subarray starting at _start_ and\n * continuing for _length_ elements, or returns a subarray\n * specified by _range_.\n * Negative indices count backward from the end of the\n * array (-1 is the last element). Returns nil if the index\n * (or starting index) are out of range.\n *\n * a = [ "a", "b", "c", "d", "e" ]\n * a[2] + a[0] + a[1] #=> "cab"\n * a[6] #=> nil\n * a[1, 2] #=> [ "b", "c" ]\n * a[1..3] #=> [ "b", "c", "d" ]\n * a[4..7] #=> [ "e" ]\n * a[6..10] #=> nil\n * a[-3, 3] #=> [ "c", "d", "e" ]\n * # special cases\n * a[5] #=> nil\n * a[5, 1] #=> []\n * a[5..10] #=> []\n *\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_aref' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'arg' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'beg' Name
+',' Punctuation
+' ' Text
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'2' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'beg' Name
+' ' Text
+'=' Operator
+' ' Text
+'NUM2LONG' Name
+'(' Punctuation
+'argv' Name
+'[' Punctuation
+'0' Literal.Number.Integer
+']' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'NUM2LONG' Name
+'(' Punctuation
+'argv' Name
+'[' Punctuation
+'1' Literal.Number.Integer
+']' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'beg' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'beg' Name
+' ' Text
+'+' Operator
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'rb_ary_subseq' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'beg' Name
+',' Punctuation
+' ' Text
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+' ' Text
+'!' Operator
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_scan_args' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'11' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'arg' Name
+' ' Text
+'=' Operator
+' ' Text
+'argv' Name
+'[' Punctuation
+'0' Literal.Number.Integer
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'/* special case - speeding up */' Comment.Multiline
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'FIXNUM_P' Name
+'(' Punctuation
+'arg' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'rb_ary_entry' Name.Function
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'FIX2LONG' Name
+'(' Punctuation
+'arg' Name
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'/* check if idx is Range */' Comment.Multiline
+'\n' Text
+
+' ' Text
+'switch' Keyword
+' ' Text
+'(' Punctuation
+'rb_range_beg_len' Name
+'(' Punctuation
+'arg' Name
+',' Punctuation
+' ' Text
+'&' Operator
+'beg' Name
+',' Punctuation
+' ' Text
+'&' Operator
+'len' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+',' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'case' Keyword
+' ' Text
+'Qfalse' Name.Label
+':' Punctuation
+'\n' Text
+
+'\t' Text
+'break' Keyword
+';' Punctuation
+'\n' Text
+
+' ' Text
+'case' Keyword
+' ' Text
+'Qnil' Name.Label
+':' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'Qnil' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'default' Keyword
+':' Operator
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'rb_ary_subseq' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'beg' Name
+',' Punctuation
+' ' Text
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'rb_ary_entry' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'NUM2LONG' Name
+'(' Punctuation
+'arg' Name
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/* \n * call-seq:\n * array.at(index) -> obj or nil\n *\n * Returns the element at _index_. A\n * negative index counts from the end of _self_. Returns +nil+\n * if the index is out of range. See also <code>Array#[]</code>.\n * (<code>Array#at</code> is slightly faster than <code>Array#[]</code>,\n * as it does not accept ranges and so on.)\n *\n * a = [ "a", "b", "c", "d", "e" ]\n * a.at(0) #=> "a"\n * a.at(-1) #=> "e"\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_at' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'pos' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+',' Punctuation
+' ' Text
+'pos' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'rb_ary_entry' Name.Function
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'NUM2LONG' Name
+'(' Punctuation
+'pos' Name
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.first -> obj or nil\n * array.first(n) -> an_array\n * \n * Returns the first element of the array. If the array is empty,\n * returns <code>nil</code>.\n * \n * a = [ "q", "r", "s", "t" ]\n * a.first #=> "q"\n * a.first(2) #=> ["q", "r"]\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_first' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'Qnil' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'RARRAY' Name.Function
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'0' Literal.Number.Integer
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'else' Keyword
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'ary_shared_first' Name.Function
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.last -> obj or nil\n * array.last(n) -> an_array\n * \n * Returns the last element(s) of <i>self</i>. If the array is empty,\n * the first form returns <code>nil</code>.\n * \n * a = [ "w", "x", "y", "z" ]\n * a.last #=> "z"\n * a.last(2) #=> ["y", "z"]\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_last' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'Qnil' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'RARRAY' Name.Function
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+'-1' Literal.Number.Integer
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'else' Keyword
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'ary_shared_last' Name.Function
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.fetch(index) -> obj\n * array.fetch(index, default ) -> obj\n * array.fetch(index) {|index| block } -> obj\n * \n * Tries to return the element at position <i>index</i>. If the index\n * lies outside the array, the first form throws an\n * <code>IndexError</code> exception, the second form returns\n * <i>default</i>, and the third form returns the value of invoking\n * the block, passing in the index. Negative values of <i>index</i>\n * count from the end of the array.\n * \n * a = [ 11, 22, 33, 44 ]\n * a.fetch(1) #=> 22\n * a.fetch(-1) #=> 44\n * a.fetch(4, \'cat\') #=> "cat"\n * a.fetch(4) { |i| i*i } #=> 16\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_fetch' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'pos' Name
+',' Punctuation
+' ' Text
+'ifnone' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'block_given' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'idx' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'rb_scan_args' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'11' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'&' Operator
+'pos' Name
+',' Punctuation
+' ' Text
+'&' Operator
+'ifnone' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'block_given' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_block_given_p' Name
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'block_given' Name
+' ' Text
+'&' Operator
+'&' Operator
+' ' Text
+'argc' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'2' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_warn' Name
+'(' Punctuation
+'"' Literal.String
+'block supersedes default value argument' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'idx' Name
+' ' Text
+'=' Operator
+' ' Text
+'NUM2LONG' Name
+'(' Punctuation
+'pos' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'idx' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'idx' Name
+' ' Text
+'+' Operator
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'idx' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'|' Operator
+'|' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'<' Operator
+'=' Operator
+' ' Text
+'idx' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'block_given' Name
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'rb_yield' Name
+'(' Punctuation
+'pos' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'rb_raise' Name
+'(' Punctuation
+'rb_eIndexError' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'index %ld out of array' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'idx' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'ifnone' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'idx' Name
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.index(obj) -> int or nil\n * array.index {|item| block} -> int or nil\n * \n * Returns the index of the first object in <i>self</i> such that is\n * <code>==</code> to <i>obj</i>. If a block is given instead of an\n * argument, returns first object for which <em>block</em> is true.\n * Returns <code>nil</code> if no match is found.\n * \n * a = [ "a", "b", "c" ]\n * a.index("b") #=> 1\n * a.index("z") #=> nil\n * a.index{|x|x=="b"} #=> 1\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_index' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'val' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'i' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'rb_scan_args' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'01' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'&' Operator
+'val' Name
+')' Punctuation
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+'=' Operator
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+'<' Operator
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+' ' Text
+'i' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RTEST' Name
+'(' Punctuation
+'rb_yield' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+')' Punctuation
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t\t' Text
+'return' Keyword
+' ' Text
+'LONG2NUM' Name.Function
+'(' Punctuation
+'i' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'else' Keyword
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+'=' Operator
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+'<' Operator
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+' ' Text
+'i' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'rb_equal' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+',' Punctuation
+' ' Text
+'val' Name
+')' Punctuation
+')' Punctuation
+'\n' Text
+
+'\t\t' Text
+'return' Keyword
+' ' Text
+'LONG2NUM' Name
+'(' Punctuation
+'i' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'Qnil' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.rindex(obj) -> int or nil\n * \n * Returns the index of the last object in <i>array</i>\n * <code>==</code> to <i>obj</i>. If a block is given instead of an\n * argument, returns first object for which <em>block</em> is\n * true. Returns <code>nil</code> if no match is found.\n * \n * a = [ "a", "b", "b", "b", "c" ]\n * a.rindex("b") #=> 3\n * a.rindex("z") #=> nil\n * a.rindex{|x|x=="b"} #=> 3\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_rindex' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'val' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'rb_scan_args' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'01' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'&' Operator
+'val' Name
+')' Punctuation
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'while' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+'-' Operator
+'-' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RTEST' Name
+'(' Punctuation
+'rb_yield' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+')' Punctuation
+')' Punctuation
+')' Punctuation
+'\n' Text
+
+'\t\t' Text
+'return' Keyword
+' ' Text
+'LONG2NUM' Name
+'(' Punctuation
+'i' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+' ' Text
+'>' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t\t' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'else' Keyword
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'while' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+'-' Operator
+'-' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'rb_equal' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+',' Punctuation
+' ' Text
+'val' Name
+')' Punctuation
+')' Punctuation
+'\n' Text
+
+'\t\t' Text
+'return' Keyword
+' ' Text
+'LONG2NUM' Name
+'(' Punctuation
+'i' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+' ' Text
+'>' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t\t' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'Qnil' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_to_ary' Name
+'(' Punctuation
+'obj' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'obj' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'TYPE' Name
+'(' Punctuation
+'obj' Name
+')' Punctuation
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'T_ARRAY' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'obj' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'rb_respond_to' Name
+'(' Punctuation
+'obj' Name
+',' Punctuation
+' ' Text
+'rb_intern' Name
+'(' Punctuation
+'"' Literal.String
+'to_ary' Literal.String
+'"' Literal.String
+')' Punctuation
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'to_ary' Name.Function
+'(' Punctuation
+'obj' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'rb_ary_new3' Name
+'(' Punctuation
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'obj' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'void' Keyword.Type
+'\n' Text
+
+'rb_ary_splice' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'beg' Name
+',' Punctuation
+' ' Text
+'len' Name
+',' Punctuation
+' ' Text
+'rpl' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'beg' Name
+',' Punctuation
+' ' Text
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'rpl' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'rlen' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'len' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'rb_raise' Name
+'(' Punctuation
+'rb_eIndexError' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'negative length (%ld)' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'beg' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'beg' Name
+' ' Text
+'+' Operator
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'beg' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'beg' Name
+' ' Text
+'-' Operator
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'rb_raise' Name
+'(' Punctuation
+'rb_eIndexError' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'index %ld out of array' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'beg' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'beg' Name
+' ' Text
+'+' Operator
+' ' Text
+'len' Name
+' ' Text
+'>' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'-' Operator
+' ' Text
+'beg' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'rpl' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'Qundef' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rlen' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'else' Keyword
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rpl' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_ary_to_ary' Name
+'(' Punctuation
+'rpl' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'rlen' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'rpl' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'rb_ary_modify' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'beg' Name
+' ' Text
+'>' Operator
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'beg' Name
+' ' Text
+'+' Operator
+' ' Text
+'rlen' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'len' Name
+' ' Text
+'>' Operator
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'REALLOC_N' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+' ' Text
+'=' Operator
+' ' Text
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_mem_clear' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'+' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+',' Punctuation
+' ' Text
+'beg' Name
+' ' Text
+'-' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'rlen' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'MEMCPY' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'+' Operator
+' ' Text
+'beg' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'rpl' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'rlen' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'else' Keyword
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'long' Keyword.Type
+' ' Text
+'alen' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'beg' Name
+' ' Text
+'+' Operator
+' ' Text
+'len' Name
+' ' Text
+'>' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'-' Operator
+' ' Text
+'beg' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\t' Text
+'alen' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'+' Operator
+' ' Text
+'rlen' Name
+' ' Text
+'-' Operator
+' ' Text
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'alen' Name
+' ' Text
+'>' Operator
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'REALLOC_N' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'alen' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'aux' Name
+'.' Punctuation
+'capa' Name
+' ' Text
+'=' Operator
+' ' Text
+'alen' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'len' Name
+' ' Text
+'!' Operator
+'=' Operator
+' ' Text
+'rlen' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'MEMMOVE' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'+' Operator
+' ' Text
+'beg' Name
+' ' Text
+'+' Operator
+' ' Text
+'rlen' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'+' Operator
+' ' Text
+'beg' Name
+' ' Text
+'+' Operator
+' ' Text
+'len' Name
+',' Punctuation
+'\n' Text
+
+'\t\t ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'-' Operator
+' ' Text
+'(' Punctuation
+'beg' Name
+' ' Text
+'+' Operator
+' ' Text
+'len' Name
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'alen' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'rlen' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'MEMMOVE' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'+' Operator
+' ' Text
+'beg' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'rpl' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'rlen' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/* \n * call-seq:\n * array[index] = obj -> obj\n * array[start, length] = obj or an_array or nil -> obj or an_array or nil\n * array[range] = obj or an_array or nil -> obj or an_array or nil\n *\n * Element Assignment---Sets the element at _index_,\n * or replaces a subarray starting at _start_ and\n * continuing for _length_ elements, or replaces a subarray\n * specified by _range_. If indices are greater than\n * the current capacity of the array, the array grows\n * automatically. A negative indices will count backward\n * from the end of the array. Inserts elements if _length_ is\n * zero. An +IndexError+ is raised if a negative index points\n * past the beginning of the array. See also\n * <code>Array#push</code>, and <code>Array#unshift</code>.\n * \n * a = Array.new\n * a[4] = "4"; #=> [nil, nil, nil, nil, "4"]\n * a[0, 3] = [ \'a\', \'b\', \'c\' ] #=> ["a", "b", "c", nil, "4"]\n * a[1..2] = [ 1, 2 ] #=> ["a", 1, 2, nil, "4"]\n * a[0, 2] = "?" #=> ["?", 2, nil, "4"]\n * a[0..2] = "A" #=> ["A", "4"]\n * a[-1] = "Z" #=> ["A", "Z"]\n * a[1..-1] = nil #=> ["A", nil]\n * a[1..-1] = [] #=> ["A"]\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_aset' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'offset' Name
+',' Punctuation
+' ' Text
+'beg' Name
+',' Punctuation
+' ' Text
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'3' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_ary_splice' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'NUM2LONG' Name
+'(' Punctuation
+'argv' Name
+'[' Punctuation
+'0' Literal.Number.Integer
+']' Punctuation
+')' Punctuation
+',' Punctuation
+' ' Text
+'NUM2LONG' Name
+'(' Punctuation
+'argv' Name
+'[' Punctuation
+'1' Literal.Number.Integer
+']' Punctuation
+')' Punctuation
+',' Punctuation
+' ' Text
+'argv' Name
+'[' Punctuation
+'2' Literal.Number.Integer
+']' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'argv' Name
+'[' Punctuation
+'2' Literal.Number.Integer
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+' ' Text
+'!' Operator
+'=' Operator
+' ' Text
+'2' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_raise' Name
+'(' Punctuation
+'rb_eArgError' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'wrong number of arguments (%d for 2)' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'argc' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'FIXNUM_P' Name
+'(' Punctuation
+'argv' Name
+'[' Punctuation
+'0' Literal.Number.Integer
+']' Punctuation
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'offset' Name
+' ' Text
+'=' Operator
+' ' Text
+'FIX2LONG' Name
+'(' Punctuation
+'argv' Name
+'[' Punctuation
+'0' Literal.Number.Integer
+']' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'goto' Keyword
+' ' Text
+'fixnum' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'rb_range_beg_len' Name
+'(' Punctuation
+'argv' Name
+'[' Punctuation
+'0' Literal.Number.Integer
+']' Punctuation
+',' Punctuation
+' ' Text
+'&' Operator
+'beg' Name
+',' Punctuation
+' ' Text
+'&' Operator
+'len' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+',' Punctuation
+' ' Text
+'1' Literal.Number.Integer
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'/* check if idx is Range */' Comment.Multiline
+'\n' Text
+
+'\t' Text
+'rb_ary_splice' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'beg' Name
+',' Punctuation
+' ' Text
+'len' Name
+',' Punctuation
+' ' Text
+'argv' Name
+'[' Punctuation
+'1' Literal.Number.Integer
+']' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'argv' Name
+'[' Punctuation
+'1' Literal.Number.Integer
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'offset' Name
+' ' Text
+'=' Operator
+' ' Text
+'NUM2LONG' Name
+'(' Punctuation
+'argv' Name
+'[' Punctuation
+'0' Literal.Number.Integer
+']' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'fixnum' Name.Label
+':' Punctuation
+'\n' Text
+
+' ' Text
+'rb_ary_store' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'offset' Name
+',' Punctuation
+' ' Text
+'argv' Name
+'[' Punctuation
+'1' Literal.Number.Integer
+']' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'argv' Name
+'[' Punctuation
+'1' Literal.Number.Integer
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.insert(index, obj...) -> array\n * \n * Inserts the given values before the element with the given index\n * (which may be negative).\n * \n * a = %w{ a b c d }\n * a.insert(2, 99) #=> ["a", "b", 99, "c", "d"]\n * a.insert(-2, 1, 2, 3) #=> ["a", "b", 99, "c", 1, 2, 3, "d"]\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_insert' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'pos' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+' ' Text
+'<' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_raise' Name
+'(' Punctuation
+'rb_eArgError' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'wrong number of arguments (at least 1)' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'pos' Name
+' ' Text
+'=' Operator
+' ' Text
+'NUM2LONG' Name
+'(' Punctuation
+'argv' Name
+'[' Punctuation
+'0' Literal.Number.Integer
+']' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'pos' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'-1' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'pos' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'else' Keyword
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'pos' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'pos' Name
+'+' Operator
+'+' Operator
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'argc' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'rb_ary_splice' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'pos' Name
+',' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'rb_ary_new4' Name
+'(' Punctuation
+'argc' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'argv' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.each {|item| block } -> array\n * \n * Calls <i>block</i> once for each element in <i>self</i>, passing that\n * element as a parameter.\n * \n * a = [ "a", "b", "c" ]\n * a.each {|x| print x, " -- " }\n * \n * produces:\n * \n * a -- b -- c --\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_each' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'i' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+'=' Operator
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+'<' Operator
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+' ' Text
+'i' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_yield' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.each_index {|index| block } -> array\n * \n * Same as <code>Array#each</code>, but passes the index of the element\n * instead of the element itself.\n * \n * a = [ "a", "b", "c" ]\n * a.each_index {|x| print x, " -- " }\n * \n * produces:\n * \n * 0 -- 1 -- 2 --\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_each_index' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'i' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+'=' Operator
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+'<' Operator
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+' ' Text
+'i' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_yield' Name
+'(' Punctuation
+'LONG2NUM' Name
+'(' Punctuation
+'i' Name
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.reverse_each {|item| block } \n * \n * Same as <code>Array#each</code>, but traverses <i>self</i> in reverse\n * order.\n * \n * a = [ "a", "b", "c" ]\n * a.reverse_each {|x| print x, " " }\n * \n * produces:\n * \n * c b a\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_reverse_each' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'while' Keyword
+' ' Text
+'(' Punctuation
+'len' Name
+'-' Operator
+'-' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_yield' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'len' Name
+']' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'<' Operator
+' ' Text
+'len' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.length -> int\n * \n * Returns the number of elements in <i>self</i>. May be zero.\n * \n * [ 1, 2, 3, 4, 5 ].length #=> 5\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_length' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'LONG2NUM' Name.Function
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.empty? -> true or false\n * \n * Returns <code>true</code> if <i>self</i> array contains no elements.\n * \n * [].empty? #=> true\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_empty_p' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'Qtrue' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'Qfalse' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_dup' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'dup' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_ary_new2' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'DUPSETUP' Name
+'(' Punctuation
+'dup' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'MEMCPY' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'dup' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'VALUE' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'dup' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'dup' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'extern' Keyword
+' ' Text
+'VALUE' Name
+' ' Text
+'rb_output_fs' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'recursive_join' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'arg' Name
+',' Punctuation
+' ' Text
+'recur' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'arg' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'recur' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'recur' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'rb_str_new2' Name.Function
+'(' Punctuation
+'"' Literal.String
+'[...]' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'rb_ary_join' Name
+'(' Punctuation
+'arg' Name
+'[' Punctuation
+'0' Literal.Number.Integer
+']' Punctuation
+',' Punctuation
+' ' Text
+'arg' Name
+'[' Punctuation
+'1' Literal.Number.Integer
+']' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_join' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'sep' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+',' Punctuation
+' ' Text
+'sep' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'i' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'taint' Name
+' ' Text
+'=' Operator
+' ' Text
+'Qfalse' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'result' Name
+',' Punctuation
+' ' Text
+'tmp' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'rb_str_new' Name
+'(' Punctuation
+'0' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'OBJ_TAINTED' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+' ' Text
+'|' Operator
+'|' Operator
+' ' Text
+'OBJ_TAINTED' Name
+'(' Punctuation
+'sep' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'taint' Name
+' ' Text
+'=' Operator
+' ' Text
+'Qtrue' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+'=' Operator
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+'<' Operator
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+' ' Text
+'i' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'tmp' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_check_string_type' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'len' Name
+' ' Text
+'+' Operator
+'=' Operator
+' ' Text
+'NIL_P' Name
+'(' Punctuation
+'tmp' Name
+')' Punctuation
+' ' Text
+'?' Operator
+' ' Text
+'10' Literal.Number.Integer
+' ' Text
+':' Operator
+' ' Text
+'RSTRING' Name
+'(' Punctuation
+'tmp' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'!' Operator
+'NIL_P' Name
+'(' Punctuation
+'sep' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'StringValue' Name
+'(' Punctuation
+'sep' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'len' Name
+' ' Text
+'+' Operator
+'=' Operator
+' ' Text
+'RSTRING' Name
+'(' Punctuation
+'sep' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'*' Operator
+' ' Text
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'result' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_str_buf_new' Name
+'(' Punctuation
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+'=' Operator
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+'<' Operator
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+' ' Text
+'i' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'tmp' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'switch' Keyword
+' ' Text
+'(' Punctuation
+'TYPE' Name
+'(' Punctuation
+'tmp' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'case' Keyword
+' ' Text
+'T_STRING' Name.Label
+':' Punctuation
+'\n' Text
+
+'\t ' Text
+'break' Keyword
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'case' Keyword
+' ' Text
+'T_ARRAY' Name.Label
+':' Punctuation
+'\n' Text
+
+'\t ' Text
+'{' Punctuation
+'\n' Text
+
+'\t\t' Text
+'VALUE' Name
+' ' Text
+'args' Name
+'[' Punctuation
+'2' Literal.Number.Integer
+']' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'\t\t' Text
+'args' Name
+'[' Punctuation
+'0' Literal.Number.Integer
+']' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'tmp' Name
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'args' Name
+'[' Punctuation
+'1' Literal.Number.Integer
+']' Punctuation
+' ' Text
+'=' Operator
+' ' Text
+'sep' Name
+';' Punctuation
+'\n' Text
+
+'\t\t' Text
+'tmp' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_exec_recursive' Name
+'(' Punctuation
+'recursive_join' Name
+',' Punctuation
+' ' Text
+'ary' Name
+',' Punctuation
+' ' Text
+'(' Punctuation
+'VALUE' Name
+')' Punctuation
+'args' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'}' Punctuation
+'\n' Text
+
+'\t ' Text
+'break' Keyword
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'default' Keyword
+':' Operator
+'\n' Text
+
+'\t ' Text
+'tmp' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_obj_as_string' Name
+'(' Punctuation
+'tmp' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'&' Operator
+'&' Operator
+' ' Text
+'!' Operator
+'NIL_P' Name
+'(' Punctuation
+'sep' Name
+')' Punctuation
+')' Punctuation
+'\n' Text
+
+'\t ' Text
+'rb_str_buf_append' Name
+'(' Punctuation
+'result' Name
+',' Punctuation
+' ' Text
+'sep' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_str_buf_append' Name
+'(' Punctuation
+'result' Name
+',' Punctuation
+' ' Text
+'tmp' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'OBJ_TAINTED' Name
+'(' Punctuation
+'tmp' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'taint' Name
+' ' Text
+'=' Operator
+' ' Text
+'Qtrue' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'taint' Name
+')' Punctuation
+' ' Text
+'OBJ_TAINT' Name
+'(' Punctuation
+'result' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'result' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.join(sep=$,) -> str\n * \n * Returns a string created by converting each element of the array to\n * a string, separated by <i>sep</i>.\n * \n * [ "a", "b", "c" ].join #=> "abc"\n * [ "a", "b", "c" ].join("-") #=> "a-b-c"\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_join_m' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'sep' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'rb_scan_args' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'01' Literal.String
+'"' Literal.String
+',' Punctuation
+' ' Text
+'&' Operator
+'sep' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'NIL_P' Name
+'(' Punctuation
+'sep' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'sep' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_output_fs' Name
+';' Punctuation
+'\n' Text
+
+' \n ' Text
+'return' Keyword
+' ' Text
+'rb_ary_join' Name.Function
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'sep' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.to_s -> string\n * \n * Returns _self_<code>.join</code>.\n * \n * [ "a", "e", "i", "o" ].to_s #=> "aeio"\n *\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_to_s' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'rb_str_new' Name
+'(' Punctuation
+'0' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' \n ' Text
+'return' Keyword
+' ' Text
+'rb_ary_join' Name.Function
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'rb_output_fs' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'inspect_ary' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'dummy' Name
+',' Punctuation
+' ' Text
+'recur' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'dummy' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'recur' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'tainted' Name
+' ' Text
+'=' Operator
+' ' Text
+'OBJ_TAINTED' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'i' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'s' Name
+',' Punctuation
+' ' Text
+'str' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'recur' Name
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'rb_tainted_str_new2' Name
+'(' Punctuation
+'"' Literal.String
+'[...]' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'str' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_str_buf_new2' Name
+'(' Punctuation
+'"' Literal.String
+'[' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+'=' Operator
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+'<' Operator
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+' ' Text
+'i' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'s' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_inspect' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'OBJ_TAINTED' Name
+'(' Punctuation
+'s' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'tainted' Name
+' ' Text
+'=' Operator
+' ' Text
+'Qtrue' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'rb_str_buf_cat2' Name
+'(' Punctuation
+'str' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+', ' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_str_buf_append' Name
+'(' Punctuation
+'str' Name
+',' Punctuation
+' ' Text
+'s' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'rb_str_buf_cat2' Name
+'(' Punctuation
+'str' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+']' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'tainted' Name
+')' Punctuation
+' ' Text
+'OBJ_TAINT' Name
+'(' Punctuation
+'str' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'str' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.inspect -> string\n *\n * Create a printable version of <i>array</i>.\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_inspect' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'rb_str_new2' Name
+'(' Punctuation
+'"' Literal.String
+'[]' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'rb_exec_recursive' Name.Function
+'(' Punctuation
+'inspect_ary' Name
+',' Punctuation
+' ' Text
+'ary' Name
+',' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.to_a -> array\n * \n * Returns _self_. If called on a subclass of Array, converts\n * the receiver to an Array object.\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_to_a' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'rb_obj_class' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+' ' Text
+'!' Operator
+'=' Operator
+' ' Text
+'rb_cArray' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'VALUE' Name
+' ' Text
+'dup' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_ary_new2' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_ary_replace' Name
+'(' Punctuation
+'dup' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'dup' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.to_ary -> array\n * \n * Returns _self_.\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_to_ary_m' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_reverse' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'p1' Name
+',' Punctuation
+' ' Text
+'*' Operator
+'p2' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'tmp' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'rb_ary_modify' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'>' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'p1' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'p2' Name
+' ' Text
+'=' Operator
+' ' Text
+'p1' Name
+' ' Text
+'+' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+';' Punctuation
+'\t' Text
+'/* points last item */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'\t' Text
+'while' Keyword
+' ' Text
+'(' Punctuation
+'p1' Name
+' ' Text
+'<' Operator
+' ' Text
+'p2' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'tmp' Name
+' ' Text
+'=' Operator
+' ' Text
+'*' Operator
+'p1' Name
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'*' Operator
+'p1' Name
+'+' Operator
+'+' Operator
+' ' Text
+'=' Operator
+' ' Text
+'*' Operator
+'p2' Name
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'*' Operator
+'p2' Name
+'-' Operator
+'-' Operator
+' ' Text
+'=' Operator
+' ' Text
+'tmp' Name
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.reverse! -> array \n * \n * Reverses _self_ in place.\n * \n * a = [ "a", "b", "c" ]\n * a.reverse! #=> ["c", "b", "a"]\n * a #=> ["c", "b", "a"]\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_reverse_bang' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'rb_ary_reverse' Name.Function
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.reverse -> an_array\n * \n * Returns a new array containing <i>self</i>\'s elements in reverse order.\n * \n * [ "a", "b", "c" ].reverse #=> ["c", "b", "a"]\n * [ 1 ].reverse #=> [1]\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_reverse_m' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'rb_ary_reverse' Name.Function
+'(' Punctuation
+'rb_ary_dup' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'struct' Keyword
+' ' Text
+'ary_sort_data' Name.Class
+' ' Text
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'ptr' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'len' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'void' Keyword.Type
+'\n' Text
+
+'ary_sort_check' Name
+'(' Punctuation
+'data' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'struct' Keyword
+' ' Text
+'ary_sort_data' Name.Class
+' ' Text
+'*' Operator
+'data' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'data' Name
+'-' Operator
+'>' Operator
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'!' Operator
+'=' Operator
+' ' Text
+'data' Name
+'-' Operator
+'>' Operator
+'ptr' Name
+' ' Text
+'|' Operator
+'|' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'data' Name
+'-' Operator
+'>' Operator
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'!' Operator
+'=' Operator
+' ' Text
+'data' Name
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_raise' Name
+'(' Punctuation
+'rb_eRuntimeError' Name
+',' Punctuation
+' ' Text
+'"' Literal.String
+'array modified during sort' Literal.String
+'"' Literal.String
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'int' Keyword.Type
+'\n' Text
+
+'sort_1' Name
+'(' Punctuation
+'a' Name
+',' Punctuation
+' ' Text
+'b' Name
+',' Punctuation
+' ' Text
+'data' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'a' Name
+',' Punctuation
+' ' Text
+'*' Operator
+'b' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'struct' Keyword
+' ' Text
+'ary_sort_data' Name.Class
+' ' Text
+'*' Operator
+'data' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'retval' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_yield_values' Name
+'(' Punctuation
+'2' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'*' Operator
+'a' Name
+',' Punctuation
+' ' Text
+'*' Operator
+'b' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_cmpint' Name
+'(' Punctuation
+'retval' Name
+',' Punctuation
+' ' Text
+'*' Operator
+'a' Name
+',' Punctuation
+' ' Text
+'*' Operator
+'b' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'ary_sort_check' Name
+'(' Punctuation
+'data' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'int' Keyword.Type
+'\n' Text
+
+'sort_2' Name
+'(' Punctuation
+'ap' Name
+',' Punctuation
+' ' Text
+'bp' Name
+',' Punctuation
+' ' Text
+'data' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'ap' Name
+',' Punctuation
+' ' Text
+'*' Operator
+'bp' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'struct' Keyword
+' ' Text
+'ary_sort_data' Name.Class
+' ' Text
+'*' Operator
+'data' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'retval' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'a' Name
+' ' Text
+'=' Operator
+' ' Text
+'*' Operator
+'ap' Name
+',' Punctuation
+' ' Text
+'b' Name
+' ' Text
+'=' Operator
+' ' Text
+'*' Operator
+'bp' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'FIXNUM_P' Name
+'(' Punctuation
+'a' Name
+')' Punctuation
+' ' Text
+'&' Operator
+'&' Operator
+' ' Text
+'FIXNUM_P' Name
+'(' Punctuation
+'b' Name
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'(' Punctuation
+'long' Keyword.Type
+')' Punctuation
+'a' Name
+' ' Text
+'>' Operator
+' ' Text
+'(' Punctuation
+'long' Keyword.Type
+')' Punctuation
+'b' Name
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'1' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'(' Punctuation
+'long' Keyword.Type
+')' Punctuation
+'a' Name
+' ' Text
+'<' Operator
+' ' Text
+'(' Punctuation
+'long' Keyword.Type
+')' Punctuation
+'b' Name
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'-1' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'TYPE' Name
+'(' Punctuation
+'a' Name
+')' Punctuation
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'T_STRING' Name
+' ' Text
+'&' Operator
+'&' Operator
+' ' Text
+'TYPE' Name
+'(' Punctuation
+'b' Name
+')' Punctuation
+' ' Text
+'=' Operator
+'=' Operator
+' ' Text
+'T_STRING' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'rb_str_cmp' Name.Function
+'(' Punctuation
+'a' Name
+',' Punctuation
+' ' Text
+'b' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'retval' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_funcall' Name
+'(' Punctuation
+'a' Name
+',' Punctuation
+' ' Text
+'id_cmp' Name
+',' Punctuation
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'b' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_cmpint' Name
+'(' Punctuation
+'retval' Name
+',' Punctuation
+' ' Text
+'a' Name
+',' Punctuation
+' ' Text
+'b' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'ary_sort_check' Name
+'(' Punctuation
+'data' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'n' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'sort_internal' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'struct' Keyword
+' ' Text
+'ary_sort_data' Name.Class
+' ' Text
+'data' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'data' Name
+'.' Punctuation
+'ary' Name
+' ' Text
+'=' Operator
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'data' Name
+'.' Punctuation
+'ptr' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+';' Punctuation
+' ' Text
+'data' Name
+'.' Punctuation
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'qsort' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+',' Punctuation
+' ' Text
+'sizeof' Keyword
+'(' Punctuation
+'VALUE' Name
+')' Punctuation
+',' Punctuation
+'\n' Text
+
+'\t ' Text
+'rb_block_given_p' Name
+'(' Punctuation
+')' Punctuation
+'?' Operator
+'sort_1' Name.Label
+':' Punctuation
+'sort_2' Name
+',' Punctuation
+' ' Text
+'&' Operator
+'data' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'sort_unlock' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'FL_UNSET' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'ARY_TMPLOCK' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.sort! -> array\n * array.sort! {| a,b | block } -> array \n * \n * Sorts _self_. Comparisons for\n * the sort will be done using the <code><=></code> operator or using\n * an optional code block. The block implements a comparison between\n * <i>a</i> and <i>b</i>, returning -1, 0, or +1. See also\n * <code>Enumerable#sort_by</code>.\n * \n * a = [ "d", "a", "e", "c", "b" ]\n * a.sort #=> ["a", "b", "c", "d", "e"]\n * a.sort {|x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_sort_bang' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'rb_ary_modify' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+' ' Text
+'>' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'FL_SET' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'ARY_TMPLOCK' Name
+')' Punctuation
+';' Punctuation
+'\t' Text
+'/* prohibit modification during sort */' Comment.Multiline
+'\n' Text
+
+'\t' Text
+'rb_ensure' Name
+'(' Punctuation
+'sort_internal' Name
+',' Punctuation
+' ' Text
+'ary' Name
+',' Punctuation
+' ' Text
+'sort_unlock' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.sort -> an_array \n * array.sort {| a,b | block } -> an_array \n * \n * Returns a new array created by sorting <i>self</i>. Comparisons for\n * the sort will be done using the <code><=></code> operator or using\n * an optional code block. The block implements a comparison between\n * <i>a</i> and <i>b</i>, returning -1, 0, or +1. See also\n * <code>Enumerable#sort_by</code>.\n * \n * a = [ "d", "a", "e", "c", "b" ]\n * a.sort #=> ["a", "b", "c", "d", "e"]\n * a.sort {|x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_ary_sort' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'ary' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_ary_dup' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'rb_ary_sort_bang' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.collect {|item| block } -> an_array\n * array.map {|item| block } -> an_array\n * \n * Invokes <i>block</i> once for each element of <i>self</i>. Creates a \n * new array containing the values returned by the block.\n * See also <code>Enumerable#collect</code>.\n * \n * a = [ "a", "b", "c", "d" ]\n * a.collect {|x| x + "!" } #=> ["a!", "b!", "c!", "d!"]\n * a #=> ["a", "b", "c", "d"]\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_collect' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'i' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'collect' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'!' Operator
+'rb_block_given_p' Name
+'(' Punctuation
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'return' Keyword
+' ' Text
+'rb_ary_new4' Name.Function
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'collect' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_ary_new2' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+' ' Text
+'<' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+' ' Text
+'i' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_ary_push' Name
+'(' Punctuation
+'collect' Name
+',' Punctuation
+' ' Text
+'rb_yield' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'collect' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/* \n * call-seq:\n * array.collect! {|item| block } -> array\n * array.map! {|item| block } -> array\n *\n * Invokes the block once for each element of _self_, replacing the\n * element with the value returned by _block_.\n * See also <code>Enumerable#collect</code>.\n * \n * a = [ "a", "b", "c", "d" ]\n * a.collect! {|x| x + "!" }\n * a #=> [ "a!", "b!", "c!", "d!" ]\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_collect_bang' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'i' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'rb_ary_modify' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+' ' Text
+'<' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+' ' Text
+'i' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_ary_store' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'i' Name
+',' Punctuation
+' ' Text
+'rb_yield' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'VALUE' Name
+'\n' Text
+
+'rb_get_values_at' Name
+'(' Punctuation
+'obj' Name
+',' Punctuation
+' ' Text
+'olen' Name
+',' Punctuation
+' ' Text
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'func' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'obj' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'olen' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'(' Punctuation
+'*' Operator
+'func' Name
+')' Punctuation
+' ' Text
+'_' Name
+'(' Punctuation
+'(' Punctuation
+'VALUE' Name
+',' Punctuation
+'long' Keyword.Type
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'result' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_ary_new2' Name
+'(' Punctuation
+'argc' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'beg' Name
+',' Punctuation
+' ' Text
+'len' Name
+',' Punctuation
+' ' Text
+'i' Name
+',' Punctuation
+' ' Text
+'j' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+'=' Operator
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+'<' Operator
+'argc' Name
+';' Punctuation
+' ' Text
+'i' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'FIXNUM_P' Name
+'(' Punctuation
+'argv' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'rb_ary_push' Name
+'(' Punctuation
+'result' Name
+',' Punctuation
+' ' Text
+'(' Punctuation
+'*' Operator
+'func' Name
+')' Punctuation
+'(' Punctuation
+'obj' Name
+',' Punctuation
+' ' Text
+'FIX2LONG' Name
+'(' Punctuation
+'argv' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+')' Punctuation
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'continue' Keyword
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'/* check if idx is Range */' Comment.Multiline
+'\n' Text
+
+'\t' Text
+'switch' Keyword
+' ' Text
+'(' Punctuation
+'rb_range_beg_len' Name
+'(' Punctuation
+'argv' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+',' Punctuation
+' ' Text
+'&' Operator
+'beg' Name
+',' Punctuation
+' ' Text
+'&' Operator
+'len' Name
+',' Punctuation
+' ' Text
+'olen' Name
+',' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'case' Keyword
+' ' Text
+'Qfalse' Name.Label
+':' Punctuation
+'\n' Text
+
+'\t ' Text
+'break' Keyword
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'case' Keyword
+' ' Text
+'Qnil' Name.Label
+':' Punctuation
+'\n' Text
+
+'\t ' Text
+'continue' Keyword
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'default' Keyword
+':' Operator
+'\n' Text
+
+'\t ' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'j' Name
+'=' Operator
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'j' Name
+'<' Operator
+'len' Name
+';' Punctuation
+' ' Text
+'j' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t\t' Text
+'rb_ary_push' Name
+'(' Punctuation
+'result' Name
+',' Punctuation
+' ' Text
+'(' Punctuation
+'*' Operator
+'func' Name
+')' Punctuation
+'(' Punctuation
+'obj' Name
+',' Punctuation
+' ' Text
+'j' Name
+'+' Operator
+'beg' Name
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t ' Text
+'}' Punctuation
+'\n' Text
+
+'\t ' Text
+'continue' Keyword
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+'\t' Text
+'rb_ary_push' Name
+'(' Punctuation
+'result' Name
+',' Punctuation
+' ' Text
+'(' Punctuation
+'*' Operator
+'func' Name
+')' Punctuation
+'(' Punctuation
+'obj' Name
+',' Punctuation
+' ' Text
+'NUM2LONG' Name
+'(' Punctuation
+'argv' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+')' Punctuation
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'result' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/* \n * call-seq:\n * array.values_at(selector,... ) -> an_array\n *\n * Returns an array containing the elements in\n * _self_ corresponding to the given selector(s). The selectors\n * may be either integer indices or ranges. \n * See also <code>Array#select</code>.\n * \n * a = %w{ a b c d e f }\n * a.values_at(1, 3, 5)\n * a.values_at(1, 3, 5, 7)\n * a.values_at(-1, -3, -5, -7)\n * a.values_at(1..3, 2...5)\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_values_at' Name
+'(' Punctuation
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'int' Keyword.Type
+' ' Text
+'argc' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'*' Operator
+'argv' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'rb_get_values_at' Name.Function
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+',' Punctuation
+' ' Text
+'argc' Name
+',' Punctuation
+' ' Text
+'argv' Name
+',' Punctuation
+' ' Text
+'rb_ary_entry' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'/*\n * call-seq:\n * array.select {|item| block } -> an_array\n * \n * Invokes the block passing in successive elements from <i>array</i>,\n * returning an array containing those elements for which the block\n * returns a true value (equivalent to <code>Enumerable#select</code>).\n * \n * a = %w{ a b c d e f }\n * a.select {|v| v =~ /[aeiou]/} #=> ["a", "e"]\n */' Comment.Multiline
+'\n' Text
+
+'\n' Text
+
+'static' Keyword
+' ' Text
+'VALUE' Name
+'\n' Text
+
+'rb_ary_select' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'ary' Name
+';' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n' Text
+
+' ' Text
+'VALUE' Name
+' ' Text
+'result' Name
+';' Punctuation
+'\n' Text
+
+' ' Text
+'long' Keyword.Type
+' ' Text
+'i' Name
+';' Punctuation
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'result' Name
+' ' Text
+'=' Operator
+' ' Text
+'rb_ary_new2' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'(' Punctuation
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+' ' Text
+'i' Name
+' ' Text
+'<' Operator
+' ' Text
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'len' Name
+';' Punctuation
+' ' Text
+'i' Name
+'+' Operator
+'+' Operator
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+'RTEST' Name
+'(' Punctuation
+'rb_yield' Name
+'(' Punctuation
+'RARRAY' Name
+'(' Punctuation
+'ary' Name
+')' Punctuation
+'-' Operator
+'>' Operator
+'ptr' Name
+'[' Punctuation
+'i' Name
+']' Punctuation
+')' Punctuation
+')' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n' Text
+
+'\t ' Text
+'rb_ary_push' Name
+'(' Punctuation
+'result' Name
+',' Punctuation
+' ' Text
+'rb_ary_elt' Name
+'(' Punctuation
+'ary' Name
+',' Punctuation
+' ' Text
+'i' Name
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n' Text
+
+'\t' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'}' Punctuation
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'result' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text