summaryrefslogtreecommitdiff
path: root/dev-python/pycparser/files/pycparser-2.18-OO.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dev-python/pycparser/files/pycparser-2.18-OO.patch')
-rw-r--r--dev-python/pycparser/files/pycparser-2.18-OO.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/dev-python/pycparser/files/pycparser-2.18-OO.patch b/dev-python/pycparser/files/pycparser-2.18-OO.patch
new file mode 100644
index 000000000000..ae42b2b9bd1d
--- /dev/null
+++ b/dev-python/pycparser/files/pycparser-2.18-OO.patch
@@ -0,0 +1,56 @@
+From 673accec311a027c22b0718d753f8da922915305 Mon Sep 17 00:00:00 2001
+From: Eli Bendersky <eliben@gmail.com>
+Date: Thu, 13 Jul 2017 20:25:29 -0700
+Subject: [PATCH] Address an import of pycparser in -OO mode.
+
+In this mode there are no docstrings; we don't want an instantiation of CParser
+to fail, though it won't actually work correctly if used.
+
+See #197 and #198
+---
+ pycparser/plyparser.py | 21 +++++++++++++++++++--
+ 1 file changed, 19 insertions(+), 2 deletions(-)
+
+diff --git a/pycparser/plyparser.py b/pycparser/plyparser.py
+index af91922..b6640fa 100644
+--- a/pycparser/plyparser.py
++++ b/pycparser/plyparser.py
+@@ -8,6 +8,7 @@
+ # License: BSD
+ #-----------------------------------------------------------------
+
++import warnings
+
+ class Coord(object):
+ """ Coordinates of a syntactic element. Consists of:
+@@ -87,12 +88,28 @@ def template(cls):
+
+ See `parameterized` for more information on parameterized rules.
+ """
++ issued_nodoc_warning = False
+ for attr_name in dir(cls):
+ if attr_name.startswith('p_'):
+ method = getattr(cls, attr_name)
+ if hasattr(method, '_params'):
+- delattr(cls, attr_name) # Remove template method
+- _create_param_rules(cls, method)
++ # Remove the template method
++ delattr(cls, attr_name)
++ # Create parameterized rules from this method; only run this if
++ # the method has a docstring. This is to address an issue when
++ # pycparser's users are installed in -OO mode which strips
++ # docstrings away.
++ # See: https://github.com/eliben/pycparser/pull/198/ and
++ # https://github.com/eliben/pycparser/issues/197
++ # for discussion.
++ if method.__doc__ is not None:
++ _create_param_rules(cls, method)
++ elif not issued_nodoc_warning:
++ warnings.warn(
++ 'parsing methods must have __doc__ for pycparser to work properly',
++ RuntimeWarning,
++ stacklevel=2)
++ issued_nodoc_warning = True
+ return cls
+
+