summaryrefslogtreecommitdiff
path: root/sphinx/pycode
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2009-01-01 23:48:10 +0100
committerGeorg Brandl <georg@python.org>2009-01-01 23:48:10 +0100
commit45c8e6b4f22e44208206b124a685ba273df284e2 (patch)
treec8b556add5024b27c1abf633fc299894505b7b71 /sphinx/pycode
parentc9d52ded703813ca16c75702bd18b9fcbd2e751d (diff)
downloadsphinx-45c8e6b4f22e44208206b124a685ba273df284e2.tar.gz
Add Python license info, add parse.c source generated by Cython.
Diffstat (limited to 'sphinx/pycode')
-rw-r--r--sphinx/pycode/__init__.py12
-rw-r--r--sphinx/pycode/nodes.py (renamed from sphinx/pycode/pytree.py)207
-rw-r--r--sphinx/pycode/pgen2/parse.c3261
-rw-r--r--sphinx/pycode/pgen2/parse.pyx4
4 files changed, 3328 insertions, 156 deletions
diff --git a/sphinx/pycode/__init__.py b/sphinx/pycode/__init__.py
index a61208d5..d707db2d 100644
--- a/sphinx/pycode/__init__.py
+++ b/sphinx/pycode/__init__.py
@@ -5,7 +5,7 @@
Utilities parsing and analyzing Python code.
- :copyright: 2008 by Georg Brandl.
+ :copyright: 2008-2009 by Georg Brandl.
:license: BSD, see LICENSE for details.
"""
@@ -13,7 +13,7 @@ import sys
from os import path
from cStringIO import StringIO
-from sphinx.pycode import pytree
+from sphinx.pycode import nodes
from sphinx.pycode.pgen2 import driver, token, tokenize, parse, literals
from sphinx.util.docstrings import prepare_docstring, prepare_commentdoc
@@ -21,7 +21,7 @@ from sphinx.util.docstrings import prepare_docstring, prepare_commentdoc
# load the Python grammar
_grammarfile = path.join(path.dirname(__file__), 'Grammar.txt')
pygrammar = driver.load_grammar(_grammarfile)
-pydriver = driver.Driver(pygrammar, convert=pytree.convert)
+pydriver = driver.Driver(pygrammar, convert=nodes.convert)
# an object with attributes corresponding to token and symbol names
class sym: pass
@@ -35,10 +35,10 @@ number2name = pygrammar.number2symbol.copy()
number2name.update(token.tok_name)
-_eq = pytree.Leaf(token.EQUAL, '=')
+_eq = nodes.Leaf(token.EQUAL, '=')
-class AttrDocVisitor(pytree.NodeVisitor):
+class AttrDocVisitor(nodes.NodeVisitor):
"""
Visitor that collects docstrings for attribute assignments on toplevel and
in classes.
@@ -263,5 +263,5 @@ if __name__ == '__main__':
# print '\n'.join(doc)
pprint.pprint(ma.find_tags())
x3 = time.time()
- #print pytree.nice_repr(ma.parsetree, number2name)
+ #print nodes.nice_repr(ma.parsetree, number2name)
print "tokenizing %.4f, parsing %.4f, finding %.4f" % (x1-x0, x2-x1, x3-x2)
diff --git a/sphinx/pycode/pytree.py b/sphinx/pycode/nodes.py
index 063e39ec..d0fb522b 100644
--- a/sphinx/pycode/pytree.py
+++ b/sphinx/pycode/nodes.py
@@ -1,100 +1,53 @@
-# Copyright 2006 Google, Inc. All Rights Reserved.
-# Licensed to PSF under a Contributor Agreement.
-
-"""Python parse tree definitions.
-
-This is a very concrete parse tree; we need to keep every token and
-even the comments and whitespace between tokens.
-
-Adapted for read-only nodes from pytree.py in Python's 2to3 tool, and
-added a few bits.
+# -*- coding: utf-8 -*-
"""
+ sphinx.pycode.nodes
+ ~~~~~~~~~~~~~~~~~~~
-__author__ = "Guido van Rossum <guido@python.org>"
-
-
-class Base(object):
+ Parse tree node implementations.
- """Abstract base class for Node and Leaf.
+ :copyright: 2009 by Georg Brandl.
+ :license: BSD, see LICENSE for details.
+"""
- This provides some default functionality and boilerplate using the
- template pattern.
- A node may be a subnode of at most one parent.
+class BaseNode(object):
+ """
+ Node superclass for both terminal and nonterminal nodes.
"""
- # Default values for instance variables
- type = None # int: token number (< 256) or symbol number (>= 256)
- parent = None # Parent node pointer, or None
- children = () # Tuple of subnodes
- was_changed = False
+ def _eq(self, other):
+ raise NotImplementedError
def __eq__(self, other):
- """Compares two nodes for equality.
-
- This calls the method _eq().
- """
if self.__class__ is not other.__class__:
return NotImplemented
return self._eq(other)
def __ne__(self, other):
- """Compares two nodes for inequality.
-
- This calls the method _eq().
- """
if self.__class__ is not other.__class__:
return NotImplemented
return not self._eq(other)
- def _eq(self, other):
- """Compares two nodes for equality.
-
- This is called by __eq__ and __ne__. It is only called if the
- two nodes have the same type. This must be implemented by the
- concrete subclass. Nodes should be considered equal if they
- have the same structure, ignoring the prefix string and other
- context information.
- """
- raise NotImplementedError
-
- def get_lineno(self):
- """Returns the line number which generated the invocant node."""
- node = self
- while not isinstance(node, Leaf):
- if not node.children:
- return
- node = node.children[0]
- return node.lineno
-
- def get_next_sibling(self):
- """Return the node immediately following the invocant in their
- parent's children list. If the invocant does not have a next
- sibling, return None."""
+ def get_prev_sibling(self):
+ """Return previous child in parent's children, or None."""
if self.parent is None:
return None
-
- # Can't use index(); we need to test by identity
for i, child in enumerate(self.parent.children):
if child is self:
- try:
- return self.parent.children[i+1]
- except IndexError:
+ if i == 0:
return None
+ return self.parent.children[i-1]
- def get_prev_sibling(self):
- """Return the node immediately preceding the invocant in their
- parent's children list. If the invocant does not have a previous
- sibling, return None."""
+ def get_next_sibling(self):
+ """Return next child in parent's children, or None."""
if self.parent is None:
return None
-
- # Can't use index(); we need to test by identity
for i, child in enumerate(self.parent.children):
if child is self:
- if i == 0:
+ try:
+ return self.parent.children[i+1]
+ except IndexError:
return None
- return self.parent.children[i-1]
def get_prev_leaf(self):
"""Return the leaf node that precedes this node in the parse tree."""
@@ -114,46 +67,51 @@ class Base(object):
return last_child(prev)
return self.parent.get_prev_leaf()
- def get_suffix(self):
- """Return the string immediately following the invocant node. This
- is effectively equivalent to node.get_next_sibling().get_prefix()"""
- next_sib = self.get_next_sibling()
- if next_sib is None:
- return ""
- return next_sib.get_prefix()
-
+ def get_next_leaf(self):
+ """Return self if leaf, otherwise the leaf node that succeeds this
+ node in the parse tree.
+ """
+ node = self
+ while not isinstance(node, Leaf):
+ assert node.children
+ node = node.children[0]
+ return node
-class Node(Base):
+ def get_lineno(self):
+ """Return the line number which generated the invocant node."""
+ return self.get_next_leaf().lineno
- """Concrete implementation for interior nodes."""
+ def get_prefix(self):
+ """Return the prefix of the next leaf node."""
+ # only leaves carry a prefix
+ return self.get_next_leaf().prefix
- def __init__(self, type, children, context=None):
- """Initializer.
- Takes a type constant (a symbol number >= 256), a sequence of
- child nodes, and an optional context keyword argument.
+class Node(BaseNode):
+ """
+ Node implementation for nonterminals.
+ """
- As a side effect, the parent pointers of the children are updated.
- """
+ def __init__(self, type, children, context=None):
+ # type of nonterminals is >= 256
# assert type >= 256, type
self.type = type
self.children = list(children)
for ch in self.children:
# assert ch.parent is None, repr(ch)
ch.parent = self
- # if prefix is not None:
- # self.set_prefix(prefix)
def __repr__(self):
- return "%s(%s, %r)" % (self.__class__.__name__,
- self.type, self.children)
+ return '%s(%s, %r)' % (self.__class__.__name__, self.type, self.children)
def __str__(self):
"""This reproduces the input source exactly."""
- return "".join(map(str, self.children))
+ return ''.join(map(str, self.children))
- def compact(self):
- return ''.join(child.compact() for child in self.children)
+ def _eq(self, other):
+ return (self.type, self.children) == (other.type, other.children)
+
+ # support indexing the node directly instead of .children
def __getitem__(self, index):
return self.children[index]
@@ -164,84 +122,35 @@ class Node(Base):
def __len__(self):
return len(self.children)
- def _eq(self, other):
- """Compares two nodes for equality."""
- return (self.type, self.children) == (other.type, other.children)
-
- def post_order(self):
- """Returns a post-order iterator for the tree."""
- for child in self.children:
- for node in child.post_order():
- yield node
- yield self
- def pre_order(self):
- """Returns a pre-order iterator for the tree."""
- yield self
- for child in self.children:
- for node in child.post_order():
- yield node
-
- def get_prefix(self):
- """Returns the prefix for the node.
-
- This passes the call on to the first child.
- """
- if not self.children:
- return ""
- return self.children[0].get_prefix()
-
-
-class Leaf(Base):
-
- """Concrete implementation for leaf nodes."""
-
- # Default values for instance variables
- prefix = "" # Whitespace and comments preceding this token in the input
+class Leaf(BaseNode):
+ """
+ Node implementation for leaf nodes (terminals).
+ """
+ prefix = '' # Whitespace and comments preceding this token in the input
lineno = 0 # Line where this token starts in the input
column = 0 # Column where this token tarts in the input
def __init__(self, type, value, context=None):
- """Initializer.
-
- Takes a type constant (a token number < 256), a string value,
- and an optional context keyword argument.
- """
+ # type of terminals is below 256
# assert 0 <= type < 256, type
- if context is not None:
- self.prefix, (self.lineno, self.column) = context
self.type = type
self.value = value
- # if prefix is not None:
- # self.prefix = prefix
+ if context is not None:
+ self.prefix, (self.lineno, self.column) = context
def __repr__(self):
- return "%s(%r, %r, %r)" % (self.__class__.__name__,
+ return '%s(%r, %r, %r)' % (self.__class__.__name__,
self.type, self.value, self.prefix)
def __str__(self):
"""This reproduces the input source exactly."""
return self.prefix + str(self.value)
- def compact(self):
- return str(self.value)
-
def _eq(self, other):
"""Compares two nodes for equality."""
return (self.type, self.value) == (other.type, other.value)
- def post_order(self):
- """Returns a post-order iterator for the tree."""
- yield self
-
- def pre_order(self):
- """Returns a pre-order iterator for the tree."""
- yield self
-
- def get_prefix(self):
- """Returns the prefix for the node."""
- return self.prefix
-
def convert(grammar, raw_node):
"""Convert raw node to a Node or Leaf instance."""
diff --git a/sphinx/pycode/pgen2/parse.c b/sphinx/pycode/pgen2/parse.c
new file mode 100644
index 00000000..fd0e9ff9
--- /dev/null
+++ b/sphinx/pycode/pgen2/parse.c
@@ -0,0 +1,3261 @@
+/* Generated by Cython 0.9.8.1 on Thu Jan 1 23:45:38 2009 */
+
+#define PY_SSIZE_T_CLEAN
+#include "Python.h"
+#include "structmember.h"
+#ifndef PY_LONG_LONG
+ #define PY_LONG_LONG LONG_LONG
+#endif
+#ifndef DL_EXPORT
+ #define DL_EXPORT(t) t
+#endif
+#if PY_VERSION_HEX < 0x02040000
+ #define METH_COEXIST 0
+#endif
+#if PY_VERSION_HEX < 0x02050000
+ typedef int Py_ssize_t;
+ #define PY_SSIZE_T_MAX INT_MAX
+ #define PY_SSIZE_T_MIN INT_MIN
+ #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
+ #define PyInt_AsSsize_t(o) PyInt_AsLong(o)
+ #define PyNumber_Index(o) PyNumber_Int(o)
+ #define PyIndex_Check(o) PyNumber_Check(o)
+#endif
+#if PY_VERSION_HEX < 0x02060000
+ #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
+ #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
+ #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size)
+ #define PyVarObject_HEAD_INIT(type, size) \
+ PyObject_HEAD_INIT(type) size,
+ #define PyType_Modified(t)
+
+ typedef struct {
+ void *buf;
+ Py_ssize_t len;
+ int readonly;
+ const char *format;
+ int ndim;
+ Py_ssize_t *shape;
+ Py_ssize_t *strides;
+ Py_ssize_t *suboffsets;
+ Py_ssize_t itemsize;
+ void *internal;
+ } Py_buffer;
+
+ #define PyBUF_SIMPLE 0
+ #define PyBUF_WRITABLE 0x0001
+ #define PyBUF_LOCK 0x0002
+ #define PyBUF_FORMAT 0x0004
+ #define PyBUF_ND 0x0008
+ #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
+ #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
+ #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
+ #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
+ #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
+
+#endif
+#if PY_MAJOR_VERSION < 3
+ #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
+#else
+ #define __Pyx_BUILTIN_MODULE_NAME "builtins"
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define Py_TPFLAGS_CHECKTYPES 0
+ #define Py_TPFLAGS_HAVE_INDEX 0
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define PyBaseString_Type PyUnicode_Type
+ #define PyString_Type PyBytes_Type
+ #define PyInt_Type PyLong_Type
+ #define PyInt_Check(op) PyLong_Check(op)
+ #define PyInt_CheckExact(op) PyLong_CheckExact(op)
+ #define PyInt_FromString PyLong_FromString
+ #define PyInt_FromUnicode PyLong_FromUnicode
+ #define PyInt_FromLong PyLong_FromLong
+ #define PyInt_FromSize_t PyLong_FromSize_t
+ #define PyInt_FromSsize_t PyLong_FromSsize_t
+ #define PyInt_AsLong PyLong_AsLong
+ #define PyInt_AS_LONG PyLong_AS_LONG
+ #define PyInt_AsSsize_t PyLong_AsSsize_t
+ #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask
+ #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+ #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y)
+#else
+ #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y)
+ #define PyBytes_Type PyString_Type
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define PyMethod_New(func, self, klass) PyInstanceMethod_New(func)
+#endif
+#if !defined(WIN32) && !defined(MS_WINDOWS)
+ #ifndef __stdcall
+ #define __stdcall
+ #endif
+ #ifndef __cdecl
+ #define __cdecl
+ #endif
+#else
+ #define _USE_MATH_DEFINES
+#endif
+#ifdef __cplusplus
+#define __PYX_EXTERN_C extern "C"
+#else
+#define __PYX_EXTERN_C extern
+#endif
+#include <math.h>
+#define __PYX_HAVE_API__sphinx__pycode__pgen2__parse
+
+
+#ifdef __GNUC__
+#define INLINE __inline__
+#elif _WIN32
+#define INLINE __inline
+#else
+#define INLINE
+#endif
+
+typedef struct {PyObject **p; char *s; long n; char is_unicode; char intern; char is_identifier;} __Pyx_StringTabEntry; /*proto*/
+
+
+
+static int __pyx_skip_dispatch = 0;
+
+
+/* Type Conversion Predeclarations */
+
+#if PY_MAJOR_VERSION < 3
+#define __Pyx_PyBytes_FromString PyString_FromString
+#define __Pyx_PyBytes_AsString PyString_AsString
+#else
+#define __Pyx_PyBytes_FromString PyBytes_FromString
+#define __Pyx_PyBytes_AsString PyBytes_AsString
+#endif
+
+#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
+static INLINE int __Pyx_PyObject_IsTrue(PyObject* x);
+static INLINE PY_LONG_LONG __pyx_PyInt_AsLongLong(PyObject* x);
+static INLINE unsigned PY_LONG_LONG __pyx_PyInt_AsUnsignedLongLong(PyObject* x);
+static INLINE Py_ssize_t __pyx_PyIndex_AsSsize_t(PyObject* b);
+
+#define __pyx_PyInt_AsLong(x) (PyInt_CheckExact(x) ? PyInt_AS_LONG(x) : PyInt_AsLong(x))
+#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
+
+static INLINE unsigned char __pyx_PyInt_unsigned_char(PyObject* x);
+static INLINE unsigned short __pyx_PyInt_unsigned_short(PyObject* x);
+static INLINE char __pyx_PyInt_char(PyObject* x);
+static INLINE short __pyx_PyInt_short(PyObject* x);
+static INLINE int __pyx_PyInt_int(PyObject* x);
+static INLINE long __pyx_PyInt_long(PyObject* x);
+static INLINE signed char __pyx_PyInt_signed_char(PyObject* x);
+static INLINE signed short __pyx_PyInt_signed_short(PyObject* x);
+static INLINE signed int __pyx_PyInt_signed_int(PyObject* x);
+static INLINE signed long __pyx_PyInt_signed_long(PyObject* x);
+static INLINE long double __pyx_PyInt_long_double(PyObject* x);
+#ifdef __GNUC__
+/* Test for GCC > 2.95 */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))
+#define likely(x) __builtin_expect(!!(x), 1)
+#define unlikely(x) __builtin_expect(!!(x), 0)
+#else /* __GNUC__ > 2 ... */
+#define likely(x) (x)
+#define unlikely(x) (x)
+#endif /* __GNUC__ > 2 ... */
+#else /* __GNUC__ */
+#define likely(x) (x)
+#define unlikely(x) (x)
+#endif /* __GNUC__ */
+
+static PyObject *__pyx_m;
+static PyObject *__pyx_b;
+static PyObject *__pyx_empty_tuple;
+static int __pyx_lineno;
+static int __pyx_clineno = 0;
+static const char * __pyx_cfilenm= __FILE__;
+static const char *__pyx_filename;
+static const char **__pyx_f;
+
+static INLINE void __Pyx_RaiseArgtupleTooLong(Py_ssize_t num_expected, Py_ssize_t num_found); /*proto*/
+
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
+
+static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
+
+static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, char *modname); /*proto*/
+
+static INLINE PyObject *__Pyx_GetItemInt(PyObject *o, Py_ssize_t i, int is_unsigned) {
+ PyObject *r;
+ if (PyList_CheckExact(o) && 0 <= i && i < PyList_GET_SIZE(o)) {
+ r = PyList_GET_ITEM(o, i);
+ Py_INCREF(r);
+ }
+ else if (PyTuple_CheckExact(o) && 0 <= i && i < PyTuple_GET_SIZE(o)) {
+ r = PyTuple_GET_ITEM(o, i);
+ Py_INCREF(r);
+ }
+ else if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_item && (likely(i >= 0) || !is_unsigned))
+ r = PySequence_GetItem(o, i);
+ else {
+ PyObject *j = (likely(i >= 0) || !is_unsigned) ? PyInt_FromLong(i) : PyLong_FromUnsignedLongLong((sizeof(unsigned long long) > sizeof(Py_ssize_t) ? (1ULL << (sizeof(Py_ssize_t)*8)) : 0) + i);
+ if (!j)
+ return 0;
+ r = PyObject_GetItem(o, j);
+ Py_DECREF(j);
+ }
+ return r;
+}
+
+static PyObject *__Pyx_UnpackItem(PyObject *, Py_ssize_t index); /*proto*/
+static int __Pyx_EndUnpack(PyObject *); /*proto*/
+
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+
+static INLINE PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
+ if (likely(PyList_CheckExact(L))) {
+ if (PyList_Append(L, x) < 0) return NULL;
+ Py_INCREF(Py_None);
+ return Py_None; // this is just to have an accurate signature
+ }
+ else {
+ return PyObject_CallMethod(L, "append", "(O)", x);
+ }
+}
+
+static INLINE int __Pyx_SetItemInt(PyObject *o, Py_ssize_t i, PyObject *v, int is_unsigned) {
+ int r;
+ if (PyList_CheckExact(o) && 0 <= i && i < PyList_GET_SIZE(o)) {
+ Py_DECREF(PyList_GET_ITEM(o, i));
+ Py_INCREF(v);
+ PyList_SET_ITEM(o, i, v);
+ return 1;
+ }
+ else if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_ass_item && (likely(i >= 0) || !is_unsigned))
+ r = PySequence_SetItem(o, i, v);
+ else {
+ PyObject *j = (likely(i >= 0) || !is_unsigned) ? PyInt_FromLong(i) : PyLong_FromUnsignedLongLong((sizeof(unsigned long long) > sizeof(Py_ssize_t) ? (1ULL << (sizeof(Py_ssize_t)*8)) : 0) + i);
+ if (!j)
+ return -1;
+ r = PyObject_SetItem(o, j, v);
+ Py_DECREF(j);
+ }
+ return r;
+}
+
+static void __Pyx_WriteUnraisable(const char *name); /*proto*/
+
+static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
+
+static void __Pyx_AddTraceback(const char *funcname); /*proto*/
+
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
+
+/* Type declarations */
+
+/* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":31
+ *
+ *
+ * cdef class Parser: # <<<<<<<<<<<<<<
+ * cdef public grammar, stack, rootnode, used_names
+ * cdef _grammar_dfas, _grammar_labels, _grammar_keywords, _grammar_tokens
+ */
+
+struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser {
+ PyObject_HEAD
+ struct __pyx_vtabstruct_6sphinx_6pycode_5pgen2_5parse_Parser *__pyx_vtab;
+ PyObject *grammar;
+ PyObject *stack;
+ PyObject *rootnode;
+ PyObject *used_names;
+ PyObject *_grammar_dfas;
+ PyObject *_grammar_labels;
+ PyObject *_grammar_keywords;
+ PyObject *_grammar_tokens;
+ PyObject *_grammar_number2symbol;
+};
+
+
+struct __pyx_vtabstruct_6sphinx_6pycode_5pgen2_5parse_Parser {
+ int (*classify)(struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *, PyObject *, PyObject *, PyObject *);
+ void (*shift)(struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *, PyObject *, PyObject *, PyObject *, PyObject *);
+ void (*push)(struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *, PyObject *, PyObject *, PyObject *, PyObject *);
+ void (*pop)(struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *);
+ PyObject *(*convert)(struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *, PyObject *);
+};
+static struct __pyx_vtabstruct_6sphinx_6pycode_5pgen2_5parse_Parser *__pyx_vtabptr_6sphinx_6pycode_5pgen2_5parse_Parser;
+/* Module declarations from sphinx.pycode.pgen2.parse */
+
+static PyTypeObject *__pyx_ptype_6sphinx_6pycode_5pgen2_5parse_Parser = 0;
+
+
+/* Implementation of sphinx.pycode.pgen2.parse */
+static char __pyx_k_2[] = "Exception to signal the parser is stuck.";
+static PyObject *__pyx_int_0;
+static PyObject *__pyx_int_1;
+static char __pyx_k___init__[] = "__init__";
+static PyObject *__pyx_kp___init__;
+static char __pyx_k_setup[] = "setup";
+static PyObject *__pyx_kp_setup;
+static char __pyx_k_addtoken[] = "addtoken";
+static PyObject *__pyx_kp_addtoken;
+static char __pyx_k_1[] = "sphinx.pycode.nodes";
+static PyObject *__pyx_kp_1;
+static char __pyx_k_Node[] = "Node";
+static PyObject *__pyx_kp_Node;
+static char __pyx_k_Leaf[] = "Leaf";
+static PyObject *__pyx_kp_Leaf;
+static char __pyx_k_ParseError[] = "ParseError";
+static PyObject *__pyx_kp_ParseError;
+static char __pyx_k_Exception[] = "Exception";
+static PyObject *__pyx_kp_Exception;
+static char __pyx_k_msg[] = "msg";
+static PyObject *__pyx_kp_msg;
+static char __pyx_k_type[] = "type";
+static PyObject *__pyx_kp_type;
+static char __pyx_k_value[] = "value";
+static PyObject *__pyx_kp_value;
+static char __pyx_k_context[] = "context";
+static PyObject *__pyx_kp_context;
+static char __pyx_k_dfas[] = "dfas";
+static PyObject *__pyx_kp_dfas;
+static char __pyx_k_labels[] = "labels";
+static PyObject *__pyx_kp_labels;
+static char __pyx_k_keywords[] = "keywords";
+static PyObject *__pyx_kp_keywords;
+static char __pyx_k_tokens[] = "tokens";
+static PyObject *__pyx_kp_tokens;
+static char __pyx_k_4[] = "number2symbol";
+static PyObject *__pyx_kp_4;
+static char __pyx_k_start[] = "start";
+static PyObject *__pyx_kp_start;
+static char __pyx_k_add[] = "add";
+static PyObject *__pyx_kp_add;
+static char __pyx_k_get[] = "get";
+static PyObject *__pyx_kp_get;
+static char __pyx_k_append[] = "append";
+static PyObject *__pyx_kp_append;
+static char __pyx_k_pop[] = "pop";
+static PyObject *__pyx_kp_pop;
+static char __pyx_k_used_names[] = "used_names";
+static PyObject *__pyx_kp_used_names;
+static PyObject *__pyx_kp_2;
+static PyObject *__pyx_builtin_Exception;
+static PyObject *__pyx_kp_3;
+static char __pyx_k_3[] = "%s: type=%r, value=%r, context=%r";
+static PyObject *__pyx_kp_5;
+static PyObject *__pyx_kp_6;
+static char __pyx_k_5[] = "too much input";
+static char __pyx_k_6[] = "bad input";
+static PyObject *__pyx_kp_7;
+static char __pyx_k_7[] = "bad token";
+
+/* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":22
+ * """Exception to signal the parser is stuck."""
+ *
+ * def __init__(self, msg, type, value, context): # <<<<<<<<<<<<<<
+ * Exception.__init__(self, "%s: type=%r, value=%r, context=%r" %
+ * (msg, type, value, context))
+ */
+
+static PyObject *__pyx_pf_6sphinx_6pycode_5pgen2_5parse_10ParseError___init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_6sphinx_6pycode_5pgen2_5parse_10ParseError___init__ = {"__init__", (PyCFunction)__pyx_pf_6sphinx_6pycode_5pgen2_5parse_10ParseError___init__, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pf_6sphinx_6pycode_5pgen2_5parse_10ParseError___init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_self = 0;
+ PyObject *__pyx_v_msg = 0;
+ PyObject *__pyx_v_type = 0;
+ PyObject *__pyx_v_value = 0;
+ PyObject *__pyx_v_context = 0;
+ PyObject *__pyx_r;
+ PyObject *__pyx_1 = 0;
+ PyObject *__pyx_2 = 0;
+ PyObject *__pyx_3 = 0;
+ static char *__pyx_argnames[] = {"self","msg","type","value","context",0};
+ __pyx_self = __pyx_self;
+ if (likely(!__pyx_kwds) && likely(PyTuple_GET_SIZE(__pyx_args) == 5)) {
+ __pyx_v_self = PyTuple_GET_ITEM(__pyx_args, 0);
+ __pyx_v_msg = PyTuple_GET_ITEM(__pyx_args, 1);
+ __pyx_v_type = PyTuple_GET_ITEM(__pyx_args, 2);
+ __pyx_v_value = PyTuple_GET_ITEM(__pyx_args, 3);
+ __pyx_v_context = PyTuple_GET_ITEM(__pyx_args, 4);
+ }
+ else {
+ if (unlikely(!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OOOOO", __pyx_argnames, &__pyx_v_self, &__pyx_v_msg, &__pyx_v_type, &__pyx_v_value, &__pyx_v_context))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+ }
+ goto __pyx_L4;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("sphinx.pycode.pgen2.parse.ParseError.__init__");
+ return NULL;
+ __pyx_L4:;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":23
+ *
+ * def __init__(self, msg, type, value, context):
+ * Exception.__init__(self, "%s: type=%r, value=%r, context=%r" % # <<<<<<<<<<<<<<
+ * (msg, type, value, context))
+ * self.msg = msg
+ */
+ __pyx_1 = PyObject_GetAttr(__pyx_builtin_Exception, __pyx_kp___init__); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":24
+ * def __init__(self, msg, type, value, context):
+ * Exception.__init__(self, "%s: type=%r, value=%r, context=%r" %
+ * (msg, type, value, context)) # <<<<<<<<<<<<<<
+ * self.msg = msg
+ * self.type = type
+ */
+ __pyx_2 = PyTuple_New(4); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_v_msg);
+ PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_msg);
+ Py_INCREF(__pyx_v_type);
+ PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_type);
+ Py_INCREF(__pyx_v_value);
+ PyTuple_SET_ITEM(__pyx_2, 2, __pyx_v_value);
+ Py_INCREF(__pyx_v_context);
+ PyTuple_SET_ITEM(__pyx_2, 3, __pyx_v_context);
+ __pyx_3 = PyNumber_Remainder(__pyx_kp_3, ((PyObject *)__pyx_2)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+ __pyx_2 = PyTuple_New(2); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_v_self);
+ PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
+ PyTuple_SET_ITEM(__pyx_2, 1, __pyx_3);
+ __pyx_3 = 0;
+ __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+ Py_DECREF(__pyx_3); __pyx_3 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":25
+ * Exception.__init__(self, "%s: type=%r, value=%r, context=%r" %
+ * (msg, type, value, context))
+ * self.msg = msg # <<<<<<<<<<<<<<
+ * self.type = type
+ * self.value = value
+ */
+ if (PyObject_SetAttr(__pyx_v_self, __pyx_kp_msg, __pyx_v_msg) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":26
+ * (msg, type, value, context))
+ * self.msg = msg
+ * self.type = type # <<<<<<<<<<<<<<
+ * self.value = value
+ * self.context = context
+ */
+ if (PyObject_SetAttr(__pyx_v_self, __pyx_kp_type, __pyx_v_type) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":27
+ * self.msg = msg
+ * self.type = type
+ * self.value = value # <<<<<<<<<<<<<<
+ * self.context = context
+ *
+ */
+ if (PyObject_SetAttr(__pyx_v_self, __pyx_kp_value, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":28
+ * self.type = type
+ * self.value = value
+ * self.context = context # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ if (PyObject_SetAttr(__pyx_v_self, __pyx_kp_context, __pyx_v_context) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+ __pyx_r = Py_None; Py_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ Py_XDECREF(__pyx_1);
+ Py_XDECREF(__pyx_2);
+ Py_XDECREF(__pyx_3);
+ __Pyx_AddTraceback("sphinx.pycode.pgen2.parse.ParseError.__init__");
+ __pyx_r = NULL;
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":36
+ * cdef _grammar_number2symbol
+ *
+ * def __init__(self, grammar, convert=None): # <<<<<<<<<<<<<<
+ * self.grammar = grammar
+ * #self.convert = convert or noconvert
+ */
+
+static int __pyx_pf_6sphinx_6pycode_5pgen2_5parse_6Parser___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_6sphinx_6pycode_5pgen2_5parse_6Parser___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_grammar = 0;
+ PyObject *__pyx_v_convert = 0;
+ int __pyx_r;
+ PyObject *__pyx_1 = 0;
+ static char *__pyx_argnames[] = {"grammar","convert",0};
+ __pyx_v_convert = Py_None;
+ if (likely(!__pyx_kwds) && likely(1 <= PyTuple_GET_SIZE(__pyx_args)) && likely(PyTuple_GET_SIZE(__pyx_args) <= 2)) {
+ __pyx_v_grammar = PyTuple_GET_ITEM(__pyx_args, 0);
+ if (PyTuple_GET_SIZE(__pyx_args) > 1) {
+ __pyx_v_convert = PyTuple_GET_ITEM(__pyx_args, 1);
+ }
+ }
+ else {
+ if (unlikely(!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O|O", __pyx_argnames, &__pyx_v_grammar, &__pyx_v_convert))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+ }
+ goto __pyx_L4;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("sphinx.pycode.pgen2.parse.Parser.__init__");
+ return -1;
+ __pyx_L4:;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":37
+ *
+ * def __init__(self, grammar, convert=None):
+ * self.grammar = grammar # <<<<<<<<<<<<<<
+ * #self.convert = convert or noconvert
+ *
+ */
+ Py_INCREF(__pyx_v_grammar);
+ Py_DECREF(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->grammar);
+ ((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->grammar = __pyx_v_grammar;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":40
+ * #self.convert = convert or noconvert
+ *
+ * self._grammar_dfas = grammar.dfas # <<<<<<<<<<<<<<
+ * self._grammar_labels = grammar.labels
+ * self._grammar_keywords = grammar.keywords
+ */
+ __pyx_1 = PyObject_GetAttr(__pyx_v_grammar, __pyx_kp_dfas); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->_grammar_dfas);
+ ((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->_grammar_dfas = __pyx_1;
+ __pyx_1 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":41
+ *
+ * self._grammar_dfas = grammar.dfas
+ * self._grammar_labels = grammar.labels # <<<<<<<<<<<<<<
+ * self._grammar_keywords = grammar.keywords
+ * self._grammar_tokens = grammar.tokens
+ */
+ __pyx_1 = PyObject_GetAttr(__pyx_v_grammar, __pyx_kp_labels); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->_grammar_labels);
+ ((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->_grammar_labels = __pyx_1;
+ __pyx_1 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":42
+ * self._grammar_dfas = grammar.dfas
+ * self._grammar_labels = grammar.labels
+ * self._grammar_keywords = grammar.keywords # <<<<<<<<<<<<<<
+ * self._grammar_tokens = grammar.tokens
+ * self._grammar_number2symbol = grammar.number2symbol
+ */
+ __pyx_1 = PyObject_GetAttr(__pyx_v_grammar, __pyx_kp_keywords); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->_grammar_keywords);
+ ((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->_grammar_keywords = __pyx_1;
+ __pyx_1 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":43
+ * self._grammar_labels = grammar.labels
+ * self._grammar_keywords = grammar.keywords
+ * self._grammar_tokens = grammar.tokens # <<<<<<<<<<<<<<
+ * self._grammar_number2symbol = grammar.number2symbol
+ *
+ */
+ __pyx_1 = PyObject_GetAttr(__pyx_v_grammar, __pyx_kp_tokens); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->_grammar_tokens);
+ ((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->_grammar_tokens = __pyx_1;
+ __pyx_1 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":44
+ * self._grammar_keywords = grammar.keywords
+ * self._grammar_tokens = grammar.tokens
+ * self._grammar_number2symbol = grammar.number2symbol # <<<<<<<<<<<<<<
+ *
+ * def setup(self, start=None):
+ */
+ __pyx_1 = PyObject_GetAttr(__pyx_v_grammar, __pyx_kp_4); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->_grammar_number2symbol);
+ ((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->_grammar_number2symbol = __pyx_1;
+ __pyx_1 = 0;
+
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ Py_XDECREF(__pyx_1);
+ __Pyx_AddTraceback("sphinx.pycode.pgen2.parse.Parser.__init__");
+ __pyx_r = -1;
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":46
+ * self._grammar_number2symbol = grammar.number2symbol
+ *
+ * def setup(self, start=None): # <<<<<<<<<<<<<<
+ * if start is None:
+ * start = self.grammar.start
+ */
+
+static PyObject *__pyx_pf_6sphinx_6pycode_5pgen2_5parse_6Parser_setup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_6sphinx_6pycode_5pgen2_5parse_6Parser_setup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_start = 0;
+ PyObject *__pyx_v_newnode;
+ PyObject *__pyx_v_stackentry;
+ PyObject *__pyx_r;
+ int __pyx_1;
+ PyObject *__pyx_2 = 0;
+ PyObject *__pyx_3 = 0;
+ static char *__pyx_argnames[] = {"start",0};
+ __pyx_v_start = Py_None;
+ if (likely(!__pyx_kwds) && likely(0 <= PyTuple_GET_SIZE(__pyx_args)) && likely(PyTuple_GET_SIZE(__pyx_args) <= 1)) {
+ if (PyTuple_GET_SIZE(__pyx_args) > 0) {
+ __pyx_v_start = PyTuple_GET_ITEM(__pyx_args, 0);
+ }
+ }
+ else {
+ if (unlikely(!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "|O", __pyx_argnames, &__pyx_v_start))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+ }
+ goto __pyx_L4;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("sphinx.pycode.pgen2.parse.Parser.setup");
+ return NULL;
+ __pyx_L4:;
+ Py_INCREF(__pyx_v_start);
+ __pyx_v_newnode = Py_None; Py_INCREF(Py_None);
+ __pyx_v_stackentry = Py_None; Py_INCREF(Py_None);
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":47
+ *
+ * def setup(self, start=None):
+ * if start is None: # <<<<<<<<<<<<<<
+ * start = self.grammar.start
+ * # Each stack entry is a tuple: (dfa, state, node).
+ */
+ __pyx_1 = (__pyx_v_start == Py_None);
+ if (__pyx_1) {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":48
+ * def setup(self, start=None):
+ * if start is None:
+ * start = self.grammar.start # <<<<<<<<<<<<<<
+ * # Each stack entry is a tuple: (dfa, state, node).
+ * # A node is a tuple: (type, value, context, children),
+ */
+ __pyx_2 = PyObject_GetAttr(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->grammar, __pyx_kp_start); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_start);
+ __pyx_v_start = __pyx_2;
+ __pyx_2 = 0;
+ goto __pyx_L5;
+ }
+ __pyx_L5:;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":52
+ * # A node is a tuple: (type, value, context, children),
+ * # where children is a list of nodes or None, and context may be None.
+ * newnode = (start, None, None, []) # <<<<<<<<<<<<<<
+ * stackentry = (self._grammar_dfas[start], 0, newnode)
+ * self.stack = [stackentry]
+ */
+ __pyx_2 = PyList_New(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_3 = PyTuple_New(4); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_v_start);
+ PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_start);
+ Py_INCREF(Py_None);
+ PyTuple_SET_ITEM(__pyx_3, 1, Py_None);
+ Py_INCREF(Py_None);
+ PyTuple_SET_ITEM(__pyx_3, 2, Py_None);
+ PyTuple_SET_ITEM(__pyx_3, 3, ((PyObject *)__pyx_2));
+ __pyx_2 = 0;
+ Py_DECREF(__pyx_v_newnode);
+ __pyx_v_newnode = ((PyObject *)__pyx_3);
+ __pyx_3 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":53
+ * # where children is a list of nodes or None, and context may be None.
+ * newnode = (start, None, None, [])
+ * stackentry = (self._grammar_dfas[start], 0, newnode) # <<<<<<<<<<<<<<
+ * self.stack = [stackentry]
+ * self.rootnode = None
+ */
+ __pyx_2 = PyObject_GetItem(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->_grammar_dfas, __pyx_v_start); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_3 = PyTuple_New(3); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
+ Py_INCREF(__pyx_int_0);
+ PyTuple_SET_ITEM(__pyx_3, 1, __pyx_int_0);
+ Py_INCREF(__pyx_v_newnode);
+ PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_newnode);
+ __pyx_2 = 0;
+ Py_DECREF(__pyx_v_stackentry);
+ __pyx_v_stackentry = ((PyObject *)__pyx_3);
+ __pyx_3 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":54
+ * newnode = (start, None, None, [])
+ * stackentry = (self._grammar_dfas[start], 0, newnode)
+ * self.stack = [stackentry] # <<<<<<<<<<<<<<
+ * self.rootnode = None
+ * self.used_names = set() # Aliased to self.rootnode.used_names in pop()
+ */
+ __pyx_2 = PyList_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_v_stackentry);
+ PyList_SET_ITEM(__pyx_2, 0, __pyx_v_stackentry);
+ Py_DECREF(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->stack);
+ ((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->stack = ((PyObject *)__pyx_2);
+ __pyx_2 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":55
+ * stackentry = (self._grammar_dfas[start], 0, newnode)
+ * self.stack = [stackentry]
+ * self.rootnode = None # <<<<<<<<<<<<<<
+ * self.used_names = set() # Aliased to self.rootnode.used_names in pop()
+ *
+ */
+ Py_INCREF(Py_None);
+ Py_DECREF(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->rootnode);
+ ((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->rootnode = Py_None;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":56
+ * self.stack = [stackentry]
+ * self.rootnode = None
+ * self.used_names = set() # Aliased to self.rootnode.used_names in pop() # <<<<<<<<<<<<<<
+ *
+ * def addtoken(self, type, value, context):
+ */
+ __pyx_3 = PyObject_Call(((PyObject*)&PySet_Type), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->used_names);
+ ((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->used_names = __pyx_3;
+ __pyx_3 = 0;
+
+ __pyx_r = Py_None; Py_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ Py_XDECREF(__pyx_2);
+ Py_XDECREF(__pyx_3);
+ __Pyx_AddTraceback("sphinx.pycode.pgen2.parse.Parser.setup");
+ __pyx_r = NULL;
+ __pyx_L0:;
+ Py_DECREF(__pyx_v_newnode);
+ Py_DECREF(__pyx_v_stackentry);
+ Py_DECREF(__pyx_v_start);
+ return __pyx_r;
+}
+
+/* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":58
+ * self.used_names = set() # Aliased to self.rootnode.used_names in pop()
+ *
+ * def addtoken(self, type, value, context): # <<<<<<<<<<<<<<
+ * """Add a token; return True iff this is the end of the program."""
+ * cdef int ilabel, i, t, state, newstate
+ */
+
+static PyObject *__pyx_pf_6sphinx_6pycode_5pgen2_5parse_6Parser_addtoken(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_6sphinx_6pycode_5pgen2_5parse_6Parser_addtoken[] = "Add a token; return True iff this is the end of the program.";
+static PyObject *__pyx_pf_6sphinx_6pycode_5pgen2_5parse_6Parser_addtoken(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_type = 0;
+ PyObject *__pyx_v_value = 0;
+ PyObject *__pyx_v_context = 0;
+ int __pyx_v_ilabel;
+ int __pyx_v_i;
+ int __pyx_v_t;
+ int __pyx_v_state;
+ int __pyx_v_newstate;
+ PyObject *__pyx_v_dfa;
+ PyObject *__pyx_v_node;
+ PyObject *__pyx_v_states;
+ PyObject *__pyx_v_first;
+ PyObject *__pyx_v_arcs;
+ PyObject *__pyx_v_v;
+ PyObject *__pyx_v_itsdfa;
+ PyObject *__pyx_v_itsstates;
+ PyObject *__pyx_v_itsfirst;
+ PyObject *__pyx_r;
+ int __pyx_1;
+ PyObject *__pyx_2 = 0;
+ PyObject *__pyx_3 = 0;
+ PyObject *__pyx_4 = 0;
+ int __pyx_5;
+ Py_ssize_t __pyx_6 = 0;
+ PyObject *__pyx_7 = 0;
+ int __pyx_8;
+ static char *__pyx_argnames[] = {"type","value","context",0};
+ if (likely(!__pyx_kwds) && likely(PyTuple_GET_SIZE(__pyx_args) == 3)) {
+ __pyx_v_type = PyTuple_GET_ITEM(__pyx_args, 0);
+ __pyx_v_value = PyTuple_GET_ITEM(__pyx_args, 1);
+ __pyx_v_context = PyTuple_GET_ITEM(__pyx_args, 2);
+ }
+ else {
+ if (unlikely(!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OOO", __pyx_argnames, &__pyx_v_type, &__pyx_v_value, &__pyx_v_context))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+ }
+ goto __pyx_L4;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("sphinx.pycode.pgen2.parse.Parser.addtoken");
+ return NULL;
+ __pyx_L4:;
+ __pyx_v_dfa = Py_None; Py_INCREF(Py_None);
+ __pyx_v_node = Py_None; Py_INCREF(Py_None);
+ __pyx_v_states = Py_None; Py_INCREF(Py_None);
+ __pyx_v_first = Py_None; Py_INCREF(Py_None);
+ __pyx_v_arcs = Py_None; Py_INCREF(Py_None);
+ __pyx_v_v = Py_None; Py_INCREF(Py_None);
+ __pyx_v_itsdfa = Py_None; Py_INCREF(Py_None);
+ __pyx_v_itsstates = Py_None; Py_INCREF(Py_None);
+ __pyx_v_itsfirst = Py_None; Py_INCREF(Py_None);
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":62
+ * cdef int ilabel, i, t, state, newstate
+ * # Map from token to label
+ * ilabel = self.classify(type, value, context) # <<<<<<<<<<<<<<
+ * # Loop until the token is shifted; may raise exceptions
+ * while True:
+ */
+ __pyx_v_ilabel = ((struct __pyx_vtabstruct_6sphinx_6pycode_5pgen2_5parse_Parser *)((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->__pyx_vtab)->classify(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self), __pyx_v_type, __pyx_v_value, __pyx_v_context);
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":64
+ * ilabel = self.classify(type, value, context)
+ * # Loop until the token is shifted; may raise exceptions
+ * while True: # <<<<<<<<<<<<<<
+ * dfa, state, node = self.stack[-1]
+ * states, first = dfa
+ */
+ while (1) {
+ __pyx_1 = 1;
+ if (!__pyx_1) break;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":65
+ * # Loop until the token is shifted; may raise exceptions
+ * while True:
+ * dfa, state, node = self.stack[-1] # <<<<<<<<<<<<<<
+ * states, first = dfa
+ * arcs = states[state]
+ */
+ __pyx_2 = __Pyx_GetItemInt(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->stack, -1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ if (PyTuple_CheckExact(__pyx_2) && PyTuple_GET_SIZE(__pyx_2) == 3) {
+ PyObject* tuple = __pyx_2;
+ __pyx_4 = PyTuple_GET_ITEM(tuple, 0);
+ Py_INCREF(__pyx_4);
+ Py_DECREF(__pyx_v_dfa);
+ __pyx_v_dfa = __pyx_4;
+ __pyx_4 = 0;
+ __pyx_4 = PyTuple_GET_ITEM(tuple, 1);
+ Py_INCREF(__pyx_4);
+ __pyx_5 = __pyx_PyInt_int(__pyx_4); if (unlikely((__pyx_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_4); __pyx_4 = 0;
+ __pyx_v_state = __pyx_5;
+ __pyx_4 = PyTuple_GET_ITEM(tuple, 2);
+ Py_INCREF(__pyx_4);
+ Py_DECREF(__pyx_v_node);
+ __pyx_v_node = __pyx_4;
+ __pyx_4 = 0;
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ }
+ else {
+ __pyx_3 = PyObject_GetIter(__pyx_2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ __pyx_4 = __Pyx_UnpackItem(__pyx_3, 0); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_dfa);
+ __pyx_v_dfa = __pyx_4;
+ __pyx_4 = 0;
+ __pyx_4 = __Pyx_UnpackItem(__pyx_3, 1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_5 = __pyx_PyInt_int(__pyx_4); if (unlikely((__pyx_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_4); __pyx_4 = 0;
+ __pyx_v_state = __pyx_5;
+ __pyx_4 = __Pyx_UnpackItem(__pyx_3, 2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_node);
+ __pyx_v_node = __pyx_4;
+ __pyx_4 = 0;
+ if (__Pyx_EndUnpack(__pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_3); __pyx_3 = 0;
+ }
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":66
+ * while True:
+ * dfa, state, node = self.stack[-1]
+ * states, first = dfa # <<<<<<<<<<<<<<
+ * arcs = states[state]
+ * # Look for a state with this label
+ */
+ if (PyTuple_CheckExact(__pyx_v_dfa) && PyTuple_GET_SIZE(__pyx_v_dfa) == 2) {
+ PyObject* tuple = __pyx_v_dfa;
+ __pyx_2 = PyTuple_GET_ITEM(tuple, 0);
+ Py_INCREF(__pyx_2);
+ Py_DECREF(__pyx_v_states);
+ __pyx_v_states = __pyx_2;
+ __pyx_2 = 0;
+ __pyx_3 = PyTuple_GET_ITEM(tuple, 1);
+ Py_INCREF(__pyx_3);
+ Py_DECREF(__pyx_v_first);
+ __pyx_v_first = __pyx_3;
+ __pyx_3 = 0;
+ }
+ else {
+ __pyx_4 = PyObject_GetIter(__pyx_v_dfa); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_2 = __Pyx_UnpackItem(__pyx_4, 0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_states);
+ __pyx_v_states = __pyx_2;
+ __pyx_2 = 0;
+ __pyx_3 = __Pyx_UnpackItem(__pyx_4, 1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_first);
+ __pyx_v_first = __pyx_3;
+ __pyx_3 = 0;
+ if (__Pyx_EndUnpack(__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_4); __pyx_4 = 0;
+ }
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":67
+ * dfa, state, node = self.stack[-1]
+ * states, first = dfa
+ * arcs = states[state] # <<<<<<<<<<<<<<
+ * # Look for a state with this label
+ * for i, newstate in arcs:
+ */
+ __pyx_2 = __Pyx_GetItemInt(__pyx_v_states, __pyx_v_state, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_arcs);
+ __pyx_v_arcs = __pyx_2;
+ __pyx_2 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":69
+ * arcs = states[state]
+ * # Look for a state with this label
+ * for i, newstate in arcs: # <<<<<<<<<<<<<<
+ * t, v = self._grammar_labels[i]
+ * if ilabel == i:
+ */
+ if (PyList_CheckExact(__pyx_v_arcs) || PyTuple_CheckExact(__pyx_v_arcs)) {
+ __pyx_6 = 0; __pyx_3 = __pyx_v_arcs; Py_INCREF(__pyx_3);
+ } else {
+ __pyx_6 = -1; __pyx_3 = PyObject_GetIter(__pyx_v_arcs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ }
+ for (;;) {
+ if (likely(PyList_CheckExact(__pyx_3))) {
+ if (__pyx_6 >= PyList_GET_SIZE(__pyx_3)) break;
+ __pyx_4 = PyList_GET_ITEM(__pyx_3, __pyx_6); Py_INCREF(__pyx_4); __pyx_6++;
+ } else if (likely(PyTuple_CheckExact(__pyx_3))) {
+ if (__pyx_6 >= PyTuple_GET_SIZE(__pyx_3)) break;
+ __pyx_4 = PyTuple_GET_ITEM(__pyx_3, __pyx_6); Py_INCREF(__pyx_4); __pyx_6++;
+ } else {
+ __pyx_4 = PyIter_Next(__pyx_3);
+ if (!__pyx_4) {
+ if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ break;
+ }
+ }
+ if (PyTuple_CheckExact(__pyx_4) && PyTuple_GET_SIZE(__pyx_4) == 2) {
+ PyObject* tuple = __pyx_4;
+ __pyx_7 = PyTuple_GET_ITEM(tuple, 0);
+ Py_INCREF(__pyx_7);
+ __pyx_5 = __pyx_PyInt_int(__pyx_7); if (unlikely((__pyx_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_7); __pyx_7 = 0;
+ __pyx_v_i = __pyx_5;
+ __pyx_7 = PyTuple_GET_ITEM(tuple, 1);
+ Py_INCREF(__pyx_7);
+ __pyx_5 = __pyx_PyInt_int(__pyx_7); if (unlikely((__pyx_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_7); __pyx_7 = 0;
+ __pyx_v_newstate = __pyx_5;
+ Py_DECREF(__pyx_4); __pyx_4 = 0;
+ }
+ else {
+ __pyx_2 = PyObject_GetIter(__pyx_4); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_4); __pyx_4 = 0;
+ __pyx_7 = __Pyx_UnpackItem(__pyx_2, 0); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_5 = __pyx_PyInt_int(__pyx_7); if (unlikely((__pyx_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_7); __pyx_7 = 0;
+ __pyx_v_i = __pyx_5;
+ __pyx_7 = __Pyx_UnpackItem(__pyx_2, 1); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_5 = __pyx_PyInt_int(__pyx_7); if (unlikely((__pyx_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_7); __pyx_7 = 0;
+ __pyx_v_newstate = __pyx_5;
+ if (__Pyx_EndUnpack(__pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ }
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":70
+ * # Look for a state with this label
+ * for i, newstate in arcs:
+ * t, v = self._grammar_labels[i] # <<<<<<<<<<<<<<
+ * if ilabel == i:
+ * # Look it up in the list of labels
+ */
+ __pyx_7 = __Pyx_GetItemInt(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->_grammar_labels, __pyx_v_i, 0); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ if (PyTuple_CheckExact(__pyx_7) && PyTuple_GET_SIZE(__pyx_7) == 2) {
+ PyObject* tuple = __pyx_7;
+ __pyx_2 = PyTuple_GET_ITEM(tuple, 0);
+ Py_INCREF(__pyx_2);
+ __pyx_5 = __pyx_PyInt_int(__pyx_2); if (unlikely((__pyx_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ __pyx_v_t = __pyx_5;
+ __pyx_2 = PyTuple_GET_ITEM(tuple, 1);
+ Py_INCREF(__pyx_2);
+ Py_DECREF(__pyx_v_v);
+ __pyx_v_v = __pyx_2;
+ __pyx_2 = 0;
+ Py_DECREF(__pyx_7); __pyx_7 = 0;
+ }
+ else {
+ __pyx_4 = PyObject_GetIter(__pyx_7); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_7); __pyx_7 = 0;
+ __pyx_2 = __Pyx_UnpackItem(__pyx_4, 0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_5 = __pyx_PyInt_int(__pyx_2); if (unlikely((__pyx_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ __pyx_v_t = __pyx_5;
+ __pyx_2 = __Pyx_UnpackItem(__pyx_4, 1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_v);
+ __pyx_v_v = __pyx_2;
+ __pyx_2 = 0;
+ if (__Pyx_EndUnpack(__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_4); __pyx_4 = 0;
+ }
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":71
+ * for i, newstate in arcs:
+ * t, v = self._grammar_labels[i]
+ * if ilabel == i: # <<<<<<<<<<<<<<
+ * # Look it up in the list of labels
+ * ## assert t < 256
+ */
+ __pyx_1 = (__pyx_v_ilabel == __pyx_v_i);
+ if (__pyx_1) {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":75
+ * ## assert t < 256
+ * # Shift a token; we're done with it
+ * self.shift(type, value, newstate, context) # <<<<<<<<<<<<<<
+ * # Pop while we are in an accept-only state
+ * state = newstate
+ */
+ __pyx_2 = PyInt_FromLong(__pyx_v_newstate); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ ((struct __pyx_vtabstruct_6sphinx_6pycode_5pgen2_5parse_Parser *)((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->__pyx_vtab)->shift(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self), __pyx_v_type, __pyx_v_value, __pyx_2, __pyx_v_context);
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":77
+ * self.shift(type, value, newstate, context)
+ * # Pop while we are in an accept-only state
+ * state = newstate # <<<<<<<<<<<<<<
+ * while states[state] == [(0, state)]:
+ * self.pop()
+ */
+ __pyx_v_state = __pyx_v_newstate;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":78
+ * # Pop while we are in an accept-only state
+ * state = newstate
+ * while states[state] == [(0, state)]: # <<<<<<<<<<<<<<
+ * self.pop()
+ * if not self.stack:
+ */
+ while (1) {
+ __pyx_7 = __Pyx_GetItemInt(__pyx_v_states, __pyx_v_state, 0); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_4 = PyInt_FromLong(__pyx_v_state); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_2 = PyTuple_New(2); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_int_0);
+ PyTuple_SET_ITEM(__pyx_2, 0, __pyx_int_0);
+ PyTuple_SET_ITEM(__pyx_2, 1, __pyx_4);
+ __pyx_4 = 0;
+ __pyx_4 = PyList_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ PyList_SET_ITEM(__pyx_4, 0, ((PyObject *)__pyx_2));
+ __pyx_2 = 0;
+ __pyx_2 = PyObject_RichCompare(__pyx_7, ((PyObject *)__pyx_4), Py_EQ); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_7); __pyx_7 = 0;
+ Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+ __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ if (!__pyx_1) break;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":79
+ * state = newstate
+ * while states[state] == [(0, state)]:
+ * self.pop() # <<<<<<<<<<<<<<
+ * if not self.stack:
+ * # Done parsing!
+ */
+ ((struct __pyx_vtabstruct_6sphinx_6pycode_5pgen2_5parse_Parser *)((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->__pyx_vtab)->pop(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self));
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":80
+ * while states[state] == [(0, state)]:
+ * self.pop()
+ * if not self.stack: # <<<<<<<<<<<<<<
+ * # Done parsing!
+ * return True
+ */
+ __pyx_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->stack); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_8 = (!__pyx_1);
+ if (__pyx_8) {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":82
+ * if not self.stack:
+ * # Done parsing!
+ * return True # <<<<<<<<<<<<<<
+ * dfa, state, node = self.stack[-1]
+ * states, first = dfa
+ */
+ __pyx_7 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_r = __pyx_7;
+ __pyx_7 = 0;
+ Py_DECREF(__pyx_3); __pyx_3 = 0;
+ goto __pyx_L0;
+ goto __pyx_L12;
+ }
+ __pyx_L12:;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":83
+ * # Done parsing!
+ * return True
+ * dfa, state, node = self.stack[-1] # <<<<<<<<<<<<<<
+ * states, first = dfa
+ * # Done with this token
+ */
+ __pyx_4 = __Pyx_GetItemInt(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->stack, -1, 0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ if (PyTuple_CheckExact(__pyx_4) && PyTuple_GET_SIZE(__pyx_4) == 3) {
+ PyObject* tuple = __pyx_4;
+ __pyx_7 = PyTuple_GET_ITEM(tuple, 0);
+ Py_INCREF(__pyx_7);
+ Py_DECREF(__pyx_v_dfa);
+ __pyx_v_dfa = __pyx_7;
+ __pyx_7 = 0;
+ __pyx_7 = PyTuple_GET_ITEM(tuple, 1);
+ Py_INCREF(__pyx_7);
+ __pyx_5 = __pyx_PyInt_int(__pyx_7); if (unlikely((__pyx_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_7); __pyx_7 = 0;
+ __pyx_v_state = __pyx_5;
+ __pyx_7 = PyTuple_GET_ITEM(tuple, 2);
+ Py_INCREF(__pyx_7);
+ Py_DECREF(__pyx_v_node);
+ __pyx_v_node = __pyx_7;
+ __pyx_7 = 0;
+ Py_DECREF(__pyx_4); __pyx_4 = 0;
+ }
+ else {
+ __pyx_2 = PyObject_GetIter(__pyx_4); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_4); __pyx_4 = 0;
+ __pyx_7 = __Pyx_UnpackItem(__pyx_2, 0); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_dfa);
+ __pyx_v_dfa = __pyx_7;
+ __pyx_7 = 0;
+ __pyx_7 = __Pyx_UnpackItem(__pyx_2, 1); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_5 = __pyx_PyInt_int(__pyx_7); if (unlikely((__pyx_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_7); __pyx_7 = 0;
+ __pyx_v_state = __pyx_5;
+ __pyx_7 = __Pyx_UnpackItem(__pyx_2, 2); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_node);
+ __pyx_v_node = __pyx_7;
+ __pyx_7 = 0;
+ if (__Pyx_EndUnpack(__pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ }
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":84
+ * return True
+ * dfa, state, node = self.stack[-1]
+ * states, first = dfa # <<<<<<<<<<<<<<
+ * # Done with this token
+ * return False
+ */
+ if (PyTuple_CheckExact(__pyx_v_dfa) && PyTuple_GET_SIZE(__pyx_v_dfa) == 2) {
+ PyObject* tuple = __pyx_v_dfa;
+ __pyx_4 = PyTuple_GET_ITEM(tuple, 0);
+ Py_INCREF(__pyx_4);
+ Py_DECREF(__pyx_v_states);
+ __pyx_v_states = __pyx_4;
+ __pyx_4 = 0;
+ __pyx_2 = PyTuple_GET_ITEM(tuple, 1);
+ Py_INCREF(__pyx_2);
+ Py_DECREF(__pyx_v_first);
+ __pyx_v_first = __pyx_2;
+ __pyx_2 = 0;
+ }
+ else {
+ __pyx_7 = PyObject_GetIter(__pyx_v_dfa); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_4 = __Pyx_UnpackItem(__pyx_7, 0); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_states);
+ __pyx_v_states = __pyx_4;
+ __pyx_4 = 0;
+ __pyx_2 = __Pyx_UnpackItem(__pyx_7, 1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_first);
+ __pyx_v_first = __pyx_2;
+ __pyx_2 = 0;
+ if (__Pyx_EndUnpack(__pyx_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_7); __pyx_7 = 0;
+ }
+ }
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":86
+ * states, first = dfa
+ * # Done with this token
+ * return False # <<<<<<<<<<<<<<
+ * elif t >= 256:
+ * # See if it's a symbol and if we're in its first set
+ */
+ __pyx_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_r = __pyx_4;
+ __pyx_4 = 0;
+ Py_DECREF(__pyx_3); __pyx_3 = 0;
+ goto __pyx_L0;
+ goto __pyx_L9;
+ }
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":87
+ * # Done with this token
+ * return False
+ * elif t >= 256: # <<<<<<<<<<<<<<
+ * # See if it's a symbol and if we're in its first set
+ * itsdfa = self._grammar_dfas[t]
+ */
+ __pyx_1 = (__pyx_v_t >= 256);
+ if (__pyx_1) {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":89
+ * elif t >= 256:
+ * # See if it's a symbol and if we're in its first set
+ * itsdfa = self._grammar_dfas[t] # <<<<<<<<<<<<<<
+ * itsstates, itsfirst = itsdfa
+ * if ilabel in itsfirst:
+ */
+ __pyx_2 = __Pyx_GetItemInt(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->_grammar_dfas, __pyx_v_t, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_itsdfa);
+ __pyx_v_itsdfa = __pyx_2;
+ __pyx_2 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":90
+ * # See if it's a symbol and if we're in its first set
+ * itsdfa = self._grammar_dfas[t]
+ * itsstates, itsfirst = itsdfa # <<<<<<<<<<<<<<
+ * if ilabel in itsfirst:
+ * # Push a symbol
+ */
+ if (PyTuple_CheckExact(__pyx_v_itsdfa) && PyTuple_GET_SIZE(__pyx_v_itsdfa) == 2) {
+ PyObject* tuple = __pyx_v_itsdfa;
+ __pyx_4 = PyTuple_GET_ITEM(tuple, 0);
+ Py_INCREF(__pyx_4);
+ Py_DECREF(__pyx_v_itsstates);
+ __pyx_v_itsstates = __pyx_4;
+ __pyx_4 = 0;
+ __pyx_2 = PyTuple_GET_ITEM(tuple, 1);
+ Py_INCREF(__pyx_2);
+ Py_DECREF(__pyx_v_itsfirst);
+ __pyx_v_itsfirst = __pyx_2;
+ __pyx_2 = 0;
+ }
+ else {
+ __pyx_7 = PyObject_GetIter(__pyx_v_itsdfa); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_4 = __Pyx_UnpackItem(__pyx_7, 0); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_itsstates);
+ __pyx_v_itsstates = __pyx_4;
+ __pyx_4 = 0;
+ __pyx_2 = __Pyx_UnpackItem(__pyx_7, 1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_itsfirst);
+ __pyx_v_itsfirst = __pyx_2;
+ __pyx_2 = 0;
+ if (__Pyx_EndUnpack(__pyx_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_7); __pyx_7 = 0;
+ }
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":91
+ * itsdfa = self._grammar_dfas[t]
+ * itsstates, itsfirst = itsdfa
+ * if ilabel in itsfirst: # <<<<<<<<<<<<<<
+ * # Push a symbol
+ * self.push(t, itsdfa, newstate, context)
+ */
+ __pyx_4 = PyInt_FromLong(__pyx_v_ilabel); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_8 = (PySequence_Contains(__pyx_v_itsfirst, __pyx_4)); if (unlikely(__pyx_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_4); __pyx_4 = 0;
+ if (__pyx_8) {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":93
+ * if ilabel in itsfirst:
+ * # Push a symbol
+ * self.push(t, itsdfa, newstate, context) # <<<<<<<<<<<<<<
+ * break # To continue the outer while loop
+ * else:
+ */
+ __pyx_2 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_7 = PyInt_FromLong(__pyx_v_newstate); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ ((struct __pyx_vtabstruct_6sphinx_6pycode_5pgen2_5parse_Parser *)((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->__pyx_vtab)->push(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self), __pyx_2, __pyx_v_itsdfa, __pyx_7, __pyx_v_context);
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ Py_DECREF(__pyx_7); __pyx_7 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":94
+ * # Push a symbol
+ * self.push(t, itsdfa, newstate, context)
+ * break # To continue the outer while loop # <<<<<<<<<<<<<<
+ * else:
+ * if (0, state) in arcs:
+ */
+ goto __pyx_L8;
+ goto __pyx_L13;
+ }
+ __pyx_L13:;
+ goto __pyx_L9;
+ }
+ __pyx_L9:;
+ }
+ /*else*/ {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":96
+ * break # To continue the outer while loop
+ * else:
+ * if (0, state) in arcs: # <<<<<<<<<<<<<<
+ * # An accepting state, pop it and try something else
+ * self.pop()
+ */
+ __pyx_4 = PyInt_FromLong(__pyx_v_state); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_2 = PyTuple_New(2); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_int_0);
+ PyTuple_SET_ITEM(__pyx_2, 0, __pyx_int_0);
+ PyTuple_SET_ITEM(__pyx_2, 1, __pyx_4);
+ __pyx_4 = 0;
+ __pyx_1 = (PySequence_Contains(__pyx_v_arcs, ((PyObject *)__pyx_2))); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+ if (__pyx_1) {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":98
+ * if (0, state) in arcs:
+ * # An accepting state, pop it and try something else
+ * self.pop() # <<<<<<<<<<<<<<
+ * if not self.stack:
+ * # Done parsing, but another token is input
+ */
+ ((struct __pyx_vtabstruct_6sphinx_6pycode_5pgen2_5parse_Parser *)((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->__pyx_vtab)->pop(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self));
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":99
+ * # An accepting state, pop it and try something else
+ * self.pop()
+ * if not self.stack: # <<<<<<<<<<<<<<
+ * # Done parsing, but another token is input
+ * raise ParseError("too much input",
+ */
+ __pyx_8 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self)->stack); if (unlikely(__pyx_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_1 = (!__pyx_8);
+ if (__pyx_1) {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":101
+ * if not self.stack:
+ * # Done parsing, but another token is input
+ * raise ParseError("too much input", # <<<<<<<<<<<<<<
+ * type, value, context)
+ * else:
+ */
+ __pyx_7 = __Pyx_GetName(__pyx_m, __pyx_kp_ParseError); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":102
+ * # Done parsing, but another token is input
+ * raise ParseError("too much input",
+ * type, value, context) # <<<<<<<<<<<<<<
+ * else:
+ * # No success finding a transition
+ */
+ __pyx_4 = PyTuple_New(4); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_kp_5);
+ PyTuple_SET_ITEM(__pyx_4, 0, __pyx_kp_5);
+ Py_INCREF(__pyx_v_type);
+ PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_type);
+ Py_INCREF(__pyx_v_value);
+ PyTuple_SET_ITEM(__pyx_4, 2, __pyx_v_value);
+ Py_INCREF(__pyx_v_context);
+ PyTuple_SET_ITEM(__pyx_4, 3, __pyx_v_context);
+ __pyx_2 = PyObject_Call(__pyx_7, ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_7); __pyx_7 = 0;
+ Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+ __Pyx_Raise(__pyx_2, 0, 0);
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ goto __pyx_L15;
+ }
+ __pyx_L15:;
+ goto __pyx_L14;
+ }
+ /*else*/ {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":105
+ * else:
+ * # No success finding a transition
+ * raise ParseError("bad input", type, value, context) # <<<<<<<<<<<<<<
+ *
+ * cdef int classify(self, type, value, context):
+ */
+ __pyx_7 = __Pyx_GetName(__pyx_m, __pyx_kp_ParseError); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_4 = PyTuple_New(4); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_kp_6);
+ PyTuple_SET_ITEM(__pyx_4, 0, __pyx_kp_6);
+ Py_INCREF(__pyx_v_type);
+ PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_type);
+ Py_INCREF(__pyx_v_value);
+ PyTuple_SET_ITEM(__pyx_4, 2, __pyx_v_value);
+ Py_INCREF(__pyx_v_context);
+ PyTuple_SET_ITEM(__pyx_4, 3, __pyx_v_context);
+ __pyx_2 = PyObject_Call(__pyx_7, ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_7); __pyx_7 = 0;
+ Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+ __Pyx_Raise(__pyx_2, 0, 0);
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ }
+ __pyx_L14:;
+ }
+ __pyx_L8:;
+ Py_DECREF(__pyx_3); __pyx_3 = 0;
+ }
+
+ __pyx_r = Py_None; Py_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ Py_XDECREF(__pyx_2);
+ Py_XDECREF(__pyx_3);
+ Py_XDECREF(__pyx_4);
+ Py_XDECREF(__pyx_7);
+ __Pyx_AddTraceback("sphinx.pycode.pgen2.parse.Parser.addtoken");
+ __pyx_r = NULL;
+ __pyx_L0:;
+ Py_DECREF(__pyx_v_dfa);
+ Py_DECREF(__pyx_v_node);
+ Py_DECREF(__pyx_v_states);
+ Py_DECREF(__pyx_v_first);
+ Py_DECREF(__pyx_v_arcs);
+ Py_DECREF(__pyx_v_v);
+ Py_DECREF(__pyx_v_itsdfa);
+ Py_DECREF(__pyx_v_itsstates);
+ Py_DECREF(__pyx_v_itsfirst);
+ return __pyx_r;
+}
+
+/* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":107
+ * raise ParseError("bad input", type, value, context)
+ *
+ * cdef int classify(self, type, value, context): # <<<<<<<<<<<<<<
+ * """Turn a token into a label. (Internal)"""
+ * if type == NAME:
+ */
+
+static int __pyx_f_6sphinx_6pycode_5pgen2_5parse_6Parser_classify(struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *__pyx_v_self, PyObject *__pyx_v_type, PyObject *__pyx_v_value, PyObject *__pyx_v_context) {
+ PyObject *__pyx_v_ilabel;
+ int __pyx_r;
+ PyObject *__pyx_1 = 0;
+ int __pyx_2;
+ PyObject *__pyx_3 = 0;
+ PyObject *__pyx_4 = 0;
+ int __pyx_5;
+ __pyx_v_ilabel = Py_None; Py_INCREF(Py_None);
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":109
+ * cdef int classify(self, type, value, context):
+ * """Turn a token into a label. (Internal)"""
+ * if type == NAME: # <<<<<<<<<<<<<<
+ * # Keep a listing of all used names
+ * self.used_names.add(value)
+ */
+ __pyx_1 = PyObject_RichCompare(__pyx_v_type, __pyx_int_1, Py_EQ); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_2 = __Pyx_PyObject_IsTrue(__pyx_1); if (unlikely(__pyx_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ if (__pyx_2) {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":111
+ * if type == NAME:
+ * # Keep a listing of all used names
+ * self.used_names.add(value) # <<<<<<<<<<<<<<
+ * # Check for reserved words
+ * ilabel = self._grammar_keywords.get(value)
+ */
+ __pyx_1 = PyObject_GetAttr(__pyx_v_self->used_names, __pyx_kp_add); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_v_value);
+ PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_value);
+ __pyx_4 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+ Py_DECREF(__pyx_4); __pyx_4 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":113
+ * self.used_names.add(value)
+ * # Check for reserved words
+ * ilabel = self._grammar_keywords.get(value) # <<<<<<<<<<<<<<
+ * if ilabel is not None:
+ * return ilabel
+ */
+ __pyx_1 = PyObject_GetAttr(__pyx_v_self->_grammar_keywords, __pyx_kp_get); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_v_value);
+ PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_value);
+ __pyx_4 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+ Py_DECREF(__pyx_v_ilabel);
+ __pyx_v_ilabel = __pyx_4;
+ __pyx_4 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":114
+ * # Check for reserved words
+ * ilabel = self._grammar_keywords.get(value)
+ * if ilabel is not None: # <<<<<<<<<<<<<<
+ * return ilabel
+ * ilabel = self._grammar_tokens.get(type)
+ */
+ __pyx_2 = (__pyx_v_ilabel != Py_None);
+ if (__pyx_2) {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":115
+ * ilabel = self._grammar_keywords.get(value)
+ * if ilabel is not None:
+ * return ilabel # <<<<<<<<<<<<<<
+ * ilabel = self._grammar_tokens.get(type)
+ * if ilabel is None:
+ */
+ __pyx_5 = __pyx_PyInt_int(__pyx_v_ilabel); if (unlikely((__pyx_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_r = __pyx_5;
+ goto __pyx_L0;
+ goto __pyx_L4;
+ }
+ __pyx_L4:;
+ goto __pyx_L3;
+ }
+ __pyx_L3:;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":116
+ * if ilabel is not None:
+ * return ilabel
+ * ilabel = self._grammar_tokens.get(type) # <<<<<<<<<<<<<<
+ * if ilabel is None:
+ * raise ParseError("bad token", type, value, context)
+ */
+ __pyx_1 = PyObject_GetAttr(__pyx_v_self->_grammar_tokens, __pyx_kp_get); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_v_type);
+ PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_type);
+ __pyx_4 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+ Py_DECREF(__pyx_v_ilabel);
+ __pyx_v_ilabel = __pyx_4;
+ __pyx_4 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":117
+ * return ilabel
+ * ilabel = self._grammar_tokens.get(type)
+ * if ilabel is None: # <<<<<<<<<<<<<<
+ * raise ParseError("bad token", type, value, context)
+ * return ilabel
+ */
+ __pyx_2 = (__pyx_v_ilabel == Py_None);
+ if (__pyx_2) {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":118
+ * ilabel = self._grammar_tokens.get(type)
+ * if ilabel is None:
+ * raise ParseError("bad token", type, value, context) # <<<<<<<<<<<<<<
+ * return ilabel
+ *
+ */
+ __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_ParseError); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_3 = PyTuple_New(4); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_kp_7);
+ PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_7);
+ Py_INCREF(__pyx_v_type);
+ PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_type);
+ Py_INCREF(__pyx_v_value);
+ PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_value);
+ Py_INCREF(__pyx_v_context);
+ PyTuple_SET_ITEM(__pyx_3, 3, __pyx_v_context);
+ __pyx_4 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+ __Pyx_Raise(__pyx_4, 0, 0);
+ Py_DECREF(__pyx_4); __pyx_4 = 0;
+ {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ goto __pyx_L5;
+ }
+ __pyx_L5:;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":119
+ * if ilabel is None:
+ * raise ParseError("bad token", type, value, context)
+ * return ilabel # <<<<<<<<<<<<<<
+ *
+ * cdef void shift(self, type, value, newstate, context):
+ */
+ __pyx_5 = __pyx_PyInt_int(__pyx_v_ilabel); if (unlikely((__pyx_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_r = __pyx_5;
+ goto __pyx_L0;
+
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ Py_XDECREF(__pyx_1);
+ Py_XDECREF(__pyx_3);
+ Py_XDECREF(__pyx_4);
+ __Pyx_WriteUnraisable("sphinx.pycode.pgen2.parse.Parser.classify");
+ __pyx_r = 0;
+ __pyx_L0:;
+ Py_DECREF(__pyx_v_ilabel);
+ return __pyx_r;
+}
+
+/* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":121
+ * return ilabel
+ *
+ * cdef void shift(self, type, value, newstate, context): # <<<<<<<<<<<<<<
+ * """Shift a token. (Internal)"""
+ * dfa, state, node = self.stack[-1]
+ */
+
+static void __pyx_f_6sphinx_6pycode_5pgen2_5parse_6Parser_shift(struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *__pyx_v_self, PyObject *__pyx_v_type, PyObject *__pyx_v_value, PyObject *__pyx_v_newstate, PyObject *__pyx_v_context) {
+ PyObject *__pyx_v_dfa;
+ PyObject *__pyx_v_state;
+ PyObject *__pyx_v_node;
+ PyObject *__pyx_v_newnode;
+ PyObject *__pyx_1 = 0;
+ PyObject *__pyx_2 = 0;
+ PyObject *__pyx_3 = 0;
+ int __pyx_4;
+ __pyx_v_dfa = Py_None; Py_INCREF(Py_None);
+ __pyx_v_state = Py_None; Py_INCREF(Py_None);
+ __pyx_v_node = Py_None; Py_INCREF(Py_None);
+ __pyx_v_newnode = Py_None; Py_INCREF(Py_None);
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":123
+ * cdef void shift(self, type, value, newstate, context):
+ * """Shift a token. (Internal)"""
+ * dfa, state, node = self.stack[-1] # <<<<<<<<<<<<<<
+ * newnode = (type, value, context, None)
+ * newnode = self.convert(newnode)
+ */
+ __pyx_1 = __Pyx_GetItemInt(__pyx_v_self->stack, -1, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ if (PyTuple_CheckExact(__pyx_1) && PyTuple_GET_SIZE(__pyx_1) == 3) {
+ PyObject* tuple = __pyx_1;
+ __pyx_3 = PyTuple_GET_ITEM(tuple, 0);
+ Py_INCREF(__pyx_3);
+ Py_DECREF(__pyx_v_dfa);
+ __pyx_v_dfa = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = PyTuple_GET_ITEM(tuple, 1);
+ Py_INCREF(__pyx_3);
+ Py_DECREF(__pyx_v_state);
+ __pyx_v_state = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = PyTuple_GET_ITEM(tuple, 2);
+ Py_INCREF(__pyx_3);
+ Py_DECREF(__pyx_v_node);
+ __pyx_v_node = __pyx_3;
+ __pyx_3 = 0;
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ }
+ else {
+ __pyx_2 = PyObject_GetIter(__pyx_1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ __pyx_3 = __Pyx_UnpackItem(__pyx_2, 0); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_dfa);
+ __pyx_v_dfa = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = __Pyx_UnpackItem(__pyx_2, 1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_state);
+ __pyx_v_state = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = __Pyx_UnpackItem(__pyx_2, 2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_node);
+ __pyx_v_node = __pyx_3;
+ __pyx_3 = 0;
+ if (__Pyx_EndUnpack(__pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ }
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":124
+ * """Shift a token. (Internal)"""
+ * dfa, state, node = self.stack[-1]
+ * newnode = (type, value, context, None) # <<<<<<<<<<<<<<
+ * newnode = self.convert(newnode)
+ * if newnode is not None:
+ */
+ __pyx_3 = PyTuple_New(4); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_v_type);
+ PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_type);
+ Py_INCREF(__pyx_v_value);
+ PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_value);
+ Py_INCREF(__pyx_v_context);
+ PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_context);
+ Py_INCREF(Py_None);
+ PyTuple_SET_ITEM(__pyx_3, 3, Py_None);
+ Py_DECREF(__pyx_v_newnode);
+ __pyx_v_newnode = ((PyObject *)__pyx_3);
+ __pyx_3 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":125
+ * dfa, state, node = self.stack[-1]
+ * newnode = (type, value, context, None)
+ * newnode = self.convert(newnode) # <<<<<<<<<<<<<<
+ * if newnode is not None:
+ * node[-1].append(newnode)
+ */
+ __pyx_1 = ((struct __pyx_vtabstruct_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self->__pyx_vtab)->convert(__pyx_v_self, __pyx_v_newnode); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_newnode);
+ __pyx_v_newnode = __pyx_1;
+ __pyx_1 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":126
+ * newnode = (type, value, context, None)
+ * newnode = self.convert(newnode)
+ * if newnode is not None: # <<<<<<<<<<<<<<
+ * node[-1].append(newnode)
+ * self.stack[-1] = (dfa, newstate, node)
+ */
+ __pyx_4 = (__pyx_v_newnode != Py_None);
+ if (__pyx_4) {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":127
+ * newnode = self.convert(newnode)
+ * if newnode is not None:
+ * node[-1].append(newnode) # <<<<<<<<<<<<<<
+ * self.stack[-1] = (dfa, newstate, node)
+ *
+ */
+ __pyx_2 = __Pyx_GetItemInt(__pyx_v_node, -1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_3 = __Pyx_PyObject_Append(__pyx_2, __pyx_v_newnode); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ Py_DECREF(__pyx_3); __pyx_3 = 0;
+ goto __pyx_L3;
+ }
+ __pyx_L3:;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":128
+ * if newnode is not None:
+ * node[-1].append(newnode)
+ * self.stack[-1] = (dfa, newstate, node) # <<<<<<<<<<<<<<
+ *
+ * cdef void push(self, type, newdfa, newstate, context):
+ */
+ __pyx_1 = PyTuple_New(3); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_v_dfa);
+ PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_dfa);
+ Py_INCREF(__pyx_v_newstate);
+ PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_newstate);
+ Py_INCREF(__pyx_v_node);
+ PyTuple_SET_ITEM(__pyx_1, 2, __pyx_v_node);
+ if (__Pyx_SetItemInt(__pyx_v_self->stack, -1, ((PyObject *)__pyx_1), 0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ Py_XDECREF(__pyx_1);
+ Py_XDECREF(__pyx_2);
+ Py_XDECREF(__pyx_3);
+ __Pyx_WriteUnraisable("sphinx.pycode.pgen2.parse.Parser.shift");
+ __pyx_L0:;
+ Py_DECREF(__pyx_v_dfa);
+ Py_DECREF(__pyx_v_state);
+ Py_DECREF(__pyx_v_node);
+ Py_DECREF(__pyx_v_newnode);
+}
+
+/* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":130
+ * self.stack[-1] = (dfa, newstate, node)
+ *
+ * cdef void push(self, type, newdfa, newstate, context): # <<<<<<<<<<<<<<
+ * """Push a nonterminal. (Internal)"""
+ * dfa, state, node = self.stack[-1]
+ */
+
+static void __pyx_f_6sphinx_6pycode_5pgen2_5parse_6Parser_push(struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *__pyx_v_self, PyObject *__pyx_v_type, PyObject *__pyx_v_newdfa, PyObject *__pyx_v_newstate, PyObject *__pyx_v_context) {
+ PyObject *__pyx_v_dfa;
+ PyObject *__pyx_v_state;
+ PyObject *__pyx_v_node;
+ PyObject *__pyx_v_newnode;
+ PyObject *__pyx_1 = 0;
+ PyObject *__pyx_2 = 0;
+ PyObject *__pyx_3 = 0;
+ __pyx_v_dfa = Py_None; Py_INCREF(Py_None);
+ __pyx_v_state = Py_None; Py_INCREF(Py_None);
+ __pyx_v_node = Py_None; Py_INCREF(Py_None);
+ __pyx_v_newnode = Py_None; Py_INCREF(Py_None);
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":132
+ * cdef void push(self, type, newdfa, newstate, context):
+ * """Push a nonterminal. (Internal)"""
+ * dfa, state, node = self.stack[-1] # <<<<<<<<<<<<<<
+ * newnode = (type, None, context, [])
+ * self.stack[-1] = (dfa, newstate, node)
+ */
+ __pyx_1 = __Pyx_GetItemInt(__pyx_v_self->stack, -1, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ if (PyTuple_CheckExact(__pyx_1) && PyTuple_GET_SIZE(__pyx_1) == 3) {
+ PyObject* tuple = __pyx_1;
+ __pyx_3 = PyTuple_GET_ITEM(tuple, 0);
+ Py_INCREF(__pyx_3);
+ Py_DECREF(__pyx_v_dfa);
+ __pyx_v_dfa = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = PyTuple_GET_ITEM(tuple, 1);
+ Py_INCREF(__pyx_3);
+ Py_DECREF(__pyx_v_state);
+ __pyx_v_state = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = PyTuple_GET_ITEM(tuple, 2);
+ Py_INCREF(__pyx_3);
+ Py_DECREF(__pyx_v_node);
+ __pyx_v_node = __pyx_3;
+ __pyx_3 = 0;
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ }
+ else {
+ __pyx_2 = PyObject_GetIter(__pyx_1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ __pyx_3 = __Pyx_UnpackItem(__pyx_2, 0); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_dfa);
+ __pyx_v_dfa = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = __Pyx_UnpackItem(__pyx_2, 1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_state);
+ __pyx_v_state = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = __Pyx_UnpackItem(__pyx_2, 2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_node);
+ __pyx_v_node = __pyx_3;
+ __pyx_3 = 0;
+ if (__Pyx_EndUnpack(__pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ }
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":133
+ * """Push a nonterminal. (Internal)"""
+ * dfa, state, node = self.stack[-1]
+ * newnode = (type, None, context, []) # <<<<<<<<<<<<<<
+ * self.stack[-1] = (dfa, newstate, node)
+ * self.stack.append((newdfa, 0, newnode))
+ */
+ __pyx_3 = PyList_New(0); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_1 = PyTuple_New(4); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_v_type);
+ PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_type);
+ Py_INCREF(Py_None);
+ PyTuple_SET_ITEM(__pyx_1, 1, Py_None);
+ Py_INCREF(__pyx_v_context);
+ PyTuple_SET_ITEM(__pyx_1, 2, __pyx_v_context);
+ PyTuple_SET_ITEM(__pyx_1, 3, ((PyObject *)__pyx_3));
+ __pyx_3 = 0;
+ Py_DECREF(__pyx_v_newnode);
+ __pyx_v_newnode = ((PyObject *)__pyx_1);
+ __pyx_1 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":134
+ * dfa, state, node = self.stack[-1]
+ * newnode = (type, None, context, [])
+ * self.stack[-1] = (dfa, newstate, node) # <<<<<<<<<<<<<<
+ * self.stack.append((newdfa, 0, newnode))
+ *
+ */
+ __pyx_2 = PyTuple_New(3); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_v_dfa);
+ PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_dfa);
+ Py_INCREF(__pyx_v_newstate);
+ PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_newstate);
+ Py_INCREF(__pyx_v_node);
+ PyTuple_SET_ITEM(__pyx_2, 2, __pyx_v_node);
+ if (__Pyx_SetItemInt(__pyx_v_self->stack, -1, ((PyObject *)__pyx_2), 0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":135
+ * newnode = (type, None, context, [])
+ * self.stack[-1] = (dfa, newstate, node)
+ * self.stack.append((newdfa, 0, newnode)) # <<<<<<<<<<<<<<
+ *
+ * cdef void pop(self):
+ */
+ __pyx_3 = PyTuple_New(3); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_v_newdfa);
+ PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_newdfa);
+ Py_INCREF(__pyx_int_0);
+ PyTuple_SET_ITEM(__pyx_3, 1, __pyx_int_0);
+ Py_INCREF(__pyx_v_newnode);
+ PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_newnode);
+ __pyx_1 = __Pyx_PyObject_Append(__pyx_v_self->stack, ((PyObject *)__pyx_3)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ Py_XDECREF(__pyx_1);
+ Py_XDECREF(__pyx_2);
+ Py_XDECREF(__pyx_3);
+ __Pyx_WriteUnraisable("sphinx.pycode.pgen2.parse.Parser.push");
+ __pyx_L0:;
+ Py_DECREF(__pyx_v_dfa);
+ Py_DECREF(__pyx_v_state);
+ Py_DECREF(__pyx_v_node);
+ Py_DECREF(__pyx_v_newnode);
+}
+
+/* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":137
+ * self.stack.append((newdfa, 0, newnode))
+ *
+ * cdef void pop(self): # <<<<<<<<<<<<<<
+ * """Pop a nonterminal. (Internal)"""
+ * popdfa, popstate, popnode = self.stack.pop()
+ */
+
+static void __pyx_f_6sphinx_6pycode_5pgen2_5parse_6Parser_pop(struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *__pyx_v_self) {
+ PyObject *__pyx_v_popdfa;
+ PyObject *__pyx_v_popstate;
+ PyObject *__pyx_v_popnode;
+ PyObject *__pyx_v_newnode;
+ PyObject *__pyx_v_dfa;
+ PyObject *__pyx_v_state;
+ PyObject *__pyx_v_node;
+ PyObject *__pyx_1 = 0;
+ PyObject *__pyx_2 = 0;
+ PyObject *__pyx_3 = 0;
+ int __pyx_4;
+ __pyx_v_popdfa = Py_None; Py_INCREF(Py_None);
+ __pyx_v_popstate = Py_None; Py_INCREF(Py_None);
+ __pyx_v_popnode = Py_None; Py_INCREF(Py_None);
+ __pyx_v_newnode = Py_None; Py_INCREF(Py_None);
+ __pyx_v_dfa = Py_None; Py_INCREF(Py_None);
+ __pyx_v_state = Py_None; Py_INCREF(Py_None);
+ __pyx_v_node = Py_None; Py_INCREF(Py_None);
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":139
+ * cdef void pop(self):
+ * """Pop a nonterminal. (Internal)"""
+ * popdfa, popstate, popnode = self.stack.pop() # <<<<<<<<<<<<<<
+ * newnode = self.convert(popnode)
+ * if newnode is not None:
+ */
+ __pyx_1 = PyObject_GetAttr(__pyx_v_self->stack, __pyx_kp_pop); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ if (PyTuple_CheckExact(__pyx_2) && PyTuple_GET_SIZE(__pyx_2) == 3) {
+ PyObject* tuple = __pyx_2;
+ __pyx_3 = PyTuple_GET_ITEM(tuple, 0);
+ Py_INCREF(__pyx_3);
+ Py_DECREF(__pyx_v_popdfa);
+ __pyx_v_popdfa = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = PyTuple_GET_ITEM(tuple, 1);
+ Py_INCREF(__pyx_3);
+ Py_DECREF(__pyx_v_popstate);
+ __pyx_v_popstate = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = PyTuple_GET_ITEM(tuple, 2);
+ Py_INCREF(__pyx_3);
+ Py_DECREF(__pyx_v_popnode);
+ __pyx_v_popnode = __pyx_3;
+ __pyx_3 = 0;
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ }
+ else {
+ __pyx_1 = PyObject_GetIter(__pyx_2); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ __pyx_3 = __Pyx_UnpackItem(__pyx_1, 0); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_popdfa);
+ __pyx_v_popdfa = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = __Pyx_UnpackItem(__pyx_1, 1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_popstate);
+ __pyx_v_popstate = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = __Pyx_UnpackItem(__pyx_1, 2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_popnode);
+ __pyx_v_popnode = __pyx_3;
+ __pyx_3 = 0;
+ if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ }
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":140
+ * """Pop a nonterminal. (Internal)"""
+ * popdfa, popstate, popnode = self.stack.pop()
+ * newnode = self.convert(popnode) # <<<<<<<<<<<<<<
+ * if newnode is not None:
+ * if self.stack:
+ */
+ __pyx_3 = ((struct __pyx_vtabstruct_6sphinx_6pycode_5pgen2_5parse_Parser *)__pyx_v_self->__pyx_vtab)->convert(__pyx_v_self, __pyx_v_popnode); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_newnode);
+ __pyx_v_newnode = __pyx_3;
+ __pyx_3 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":141
+ * popdfa, popstate, popnode = self.stack.pop()
+ * newnode = self.convert(popnode)
+ * if newnode is not None: # <<<<<<<<<<<<<<
+ * if self.stack:
+ * dfa, state, node = self.stack[-1]
+ */
+ __pyx_4 = (__pyx_v_newnode != Py_None);
+ if (__pyx_4) {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":142
+ * newnode = self.convert(popnode)
+ * if newnode is not None:
+ * if self.stack: # <<<<<<<<<<<<<<
+ * dfa, state, node = self.stack[-1]
+ * node[-1].append(newnode)
+ */
+ __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_v_self->stack); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ if (__pyx_4) {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":143
+ * if newnode is not None:
+ * if self.stack:
+ * dfa, state, node = self.stack[-1] # <<<<<<<<<<<<<<
+ * node[-1].append(newnode)
+ * else:
+ */
+ __pyx_2 = __Pyx_GetItemInt(__pyx_v_self->stack, -1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ if (PyTuple_CheckExact(__pyx_2) && PyTuple_GET_SIZE(__pyx_2) == 3) {
+ PyObject* tuple = __pyx_2;
+ __pyx_3 = PyTuple_GET_ITEM(tuple, 0);
+ Py_INCREF(__pyx_3);
+ Py_DECREF(__pyx_v_dfa);
+ __pyx_v_dfa = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = PyTuple_GET_ITEM(tuple, 1);
+ Py_INCREF(__pyx_3);
+ Py_DECREF(__pyx_v_state);
+ __pyx_v_state = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = PyTuple_GET_ITEM(tuple, 2);
+ Py_INCREF(__pyx_3);
+ Py_DECREF(__pyx_v_node);
+ __pyx_v_node = __pyx_3;
+ __pyx_3 = 0;
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ }
+ else {
+ __pyx_1 = PyObject_GetIter(__pyx_2); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ __pyx_3 = __Pyx_UnpackItem(__pyx_1, 0); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_dfa);
+ __pyx_v_dfa = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = __Pyx_UnpackItem(__pyx_1, 1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_state);
+ __pyx_v_state = __pyx_3;
+ __pyx_3 = 0;
+ __pyx_3 = __Pyx_UnpackItem(__pyx_1, 2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_node);
+ __pyx_v_node = __pyx_3;
+ __pyx_3 = 0;
+ if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ }
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":144
+ * if self.stack:
+ * dfa, state, node = self.stack[-1]
+ * node[-1].append(newnode) # <<<<<<<<<<<<<<
+ * else:
+ * self.rootnode = newnode
+ */
+ __pyx_3 = __Pyx_GetItemInt(__pyx_v_node, -1, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_2 = __Pyx_PyObject_Append(__pyx_3, __pyx_v_newnode); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_3); __pyx_3 = 0;
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ goto __pyx_L4;
+ }
+ /*else*/ {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":146
+ * node[-1].append(newnode)
+ * else:
+ * self.rootnode = newnode # <<<<<<<<<<<<<<
+ * self.rootnode.used_names = self.used_names
+ *
+ */
+ Py_INCREF(__pyx_v_newnode);
+ Py_DECREF(__pyx_v_self->rootnode);
+ __pyx_v_self->rootnode = __pyx_v_newnode;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":147
+ * else:
+ * self.rootnode = newnode
+ * self.rootnode.used_names = self.used_names # <<<<<<<<<<<<<<
+ *
+ * cdef convert(self, raw_node):
+ */
+ if (PyObject_SetAttr(__pyx_v_self->rootnode, __pyx_kp_used_names, __pyx_v_self->used_names) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ }
+ __pyx_L4:;
+ goto __pyx_L3;
+ }
+ __pyx_L3:;
+
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ Py_XDECREF(__pyx_1);
+ Py_XDECREF(__pyx_2);
+ Py_XDECREF(__pyx_3);
+ __Pyx_WriteUnraisable("sphinx.pycode.pgen2.parse.Parser.pop");
+ __pyx_L0:;
+ Py_DECREF(__pyx_v_popdfa);
+ Py_DECREF(__pyx_v_popstate);
+ Py_DECREF(__pyx_v_popnode);
+ Py_DECREF(__pyx_v_newnode);
+ Py_DECREF(__pyx_v_dfa);
+ Py_DECREF(__pyx_v_state);
+ Py_DECREF(__pyx_v_node);
+}
+
+/* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":149
+ * self.rootnode.used_names = self.used_names
+ *
+ * cdef convert(self, raw_node): # <<<<<<<<<<<<<<
+ * type, value, context, children = raw_node
+ * if children or type in self._grammar_number2symbol:
+ */
+
+static PyObject *__pyx_f_6sphinx_6pycode_5pgen2_5parse_6Parser_convert(struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *__pyx_v_self, PyObject *__pyx_v_raw_node) {
+ PyObject *__pyx_v_type;
+ PyObject *__pyx_v_value;
+ PyObject *__pyx_v_context;
+ PyObject *__pyx_v_children;
+ PyObject *__pyx_r;
+ PyObject *__pyx_1 = 0;
+ PyObject *__pyx_2 = 0;
+ int __pyx_3;
+ Py_ssize_t __pyx_4 = 0;
+ PyObject *__pyx_5 = 0;
+ PyObject *__pyx_6 = 0;
+ __pyx_v_type = Py_None; Py_INCREF(Py_None);
+ __pyx_v_value = Py_None; Py_INCREF(Py_None);
+ __pyx_v_context = Py_None; Py_INCREF(Py_None);
+ __pyx_v_children = Py_None; Py_INCREF(Py_None);
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":150
+ *
+ * cdef convert(self, raw_node):
+ * type, value, context, children = raw_node # <<<<<<<<<<<<<<
+ * if children or type in self._grammar_number2symbol:
+ * # If there's exactly one child, return that child instead of
+ */
+ if (PyTuple_CheckExact(__pyx_v_raw_node) && PyTuple_GET_SIZE(__pyx_v_raw_node) == 4) {
+ PyObject* tuple = __pyx_v_raw_node;
+ __pyx_2 = PyTuple_GET_ITEM(tuple, 0);
+ Py_INCREF(__pyx_2);
+ Py_DECREF(__pyx_v_type);
+ __pyx_v_type = __pyx_2;
+ __pyx_2 = 0;
+ __pyx_2 = PyTuple_GET_ITEM(tuple, 1);
+ Py_INCREF(__pyx_2);
+ Py_DECREF(__pyx_v_value);
+ __pyx_v_value = __pyx_2;
+ __pyx_2 = 0;
+ __pyx_2 = PyTuple_GET_ITEM(tuple, 2);
+ Py_INCREF(__pyx_2);
+ Py_DECREF(__pyx_v_context);
+ __pyx_v_context = __pyx_2;
+ __pyx_2 = 0;
+ __pyx_2 = PyTuple_GET_ITEM(tuple, 3);
+ Py_INCREF(__pyx_2);
+ Py_DECREF(__pyx_v_children);
+ __pyx_v_children = __pyx_2;
+ __pyx_2 = 0;
+ }
+ else {
+ __pyx_1 = PyObject_GetIter(__pyx_v_raw_node); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_2 = __Pyx_UnpackItem(__pyx_1, 0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_type);
+ __pyx_v_type = __pyx_2;
+ __pyx_2 = 0;
+ __pyx_2 = __Pyx_UnpackItem(__pyx_1, 1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_value);
+ __pyx_v_value = __pyx_2;
+ __pyx_2 = 0;
+ __pyx_2 = __Pyx_UnpackItem(__pyx_1, 2); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_context);
+ __pyx_v_context = __pyx_2;
+ __pyx_2 = 0;
+ __pyx_2 = __Pyx_UnpackItem(__pyx_1, 3); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_v_children);
+ __pyx_v_children = __pyx_2;
+ __pyx_2 = 0;
+ if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ }
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":151
+ * cdef convert(self, raw_node):
+ * type, value, context, children = raw_node
+ * if children or type in self._grammar_number2symbol: # <<<<<<<<<<<<<<
+ * # If there's exactly one child, return that child instead of
+ * # creating a new node.
+ */
+ __pyx_2 = __pyx_v_children;
+ Py_INCREF(__pyx_2);
+ __pyx_3 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ if (!__pyx_3) {
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ __pyx_3 = (PySequence_Contains(__pyx_v_self->_grammar_number2symbol, __pyx_v_type)); if (unlikely(__pyx_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_2 = __Pyx_PyBool_FromLong(__pyx_3); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ }
+ __pyx_3 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ if (__pyx_3) {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":154
+ * # If there's exactly one child, return that child instead of
+ * # creating a new node.
+ * if len(children) == 1: # <<<<<<<<<<<<<<
+ * return children[0]
+ * return Node(type, children, context=context)
+ */
+ __pyx_4 = PyObject_Length(__pyx_v_children); if (unlikely(__pyx_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_3 = (__pyx_4 == 1);
+ if (__pyx_3) {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":155
+ * # creating a new node.
+ * if len(children) == 1:
+ * return children[0] # <<<<<<<<<<<<<<
+ * return Node(type, children, context=context)
+ * else:
+ */
+ __pyx_1 = __Pyx_GetItemInt(__pyx_v_children, 0, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_r = __pyx_1;
+ __pyx_1 = 0;
+ goto __pyx_L0;
+ goto __pyx_L4;
+ }
+ __pyx_L4:;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":156
+ * if len(children) == 1:
+ * return children[0]
+ * return Node(type, children, context=context) # <<<<<<<<<<<<<<
+ * else:
+ * return Leaf(type, value, context=context)
+ */
+ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_Node); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_1 = PyTuple_New(2); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_v_type);
+ PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_type);
+ Py_INCREF(__pyx_v_children);
+ PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_children);
+ __pyx_5 = PyDict_New(); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ if (PyDict_SetItem(__pyx_5, __pyx_kp_context, __pyx_v_context) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_6 = PyEval_CallObjectWithKeywords(__pyx_2, ((PyObject *)__pyx_1), ((PyObject *)__pyx_5)); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+ Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+ __pyx_r = __pyx_6;
+ __pyx_6 = 0;
+ goto __pyx_L0;
+ goto __pyx_L3;
+ }
+ /*else*/ {
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":158
+ * return Node(type, children, context=context)
+ * else:
+ * return Leaf(type, value, context=context) # <<<<<<<<<<<<<<
+ */
+ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_Leaf); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_1 = PyTuple_New(2); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_v_type);
+ PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_type);
+ Py_INCREF(__pyx_v_value);
+ PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_value);
+ __pyx_5 = PyDict_New(); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ if (PyDict_SetItem(__pyx_5, __pyx_kp_context, __pyx_v_context) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_6 = PyEval_CallObjectWithKeywords(__pyx_2, ((PyObject *)__pyx_1), ((PyObject *)__pyx_5)); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+ Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+ Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+ __pyx_r = __pyx_6;
+ __pyx_6 = 0;
+ goto __pyx_L0;
+ }
+ __pyx_L3:;
+
+ __pyx_r = Py_None; Py_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ Py_XDECREF(__pyx_1);
+ Py_XDECREF(__pyx_2);
+ Py_XDECREF(__pyx_5);
+ Py_XDECREF(__pyx_6);
+ __Pyx_AddTraceback("sphinx.pycode.pgen2.parse.Parser.convert");
+ __pyx_r = 0;
+ __pyx_L0:;
+ Py_DECREF(__pyx_v_type);
+ Py_DECREF(__pyx_v_value);
+ Py_DECREF(__pyx_v_context);
+ Py_DECREF(__pyx_v_children);
+ return __pyx_r;
+}
+static struct __pyx_vtabstruct_6sphinx_6pycode_5pgen2_5parse_Parser __pyx_vtable_6sphinx_6pycode_5pgen2_5parse_Parser;
+
+static PyObject *__pyx_tp_new_6sphinx_6pycode_5pgen2_5parse_Parser(PyTypeObject *t, PyObject *a, PyObject *k) {
+ struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *p;
+ PyObject *o = (*t->tp_alloc)(t, 0);
+ if (!o) return 0;
+ p = ((struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)o);
+ p->__pyx_vtab = __pyx_vtabptr_6sphinx_6pycode_5pgen2_5parse_Parser;
+ p->grammar = Py_None; Py_INCREF(Py_None);
+ p->stack = Py_None; Py_INCREF(Py_None);
+ p->rootnode = Py_None; Py_INCREF(Py_None);
+ p->used_names = Py_None; Py_INCREF(Py_None);
+ p->_grammar_dfas = Py_None; Py_INCREF(Py_None);
+ p->_grammar_labels = Py_None; Py_INCREF(Py_None);
+ p->_grammar_keywords = Py_None; Py_INCREF(Py_None);
+ p->_grammar_tokens = Py_None; Py_INCREF(Py_None);
+ p->_grammar_number2symbol = Py_None; Py_INCREF(Py_None);
+ return o;
+}
+
+static void __pyx_tp_dealloc_6sphinx_6pycode_5pgen2_5parse_Parser(PyObject *o) {
+ struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *p = (struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)o;
+ Py_XDECREF(p->grammar);
+ Py_XDECREF(p->stack);
+ Py_XDECREF(p->rootnode);
+ Py_XDECREF(p->used_names);
+ Py_XDECREF(p->_grammar_dfas);
+ Py_XDECREF(p->_grammar_labels);
+ Py_XDECREF(p->_grammar_keywords);
+ Py_XDECREF(p->_grammar_tokens);
+ Py_XDECREF(p->_grammar_number2symbol);
+ (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_6sphinx_6pycode_5pgen2_5parse_Parser(PyObject *o, visitproc v, void *a) {
+ int e;
+ struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *p = (struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)o;
+ if (p->grammar) {
+ e = (*v)(p->grammar, a); if (e) return e;
+ }
+ if (p->stack) {
+ e = (*v)(p->stack, a); if (e) return e;
+ }
+ if (p->rootnode) {
+ e = (*v)(p->rootnode, a); if (e) return e;
+ }
+ if (p->used_names) {
+ e = (*v)(p->used_names, a); if (e) return e;
+ }
+ if (p->_grammar_dfas) {
+ e = (*v)(p->_grammar_dfas, a); if (e) return e;
+ }
+ if (p->_grammar_labels) {
+ e = (*v)(p->_grammar_labels, a); if (e) return e;
+ }
+ if (p->_grammar_keywords) {
+ e = (*v)(p->_grammar_keywords, a); if (e) return e;
+ }
+ if (p->_grammar_tokens) {
+ e = (*v)(p->_grammar_tokens, a); if (e) return e;
+ }
+ if (p->_grammar_number2symbol) {
+ e = (*v)(p->_grammar_number2symbol, a); if (e) return e;
+ }
+ return 0;
+}
+
+static int __pyx_tp_clear_6sphinx_6pycode_5pgen2_5parse_Parser(PyObject *o) {
+ struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *p = (struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser *)o;
+ PyObject* tmp;
+ tmp = ((PyObject*)p->grammar);
+ p->grammar = Py_None; Py_INCREF(Py_None);
+ Py_XDECREF(tmp);
+ tmp = ((PyObject*)p->stack);
+ p->stack = Py_None; Py_INCREF(Py_None);
+ Py_XDECREF(tmp);
+ tmp = ((PyObject*)p->rootnode);
+ p->rootnode = Py_None; Py_INCREF(Py_None);
+ Py_XDECREF(tmp);
+ tmp = ((PyObject*)p->used_names);
+ p->used_names = Py_None; Py_INCREF(Py_None);
+ Py_XDECREF(tmp);
+ tmp = ((PyObject*)p->_grammar_dfas);
+ p->_grammar_dfas = Py_None; Py_INCREF(Py_None);
+ Py_XDECREF(tmp);
+ tmp = ((PyObject*)p->_grammar_labels);
+ p->_grammar_labels = Py_None; Py_INCREF(Py_None);
+ Py_XDECREF(tmp);
+ tmp = ((PyObject*)p->_grammar_keywords);
+ p->_grammar_keywords = Py_None; Py_INCREF(Py_None);
+ Py_XDECREF(tmp);
+ tmp = ((PyObject*)p->_grammar_tokens);
+ p->_grammar_tokens = Py_None; Py_INCREF(Py_None);
+ Py_XDECREF(tmp);
+ tmp = ((PyObject*)p->_grammar_number2symbol);
+ p->_grammar_number2symbol = Py_None; Py_INCREF(Py_None);
+ Py_XDECREF(tmp);
+ return 0;
+}
+
+static struct PyMethodDef __pyx_methods_6sphinx_6pycode_5pgen2_5parse_Parser[] = {
+ {"setup", (PyCFunction)__pyx_pf_6sphinx_6pycode_5pgen2_5parse_6Parser_setup, METH_VARARGS|METH_KEYWORDS, 0},
+ {"addtoken", (PyCFunction)__pyx_pf_6sphinx_6pycode_5pgen2_5parse_6Parser_addtoken, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6sphinx_6pycode_5pgen2_5parse_6Parser_addtoken},
+ {0, 0, 0, 0}
+};
+
+static struct PyMemberDef __pyx_members_6sphinx_6pycode_5pgen2_5parse_Parser[] = {
+ {"grammar", T_OBJECT, offsetof(struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser, grammar), 0, 0},
+ {"stack", T_OBJECT, offsetof(struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser, stack), 0, 0},
+ {"rootnode", T_OBJECT, offsetof(struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser, rootnode), 0, 0},
+ {"used_names", T_OBJECT, offsetof(struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser, used_names), 0, 0},
+ {0, 0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_Parser = {
+ 0, /*nb_add*/
+ 0, /*nb_subtract*/
+ 0, /*nb_multiply*/
+ #if PY_MAJOR_VERSION < 3
+ 0, /*nb_divide*/
+ #endif
+ 0, /*nb_remainder*/
+ 0, /*nb_divmod*/
+ 0, /*nb_power*/
+ 0, /*nb_negative*/
+ 0, /*nb_positive*/
+ 0, /*nb_absolute*/
+ 0, /*nb_nonzero*/
+ 0, /*nb_invert*/
+ 0, /*nb_lshift*/
+ 0, /*nb_rshift*/
+ 0, /*nb_and*/
+ 0, /*nb_xor*/
+ 0, /*nb_or*/
+ #if PY_MAJOR_VERSION < 3
+ 0, /*nb_coerce*/
+ #endif
+ 0, /*nb_int*/
+ 0, /*nb_long*/
+ 0, /*nb_float*/
+ #if PY_MAJOR_VERSION < 3
+ 0, /*nb_oct*/
+ #endif
+ #if PY_MAJOR_VERSION < 3
+ 0, /*nb_hex*/
+ #endif
+ 0, /*nb_inplace_add*/
+ 0, /*nb_inplace_subtract*/
+ 0, /*nb_inplace_multiply*/
+ #if PY_MAJOR_VERSION < 3
+ 0, /*nb_inplace_divide*/
+ #endif
+ 0, /*nb_inplace_remainder*/
+ 0, /*nb_inplace_power*/
+ 0, /*nb_inplace_lshift*/
+ 0, /*nb_inplace_rshift*/
+ 0, /*nb_inplace_and*/
+ 0, /*nb_inplace_xor*/
+ 0, /*nb_inplace_or*/
+ 0, /*nb_floor_divide*/
+ 0, /*nb_true_divide*/
+ 0, /*nb_inplace_floor_divide*/
+ 0, /*nb_inplace_true_divide*/
+ #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX)
+ 0, /*nb_index*/
+ #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_Parser = {
+ 0, /*sq_length*/
+ 0, /*sq_concat*/
+ 0, /*sq_repeat*/
+ 0, /*sq_item*/
+ 0, /*sq_slice*/
+ 0, /*sq_ass_item*/
+ 0, /*sq_ass_slice*/
+ 0, /*sq_contains*/
+ 0, /*sq_inplace_concat*/
+ 0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_Parser = {
+ 0, /*mp_length*/
+ 0, /*mp_subscript*/
+ 0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_Parser = {
+ #if PY_MAJOR_VERSION < 3
+ 0, /*bf_getreadbuffer*/
+ #endif
+ #if PY_MAJOR_VERSION < 3
+ 0, /*bf_getwritebuffer*/
+ #endif
+ #if PY_MAJOR_VERSION < 3
+ 0, /*bf_getsegcount*/
+ #endif
+ #if PY_MAJOR_VERSION < 3
+ 0, /*bf_getcharbuffer*/
+ #endif
+ #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_NEWBUFFER)
+ 0, /*bf_getbuffer*/
+ #endif
+ #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_NEWBUFFER)
+ 0, /*bf_releasebuffer*/
+ #endif
+};
+
+PyTypeObject __pyx_type_6sphinx_6pycode_5pgen2_5parse_Parser = {
+ PyVarObject_HEAD_INIT(0, 0)
+ "sphinx.pycode.pgen2.parse.Parser", /*tp_name*/
+ sizeof(struct __pyx_obj_6sphinx_6pycode_5pgen2_5parse_Parser), /*tp_basicsize*/
+ 0, /*tp_itemsize*/
+ __pyx_tp_dealloc_6sphinx_6pycode_5pgen2_5parse_Parser, /*tp_dealloc*/
+ 0, /*tp_print*/
+ 0, /*tp_getattr*/
+ 0, /*tp_setattr*/
+ 0, /*tp_compare*/
+ 0, /*tp_repr*/
+ &__pyx_tp_as_number_Parser, /*tp_as_number*/
+ &__pyx_tp_as_sequence_Parser, /*tp_as_sequence*/
+ &__pyx_tp_as_mapping_Parser, /*tp_as_mapping*/
+ 0, /*tp_hash*/
+ 0, /*tp_call*/
+ 0, /*tp_str*/
+ 0, /*tp_getattro*/
+ 0, /*tp_setattro*/
+ &__pyx_tp_as_buffer_Parser, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+ 0, /*tp_doc*/
+ __pyx_tp_traverse_6sphinx_6pycode_5pgen2_5parse_Parser, /*tp_traverse*/
+ __pyx_tp_clear_6sphinx_6pycode_5pgen2_5parse_Parser, /*tp_clear*/
+ 0, /*tp_richcompare*/
+ 0, /*tp_weaklistoffset*/
+ 0, /*tp_iter*/
+ 0, /*tp_iternext*/
+ __pyx_methods_6sphinx_6pycode_5pgen2_5parse_Parser, /*tp_methods*/
+ __pyx_members_6sphinx_6pycode_5pgen2_5parse_Parser, /*tp_members*/
+ 0, /*tp_getset*/
+ 0, /*tp_base*/
+ 0, /*tp_dict*/
+ 0, /*tp_descr_get*/
+ 0, /*tp_descr_set*/
+ 0, /*tp_dictoffset*/
+ __pyx_pf_6sphinx_6pycode_5pgen2_5parse_6Parser___init__, /*tp_init*/
+ 0, /*tp_alloc*/
+ __pyx_tp_new_6sphinx_6pycode_5pgen2_5parse_Parser, /*tp_new*/
+ 0, /*tp_free*/
+ 0, /*tp_is_gc*/
+ 0, /*tp_bases*/
+ 0, /*tp_mro*/
+ 0, /*tp_cache*/
+ 0, /*tp_subclasses*/
+ 0, /*tp_weaklist*/
+};
+
+static struct PyMethodDef __pyx_methods[] = {
+ {0, 0, 0, 0}
+};
+
+static void __pyx_init_filenames(void); /*proto*/
+
+#if PY_MAJOR_VERSION >= 3
+static struct PyModuleDef __pyx_moduledef = {
+ PyModuleDef_HEAD_INIT,
+ "parse",
+ 0, /* m_doc */
+ -1, /* m_size */
+ __pyx_methods /* m_methods */,
+ NULL, /* m_reload */
+ NULL, /* m_traverse */
+ NULL, /* m_clear */
+ NULL /* m_free */
+};
+#endif
+
+static __Pyx_StringTabEntry __pyx_string_tab[] = {
+ {&__pyx_kp___init__, __pyx_k___init__, sizeof(__pyx_k___init__), 0, 1, 1},
+ {&__pyx_kp_setup, __pyx_k_setup, sizeof(__pyx_k_setup), 0, 1, 1},
+ {&__pyx_kp_addtoken, __pyx_k_addtoken, sizeof(__pyx_k_addtoken), 0, 1, 1},
+ {&__pyx_kp_1, __pyx_k_1, sizeof(__pyx_k_1), 1, 1, 1},
+ {&__pyx_kp_Node, __pyx_k_Node, sizeof(__pyx_k_Node), 1, 1, 1},
+ {&__pyx_kp_Leaf, __pyx_k_Leaf, sizeof(__pyx_k_Leaf), 1, 1, 1},
+ {&__pyx_kp_ParseError, __pyx_k_ParseError, sizeof(__pyx_k_ParseError), 0, 1, 1},
+ {&__pyx_kp_Exception, __pyx_k_Exception, sizeof(__pyx_k_Exception), 1, 1, 1},
+ {&__pyx_kp_msg, __pyx_k_msg, sizeof(__pyx_k_msg), 1, 1, 1},
+ {&__pyx_kp_type, __pyx_k_type, sizeof(__pyx_k_type), 1, 1, 1},
+ {&__pyx_kp_value, __pyx_k_value, sizeof(__pyx_k_value), 1, 1, 1},
+ {&__pyx_kp_context, __pyx_k_context, sizeof(__pyx_k_context), 1, 1, 1},
+ {&__pyx_kp_dfas, __pyx_k_dfas, sizeof(__pyx_k_dfas), 1, 1, 1},
+ {&__pyx_kp_labels, __pyx_k_labels, sizeof(__pyx_k_labels), 1, 1, 1},
+ {&__pyx_kp_keywords, __pyx_k_keywords, sizeof(__pyx_k_keywords), 1, 1, 1},
+ {&__pyx_kp_tokens, __pyx_k_tokens, sizeof(__pyx_k_tokens), 1, 1, 1},
+ {&__pyx_kp_4, __pyx_k_4, sizeof(__pyx_k_4), 1, 1, 1},
+ {&__pyx_kp_start, __pyx_k_start, sizeof(__pyx_k_start), 1, 1, 1},
+ {&__pyx_kp_add, __pyx_k_add, sizeof(__pyx_k_add), 1, 1, 1},
+ {&__pyx_kp_get, __pyx_k_get, sizeof(__pyx_k_get), 1, 1, 1},
+ {&__pyx_kp_append, __pyx_k_append, sizeof(__pyx_k_append), 1, 1, 1},
+ {&__pyx_kp_pop, __pyx_k_pop, sizeof(__pyx_k_pop), 1, 1, 1},
+ {&__pyx_kp_used_names, __pyx_k_used_names, sizeof(__pyx_k_used_names), 1, 1, 1},
+ {&__pyx_kp_2, __pyx_k_2, sizeof(__pyx_k_2), 0, 0, 0},
+ {&__pyx_kp_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 0},
+ {&__pyx_kp_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 0, 0},
+ {&__pyx_kp_6, __pyx_k_6, sizeof(__pyx_k_6), 0, 0, 0},
+ {&__pyx_kp_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 0, 0},
+ {0, 0, 0, 0, 0, 0}
+};
+static int __Pyx_InitCachedBuiltins(void) {
+ __pyx_builtin_Exception = __Pyx_GetName(__pyx_b, __pyx_kp_Exception); if (!__pyx_builtin_Exception) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ return 0;
+ __pyx_L1_error:;
+ return -1;
+}
+
+static int __Pyx_InitGlobals(void) {
+ __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+ __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+ if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+ return 0;
+ __pyx_L1_error:;
+ return -1;
+}
+
+#if PY_MAJOR_VERSION < 3
+PyMODINIT_FUNC initparse(void); /*proto*/
+PyMODINIT_FUNC initparse(void)
+#else
+PyMODINIT_FUNC PyInit_parse(void); /*proto*/
+PyMODINIT_FUNC PyInit_parse(void)
+#endif
+{
+ PyObject *__pyx_1 = 0;
+ PyObject *__pyx_2 = 0;
+ PyObject *__pyx_3 = 0;
+ PyObject *__pyx_4 = 0;
+ __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ /*--- Libary function declarations ---*/
+ __pyx_init_filenames();
+ /*--- Initialize various global constants etc. ---*/
+ if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ /*--- Module creation code ---*/
+ #if PY_MAJOR_VERSION < 3
+ __pyx_m = Py_InitModule4("parse", __pyx_methods, 0, 0, PYTHON_API_VERSION);
+ #else
+ __pyx_m = PyModule_Create(&__pyx_moduledef);
+ #endif
+ if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+ #if PY_MAJOR_VERSION < 3
+ Py_INCREF(__pyx_m);
+ #endif
+ __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME);
+ if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+ if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+ /*--- Builtin init code ---*/
+ if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_skip_dispatch = 0;
+ /*--- Global init code ---*/
+ /*--- Function export code ---*/
+ /*--- Type init code ---*/
+ __pyx_vtabptr_6sphinx_6pycode_5pgen2_5parse_Parser = &__pyx_vtable_6sphinx_6pycode_5pgen2_5parse_Parser;
+ *(void(**)(void))&__pyx_vtable_6sphinx_6pycode_5pgen2_5parse_Parser.classify = (void(*)(void))__pyx_f_6sphinx_6pycode_5pgen2_5parse_6Parser_classify;
+ *(void(**)(void))&__pyx_vtable_6sphinx_6pycode_5pgen2_5parse_Parser.shift = (void(*)(void))__pyx_f_6sphinx_6pycode_5pgen2_5parse_6Parser_shift;
+ *(void(**)(void))&__pyx_vtable_6sphinx_6pycode_5pgen2_5parse_Parser.push = (void(*)(void))__pyx_f_6sphinx_6pycode_5pgen2_5parse_6Parser_push;
+ *(void(**)(void))&__pyx_vtable_6sphinx_6pycode_5pgen2_5parse_Parser.pop = (void(*)(void))__pyx_f_6sphinx_6pycode_5pgen2_5parse_6Parser_pop;
+ *(void(**)(void))&__pyx_vtable_6sphinx_6pycode_5pgen2_5parse_Parser.convert = (void(*)(void))__pyx_f_6sphinx_6pycode_5pgen2_5parse_6Parser_convert;
+ if (PyType_Ready(&__pyx_type_6sphinx_6pycode_5pgen2_5parse_Parser) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ if (__Pyx_SetVtable(__pyx_type_6sphinx_6pycode_5pgen2_5parse_Parser.tp_dict, __pyx_vtabptr_6sphinx_6pycode_5pgen2_5parse_Parser) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ if (PyObject_SetAttrString(__pyx_m, "Parser", (PyObject *)&__pyx_type_6sphinx_6pycode_5pgen2_5parse_Parser) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_ptype_6sphinx_6pycode_5pgen2_5parse_Parser = &__pyx_type_6sphinx_6pycode_5pgen2_5parse_Parser;
+ /*--- Type import code ---*/
+ /*--- Function import code ---*/
+ /*--- Execution code ---*/
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":15
+ * """
+ *
+ * from sphinx.pycode.nodes import Node, Leaf # <<<<<<<<<<<<<<
+ *
+ * DEF NAME = 1
+ */
+ __pyx_1 = PyList_New(2); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_kp_Node);
+ PyList_SET_ITEM(__pyx_1, 0, __pyx_kp_Node);
+ Py_INCREF(__pyx_kp_Leaf);
+ PyList_SET_ITEM(__pyx_1, 1, __pyx_kp_Leaf);
+ __pyx_2 = __Pyx_Import(__pyx_kp_1, ((PyObject *)__pyx_1)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+ __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_Node); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ if (PyObject_SetAttr(__pyx_m, __pyx_kp_Node, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_Leaf); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ if (PyObject_SetAttr(__pyx_m, __pyx_kp_Leaf, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":19
+ * DEF NAME = 1
+ *
+ * class ParseError(Exception): # <<<<<<<<<<<<<<
+ * """Exception to signal the parser is stuck."""
+ *
+ */
+ __pyx_2 = PyDict_New(); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_INCREF(__pyx_builtin_Exception);
+ PyTuple_SET_ITEM(__pyx_1, 0, __pyx_builtin_Exception);
+ if (PyDict_SetItemString(((PyObject *)__pyx_2), "__doc__", __pyx_kp_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_3 = __Pyx_CreateClass(((PyObject *)__pyx_1), ((PyObject *)__pyx_2), __pyx_kp_ParseError, "sphinx.pycode.pgen2.parse"); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":22
+ * """Exception to signal the parser is stuck."""
+ *
+ * def __init__(self, msg, type, value, context): # <<<<<<<<<<<<<<
+ * Exception.__init__(self, "%s: type=%r, value=%r, context=%r" %
+ * (msg, type, value, context))
+ */
+ __pyx_1 = PyCFunction_New(&__pyx_mdef_6sphinx_6pycode_5pgen2_5parse_10ParseError___init__, 0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __pyx_4 = PyMethod_New(__pyx_1, 0, __pyx_3); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ if (PyObject_SetAttr(__pyx_3, __pyx_kp___init__, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_4); __pyx_4 = 0;
+ if (PyObject_SetAttr(__pyx_m, __pyx_kp_ParseError, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ Py_DECREF(__pyx_3); __pyx_3 = 0;
+ Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+
+ /* "/home/gbr/devel/sphinx/sphinx/pycode/pgen2/parse.pyx":149
+ * self.rootnode.used_names = self.used_names
+ *
+ * cdef convert(self, raw_node): # <<<<<<<<<<<<<<
+ * type, value, context, children = raw_node
+ * if children or type in self._grammar_number2symbol:
+ */
+ #if PY_MAJOR_VERSION < 3
+ return;
+ #else
+ return __pyx_m;
+ #endif
+ __pyx_L1_error:;
+ Py_XDECREF(__pyx_1);
+ Py_XDECREF(__pyx_2);
+ Py_XDECREF(__pyx_3);
+ Py_XDECREF(__pyx_4);
+ __Pyx_AddTraceback("sphinx.pycode.pgen2.parse");
+ #if PY_MAJOR_VERSION >= 3
+ return NULL;
+ #endif
+}
+
+static const char *__pyx_filenames[] = {
+ "parse.pyx",
+};
+
+/* Runtime support code */
+
+static void __pyx_init_filenames(void) {
+ __pyx_f = __pyx_filenames;
+}
+
+static INLINE void __Pyx_RaiseArgtupleTooLong(
+ Py_ssize_t num_expected,
+ Py_ssize_t num_found)
+{
+ const char* error_message =
+ #if PY_VERSION_HEX < 0x02050000
+ "function takes at most %d positional arguments (%d given)";
+ #else
+ "function takes at most %zd positional arguments (%zd given)";
+ #endif
+ PyErr_Format(PyExc_TypeError, error_message, num_expected, num_found);
+}
+
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) {
+ PyObject *__import__ = 0;
+ PyObject *empty_list = 0;
+ PyObject *module = 0;
+ PyObject *global_dict = 0;
+ PyObject *empty_dict = 0;
+ PyObject *list;
+ __import__ = PyObject_GetAttrString(__pyx_b, "__import__");
+ if (!__import__)
+ goto bad;
+ if (from_list)
+ list = from_list;
+ else {
+ empty_list = PyList_New(0);
+ if (!empty_list)
+ goto bad;
+ list = empty_list;
+ }
+ global_dict = PyModule_GetDict(__pyx_m);
+ if (!global_dict)
+ goto bad;
+ empty_dict = PyDict_New();
+ if (!empty_dict)
+ goto bad;
+ module = PyObject_CallFunction(__import__, "OOOO",
+ name, global_dict, empty_dict, list);
+bad:
+ Py_XDECREF(empty_list);
+ Py_XDECREF(__import__);
+ Py_XDECREF(empty_dict);
+ return module;
+}
+
+static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
+ PyObject *result;
+ result = PyObject_GetAttr(dict, name);
+ if (!result)
+ PyErr_SetObject(PyExc_NameError, name);
+ return result;
+}
+
+static PyObject *__Pyx_CreateClass(
+ PyObject *bases, PyObject *dict, PyObject *name, char *modname)
+{
+ PyObject *py_modname;
+ PyObject *result = 0;
+
+ #if PY_MAJOR_VERSION < 3
+ py_modname = PyString_FromString(modname);
+ #else
+ py_modname = PyUnicode_FromString(modname);
+ #endif
+ if (!py_modname)
+ goto bad;
+ if (PyDict_SetItemString(dict, "__module__", py_modname) < 0)
+ goto bad;
+ #if PY_MAJOR_VERSION < 3
+ result = PyClass_New(bases, dict, name);
+ #else
+ result = PyObject_CallFunctionObjArgs((PyObject *)&PyType_Type, name, bases, dict, NULL);
+ #endif
+bad:
+ Py_XDECREF(py_modname);
+ return result;
+}
+
+
+static PyObject *__Pyx_UnpackItem(PyObject *iter, Py_ssize_t index) {
+ PyObject *item;
+ if (!(item = PyIter_Next(iter))) {
+ if (!PyErr_Occurred()) {
+ PyErr_Format(PyExc_ValueError,
+ #if PY_VERSION_HEX < 0x02050000
+ "need more than %d values to unpack", (int)index);
+ #else
+ "need more than %zd values to unpack", index);
+ #endif
+ }
+ }
+ return item;
+}
+
+static int __Pyx_EndUnpack(PyObject *iter) {
+ PyObject *item;
+ if ((item = PyIter_Next(iter))) {
+ Py_DECREF(item);
+ PyErr_SetString(PyExc_ValueError, "too many values to unpack");
+ return -1;
+ }
+ else if (!PyErr_Occurred())
+ return 0;
+ else
+ return -1;
+}
+
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
+ Py_XINCREF(type);
+ Py_XINCREF(value);
+ Py_XINCREF(tb);
+ /* First, check the traceback argument, replacing None with NULL. */
+ if (tb == Py_None) {
+ Py_DECREF(tb);
+ tb = 0;
+ }
+ else if (tb != NULL && !PyTraceBack_Check(tb)) {
+ PyErr_SetString(PyExc_TypeError,
+ "raise: arg 3 must be a traceback or None");
+ goto raise_error;
+ }
+ /* Next, replace a missing value with None */
+ if (value == NULL) {
+ value = Py_None;
+ Py_INCREF(value);
+ }
+ #if PY_VERSION_HEX < 0x02050000
+ if (!PyClass_Check(type))
+ #else
+ if (!PyType_Check(type))
+ #endif
+ {
+ /* Raising an instance. The value should be a dummy. */
+ if (value != Py_None) {
+ PyErr_SetString(PyExc_TypeError,
+ "instance exception may not have a separate value");
+ goto raise_error;
+ }
+ /* Normalize to raise <class>, <instance> */
+ Py_DECREF(value);
+ value = type;
+ #if PY_VERSION_HEX < 0x02050000
+ if (PyInstance_Check(type)) {
+ type = (PyObject*) ((PyInstanceObject*)type)->in_class;
+ Py_INCREF(type);
+ }
+ else {
+ type = 0;
+ PyErr_SetString(PyExc_TypeError,
+ "raise: exception must be an old-style class or instance");
+ goto raise_error;
+ }
+ #else
+ type = (PyObject*) Py_TYPE(type);
+ Py_INCREF(type);
+ if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
+ PyErr_SetString(PyExc_TypeError,
+ "raise: exception class must be a subclass of BaseException");
+ goto raise_error;
+ }
+ #endif
+ }
+ PyErr_Restore(type, value, tb);
+ return;
+raise_error:
+ Py_XDECREF(value);
+ Py_XDECREF(type);
+ Py_XDECREF(tb);
+ return;
+}
+
+
+static void __Pyx_WriteUnraisable(const char *name) {
+ PyObject *old_exc, *old_val, *old_tb;
+ PyObject *ctx;
+ PyErr_Fetch(&old_exc, &old_val, &old_tb);
+ #if PY_MAJOR_VERSION < 3
+ ctx = PyString_FromString(name);
+ #else
+ ctx = PyUnicode_FromString(name);
+ #endif
+ PyErr_Restore(old_exc, old_val, old_tb);
+ if (!ctx)
+ ctx = Py_None;
+ PyErr_WriteUnraisable(ctx);
+}
+
+static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+ PyObject *pycobj = 0;
+ int result;
+
+ pycobj = PyCObject_FromVoidPtr(vtable, 0);
+ if (!pycobj)
+ goto bad;
+ if (PyDict_SetItemString(dict, "__pyx_vtable__", pycobj) < 0)
+ goto bad;
+ result = 0;
+ goto done;
+
+bad:
+ result = -1;
+done:
+ Py_XDECREF(pycobj);
+ return result;
+}
+
+#include "compile.h"
+#include "frameobject.h"
+#include "traceback.h"
+
+static void __Pyx_AddTraceback(const char *funcname) {
+ PyObject *py_srcfile = 0;
+ PyObject *py_funcname = 0;
+ PyObject *py_globals = 0;
+ PyObject *empty_string = 0;
+ PyCodeObject *py_code = 0;
+ PyFrameObject *py_frame = 0;
+
+ #if PY_MAJOR_VERSION < 3
+ py_srcfile = PyString_FromString(__pyx_filename);
+ #else
+ py_srcfile = PyUnicode_FromString(__pyx_filename);
+ #endif
+ if (!py_srcfile) goto bad;
+ if (__pyx_clineno) {
+ #if PY_MAJOR_VERSION < 3
+ py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
+ #else
+ py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
+ #endif
+ }
+ else {
+ #if PY_MAJOR_VERSION < 3
+ py_funcname = PyString_FromString(funcname);
+ #else
+ py_funcname = PyUnicode_FromString(funcname);
+ #endif
+ }
+ if (!py_funcname) goto bad;
+ py_globals = PyModule_GetDict(__pyx_m);
+ if (!py_globals) goto bad;
+ #if PY_MAJOR_VERSION < 3
+ empty_string = PyString_FromStringAndSize("", 0);
+ #else
+ empty_string = PyBytes_FromStringAndSize("", 0);
+ #endif
+ if (!empty_string) goto bad;
+ py_code = PyCode_New(
+ 0, /*int argcount,*/
+ #if PY_MAJOR_VERSION >= 3
+ 0, /*int kwonlyargcount,*/
+ #endif
+ 0, /*int nlocals,*/
+ 0, /*int stacksize,*/
+ 0, /*int flags,*/
+ empty_string, /*PyObject *code,*/
+ __pyx_empty_tuple, /*PyObject *consts,*/
+ __pyx_empty_tuple, /*PyObject *names,*/
+ __pyx_empty_tuple, /*PyObject *varnames,*/
+ __pyx_empty_tuple, /*PyObject *freevars,*/
+ __pyx_empty_tuple, /*PyObject *cellvars,*/
+ py_srcfile, /*PyObject *filename,*/
+ py_funcname, /*PyObject *name,*/
+ __pyx_lineno, /*int firstlineno,*/
+ empty_string /*PyObject *lnotab*/
+ );
+ if (!py_code) goto bad;
+ py_frame = PyFrame_New(
+ PyThreadState_Get(), /*PyThreadState *tstate,*/
+ py_code, /*PyCodeObject *code,*/
+ py_globals, /*PyObject *globals,*/
+ 0 /*PyObject *locals*/
+ );
+ if (!py_frame) goto bad;
+ py_frame->f_lineno = __pyx_lineno;
+ PyTraceBack_Here(py_frame);
+bad:
+ Py_XDECREF(py_srcfile);
+ Py_XDECREF(py_funcname);
+ Py_XDECREF(empty_string);
+ Py_XDECREF(py_code);
+ Py_XDECREF(py_frame);
+}
+
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
+ while (t->p) {
+ #if PY_MAJOR_VERSION < 3
+ if (t->is_unicode && (!t->is_identifier)) {
+ *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
+ } else if (t->intern) {
+ *t->p = PyString_InternFromString(t->s);
+ } else {
+ *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
+ }
+ #else /* Python 3+ has unicode identifiers */
+ if (t->is_identifier || (t->is_unicode && t->intern)) {
+ *t->p = PyUnicode_InternFromString(t->s);
+ } else if (t->is_unicode) {
+ *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
+ } else {
+ *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
+ }
+ #endif
+ if (!*t->p)
+ return -1;
+ ++t;
+ }
+ return 0;
+}
+
+/* Type Conversion Functions */
+
+static INLINE Py_ssize_t __pyx_PyIndex_AsSsize_t(PyObject* b) {
+ Py_ssize_t ival;
+ PyObject* x = PyNumber_Index(b);
+ if (!x) return -1;
+ ival = PyInt_AsSsize_t(x);
+ Py_DECREF(x);
+ return ival;
+}
+
+static INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
+ if (x == Py_True) return 1;
+ else if (x == Py_False) return 0;
+ else return PyObject_IsTrue(x);
+}
+
+static INLINE PY_LONG_LONG __pyx_PyInt_AsLongLong(PyObject* x) {
+ if (PyInt_CheckExact(x)) {
+ return PyInt_AS_LONG(x);
+ }
+ else if (PyLong_CheckExact(x)) {
+ return PyLong_AsLongLong(x);
+ }
+ else {
+ PY_LONG_LONG val;
+ PyObject* tmp = PyNumber_Int(x); if (!tmp) return (PY_LONG_LONG)-1;
+ val = __pyx_PyInt_AsLongLong(tmp);
+ Py_DECREF(tmp);
+ return val;
+ }
+}
+
+static INLINE unsigned PY_LONG_LONG __pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
+ if (PyInt_CheckExact(x)) {
+ long val = PyInt_AS_LONG(x);
+ if (unlikely(val < 0)) {
+ PyErr_SetString(PyExc_TypeError, "Negative assignment to unsigned type.");
+ return (unsigned PY_LONG_LONG)-1;
+ }
+ return val;
+ }
+ else if (PyLong_CheckExact(x)) {
+ return PyLong_AsUnsignedLongLong(x);
+ }
+ else {
+ PY_LONG_LONG val;
+ PyObject* tmp = PyNumber_Int(x); if (!tmp) return (PY_LONG_LONG)-1;
+ val = __pyx_PyInt_AsUnsignedLongLong(tmp);
+ Py_DECREF(tmp);
+ return val;
+ }
+}
+
+
+static INLINE unsigned char __pyx_PyInt_unsigned_char(PyObject* x) {
+ if (sizeof(unsigned char) < sizeof(long)) {
+ long long_val = __pyx_PyInt_AsLong(x);
+ unsigned char val = (unsigned char)long_val;
+ if (unlikely((val != long_val) || (long_val < 0))) {
+ PyErr_SetString(PyExc_OverflowError, "value too large to convert to unsigned char");
+ return (unsigned char)-1;
+ }
+ return val;
+ }
+ else {
+ return __pyx_PyInt_AsLong(x);
+ }
+}
+
+static INLINE unsigned short __pyx_PyInt_unsigned_short(PyObject* x) {
+ if (sizeof(unsigned short) < sizeof(long)) {
+ long long_val = __pyx_PyInt_AsLong(x);
+ unsigned short val = (unsigned short)long_val;
+ if (unlikely((val != long_val) || (long_val < 0))) {
+ PyErr_SetString(PyExc_OverflowError, "value too large to convert to unsigned short");
+ return (unsigned short)-1;
+ }
+ return val;
+ }
+ else {
+ return __pyx_PyInt_AsLong(x);
+ }
+}
+
+static INLINE char __pyx_PyInt_char(PyObject* x) {
+ if (sizeof(char) < sizeof(long)) {
+ long long_val = __pyx_PyInt_AsLong(x);
+ char val = (char)long_val;
+ if (unlikely((val != long_val) )) {
+ PyErr_SetString(PyExc_OverflowError, "value too large to convert to char");
+ return (char)-1;
+ }
+ return val;
+ }
+ else {
+ return __pyx_PyInt_AsLong(x);
+ }
+}
+
+static INLINE short __pyx_PyInt_short(PyObject* x) {
+ if (sizeof(short) < sizeof(long)) {
+ long long_val = __pyx_PyInt_AsLong(x);
+ short val = (short)long_val;
+ if (unlikely((val != long_val) )) {
+ PyErr_SetString(PyExc_OverflowError, "value too large to convert to short");
+ return (short)-1;
+ }
+ return val;
+ }
+ else {
+ return __pyx_PyInt_AsLong(x);
+ }
+}
+
+static INLINE int __pyx_PyInt_int(PyObject* x) {
+ if (sizeof(int) < sizeof(long)) {
+ long long_val = __pyx_PyInt_AsLong(x);
+ int val = (int)long_val;
+ if (unlikely((val != long_val) )) {
+ PyErr_SetString(PyExc_OverflowError, "value too large to convert to int");
+ return (int)-1;
+ }
+ return val;
+ }
+ else {
+ return __pyx_PyInt_AsLong(x);
+ }
+}
+
+static INLINE long __pyx_PyInt_long(PyObject* x) {
+ if (sizeof(long) < sizeof(long)) {
+ long long_val = __pyx_PyInt_AsLong(x);
+ long val = (long)long_val;
+ if (unlikely((val != long_val) )) {
+ PyErr_SetString(PyExc_OverflowError, "value too large to convert to long");
+ return (long)-1;
+ }
+ return val;
+ }
+ else {
+ return __pyx_PyInt_AsLong(x);
+ }
+}
+
+static INLINE signed char __pyx_PyInt_signed_char(PyObject* x) {
+ if (sizeof(signed char) < sizeof(long)) {
+ long long_val = __pyx_PyInt_AsLong(x);
+ signed char val = (signed char)long_val;
+ if (unlikely((val != long_val) )) {
+ PyErr_SetString(PyExc_OverflowError, "value too large to convert to signed char");
+ return (signed char)-1;
+ }
+ return val;
+ }
+ else {
+ return __pyx_PyInt_AsLong(x);
+ }
+}
+
+static INLINE signed short __pyx_PyInt_signed_short(PyObject* x) {
+ if (sizeof(signed short) < sizeof(long)) {
+ long long_val = __pyx_PyInt_AsLong(x);
+ signed short val = (signed short)long_val;
+ if (unlikely((val != long_val) )) {
+ PyErr_SetString(PyExc_OverflowError, "value too large to convert to signed short");
+ return (signed short)-1;
+ }
+ return val;
+ }
+ else {
+ return __pyx_PyInt_AsLong(x);
+ }
+}
+
+static INLINE signed int __pyx_PyInt_signed_int(PyObject* x) {
+ if (sizeof(signed int) < sizeof(long)) {
+ long long_val = __pyx_PyInt_AsLong(x);
+ signed int val = (signed int)long_val;
+ if (unlikely((val != long_val) )) {
+ PyErr_SetString(PyExc_OverflowError, "value too large to convert to signed int");
+ return (signed int)-1;
+ }
+ return val;
+ }
+ else {
+ return __pyx_PyInt_AsLong(x);
+ }
+}
+
+static INLINE signed long __pyx_PyInt_signed_long(PyObject* x) {
+ if (sizeof(signed long) < sizeof(long)) {
+ long long_val = __pyx_PyInt_AsLong(x);
+ signed long val = (signed long)long_val;
+ if (unlikely((val != long_val) )) {
+ PyErr_SetString(PyExc_OverflowError, "value too large to convert to signed long");
+ return (signed long)-1;
+ }
+ return val;
+ }
+ else {
+ return __pyx_PyInt_AsLong(x);
+ }
+}
+
+static INLINE long double __pyx_PyInt_long_double(PyObject* x) {
+ if (sizeof(long double) < sizeof(long)) {
+ long long_val = __pyx_PyInt_AsLong(x);
+ long double val = (long double)long_val;
+ if (unlikely((val != long_val) )) {
+ PyErr_SetString(PyExc_OverflowError, "value too large to convert to long double");
+ return (long double)-1;
+ }
+ return val;
+ }
+ else {
+ return __pyx_PyInt_AsLong(x);
+ }
+}
+
diff --git a/sphinx/pycode/pgen2/parse.pyx b/sphinx/pycode/pgen2/parse.pyx
index 6a11ee6b..537d7393 100644
--- a/sphinx/pycode/pgen2/parse.pyx
+++ b/sphinx/pycode/pgen2/parse.pyx
@@ -1,6 +1,8 @@
# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved.
# Licensed to PSF under a Contributor Agreement.
+# Adapted from parse.py to be compiled with Cython by Georg Brandl.
+
"""Parser engine for the grammar tables generated by pgen.
The grammar table must be loaded first.
@@ -10,7 +12,7 @@ how this parsing engine works.
"""
-from sphinx.pycode.pytree import Node, Leaf
+from sphinx.pycode.nodes import Node, Leaf
DEF NAME = 1