aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Bendersky <eliben@gmail.com>2018-07-25 05:52:21 -0700
committerEli Bendersky <eliben@gmail.com>2018-07-25 05:52:21 -0700
commitccd673eaeff0c84c257b62ebddc23d4a6dfe5b38 (patch)
treee5bd151ba0972e3ea2ced192c00c4822cc99280f
parent92f65b6bd8539dfe7d3b1e8407d74092e03cb11b (diff)
parenta301cbbd55cd3e73c5476f3c1cc3e355dcf30ff0 (diff)
downloadplatform_external_python_pycparser-ccd673eaeff0c84c257b62ebddc23d4a6dfe5b38.tar.gz
platform_external_python_pycparser-ccd673eaeff0c84c257b62ebddc23d4a6dfe5b38.tar.bz2
platform_external_python_pycparser-ccd673eaeff0c84c257b62ebddc23d4a6dfe5b38.zip
Merge branch 'master' of github.com:eliben/pycparser
-rw-r--r--.travis.yml2
-rw-r--r--README.rst6
-rw-r--r--appveyor.yml1
-rw-r--r--examples/c-to-c.py2
-rw-r--r--examples/cdecl.py2
-rw-r--r--examples/dump_ast.py2
-rw-r--r--examples/explore_ast.py2
-rw-r--r--examples/func_calls.py2
-rw-r--r--examples/func_defs.py2
-rw-r--r--examples/rewrite_ast.py2
-rw-r--r--examples/serialize_ast.py2
-rw-r--r--examples/using_cpp_libc.py2
-rw-r--r--examples/using_gcc_E_libc.py2
-rw-r--r--pycparser/__init__.py5
-rw-r--r--pycparser/_ast_gen.py4
-rw-r--r--pycparser/_build_tables.py2
-rw-r--r--pycparser/_c_ast.cfg2
-rw-r--r--pycparser/ast_transforms.py2
-rw-r--r--pycparser/c_ast.py2
-rw-r--r--pycparser/c_generator.py2
-rw-r--r--pycparser/c_lexer.py2
-rw-r--r--pycparser/c_parser.py2
-rw-r--r--pycparser/ply/cpp.py2
-rw-r--r--pycparser/ply/yacc.py2
-rw-r--r--pycparser/plyparser.py2
-rw-r--r--setup.py3
-rw-r--r--tests/test_c_ast.py4
-rwxr-xr-xtests/test_c_parser.py115
-rw-r--r--tests/test_general.py10
-rw-r--r--tox.ini2
-rw-r--r--utils/fake_libc_include/X11/Intrinsic.h4
-rw-r--r--utils/fake_libc_include/X11/_X11_fake_defines.h3
32 files changed, 101 insertions, 98 deletions
diff --git a/.travis.yml b/.travis.yml
index 0fd8463..25c9df6 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,8 +1,6 @@
language: python
python:
- "2.7"
- - "3.2"
- - "3.3"
- "3.4"
- "3.5"
- "3.6"
diff --git a/README.rst b/README.rst
index 4f71a1e..4af8160 100644
--- a/README.rst
+++ b/README.rst
@@ -2,7 +2,7 @@
pycparser v2.18
===============
-:Author: `Eli Bendersky <http://eli.thegreenplace.net>`_
+:Author: `Eli Bendersky <https://eli.thegreenplace.net/>`_
.. contents::
@@ -79,7 +79,7 @@ Installing
Prerequisites
-------------
-* **pycparser** was tested on Python 2.7, 3.3-3.6, on both Linux and
+* **pycparser** was tested on Python 2.7, 3.4-3.6, on both Linux and
Windows. It should work on any later version (in both the 2.x and 3.x lines)
as well.
@@ -158,7 +158,7 @@ the source is a previously defined type. This is essential in order to be able
to parse C correctly.
See `this blog post
-<http://eli.thegreenplace.net/2015/on-parsing-c-type-declarations-and-fake-headers>`_
+<https://eli.thegreenplace.net/2015/on-parsing-c-type-declarations-and-fake-headers>`_
for more details.
Basic usage
diff --git a/appveyor.yml b/appveyor.yml
index 0329728..05c1c7e 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -2,7 +2,6 @@ environment:
matrix:
- PYTHON: "C:\\Python27"
- - PYTHON: "C:\\Python33"
- PYTHON: "C:\\Python34"
- PYTHON: "C:\\Python35"
- PYTHON: "C:\\Python36"
diff --git a/examples/c-to-c.py b/examples/c-to-c.py
index 88e66c5..cc14598 100644
--- a/examples/c-to-c.py
+++ b/examples/c-to-c.py
@@ -4,7 +4,7 @@
# Example of using pycparser.c_generator, serving as a simplistic translator
# from C to AST and back to C.
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#------------------------------------------------------------------------------
from __future__ import print_function
diff --git a/examples/cdecl.py b/examples/cdecl.py
index a510087..351efc2 100644
--- a/examples/cdecl.py
+++ b/examples/cdecl.py
@@ -29,7 +29,7 @@
# explain_c_declaration(c_decl, expand_struct=True)
# => p is a struct P containing {x is a int, y is a int}
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-----------------------------------------------------------------
import copy
diff --git a/examples/dump_ast.py b/examples/dump_ast.py
index 3b6aae4..2cff874 100644
--- a/examples/dump_ast.py
+++ b/examples/dump_ast.py
@@ -3,7 +3,7 @@
#
# Basic example of parsing a file and dumping its parsed AST.
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-----------------------------------------------------------------
from __future__ import print_function
diff --git a/examples/explore_ast.py b/examples/explore_ast.py
index 3b3205e..1f6e0ae 100644
--- a/examples/explore_ast.py
+++ b/examples/explore_ast.py
@@ -9,7 +9,7 @@
# information from the AST.
# It helps to have the pycparser/_c_ast.cfg file in front of you.
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-----------------------------------------------------------------
from __future__ import print_function
diff --git a/examples/func_calls.py b/examples/func_calls.py
index 2433ffd..ec31fe5 100644
--- a/examples/func_calls.py
+++ b/examples/func_calls.py
@@ -4,7 +4,7 @@
# Using pycparser for printing out all the calls of some function
# in a C file.
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-----------------------------------------------------------------
from __future__ import print_function
diff --git a/examples/func_defs.py b/examples/func_defs.py
index ed64596..8fe9889 100644
--- a/examples/func_defs.py
+++ b/examples/func_defs.py
@@ -7,7 +7,7 @@
# This is a simple example of traversing the AST generated by
# pycparser. Call it from the root directory of pycparser.
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-----------------------------------------------------------------
from __future__ import print_function
diff --git a/examples/rewrite_ast.py b/examples/rewrite_ast.py
index eae6539..2c42f99 100644
--- a/examples/rewrite_ast.py
+++ b/examples/rewrite_ast.py
@@ -3,7 +3,7 @@
#
# Tiny example of rewriting a AST node
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-----------------------------------------------------------------
from __future__ import print_function
diff --git a/examples/serialize_ast.py b/examples/serialize_ast.py
index 7a71f9b..e0f8aa3 100644
--- a/examples/serialize_ast.py
+++ b/examples/serialize_ast.py
@@ -4,7 +4,7 @@
# Simple example of serializing AST
#
# Hart Chu [https://github.com/CtheSky]
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-----------------------------------------------------------------
from __future__ import print_function
diff --git a/examples/using_cpp_libc.py b/examples/using_cpp_libc.py
index 0c70c88..e930f5b 100644
--- a/examples/using_cpp_libc.py
+++ b/examples/using_cpp_libc.py
@@ -5,7 +5,7 @@
# the 'real' cpp if you're on Linux/Unix) and "fake" libc includes
# to parse a file that includes standard C headers.
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-----------------------------------------------------------------
import sys
diff --git a/examples/using_gcc_E_libc.py b/examples/using_gcc_E_libc.py
index f0d1628..bba4d3d 100644
--- a/examples/using_gcc_E_libc.py
+++ b/examples/using_gcc_E_libc.py
@@ -5,7 +5,7 @@
# of 'cpp'. The same can be achieved with Clang instead of gcc. If you have
# Clang installed, simply replace 'gcc' with 'clang' here.
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-------------------------------------------------------------------------------
import sys
diff --git a/pycparser/__init__.py b/pycparser/__init__.py
index b7228d7..e57d5d8 100644
--- a/pycparser/__init__.py
+++ b/pycparser/__init__.py
@@ -4,12 +4,13 @@
# This package file exports some convenience functions for
# interacting with pycparser
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-----------------------------------------------------------------
__all__ = ['c_lexer', 'c_parser', 'c_ast']
__version__ = '2.18'
+import io
from subprocess import check_output
from .c_parser import CParser
@@ -81,7 +82,7 @@ def parse_file(filename, use_cpp=False, cpp_path='cpp', cpp_args='',
if use_cpp:
text = preprocess_file(filename, cpp_path, cpp_args)
else:
- with open(filename, 'rU') as f:
+ with io.open(filename) as f:
text = f.read()
if parser is None:
diff --git a/pycparser/_ast_gen.py b/pycparser/_ast_gen.py
index 4dab963..5ec2d3d 100644
--- a/pycparser/_ast_gen.py
+++ b/pycparser/_ast_gen.py
@@ -7,7 +7,7 @@
# The design of this module was inspired by astgen.py from the
# Python 2.5 code-base.
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-----------------------------------------------------------------
import pprint
@@ -180,7 +180,7 @@ r'''#-----------------------------------------------------------------
#
# AST Node classes.
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-----------------------------------------------------------------
diff --git a/pycparser/_build_tables.py b/pycparser/_build_tables.py
index a8a9dcf..94a3891 100644
--- a/pycparser/_build_tables.py
+++ b/pycparser/_build_tables.py
@@ -6,7 +6,7 @@
# Also generates AST code from the configuration file.
# Should be called from the pycparser directory.
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-----------------------------------------------------------------
diff --git a/pycparser/_c_ast.cfg b/pycparser/_c_ast.cfg
index 7dfcd0c..b93d50b 100644
--- a/pycparser/_c_ast.cfg
+++ b/pycparser/_c_ast.cfg
@@ -9,7 +9,7 @@
# <name>** - a sequence of child nodes
# <name> - an attribute
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-----------------------------------------------------------------
diff --git a/pycparser/ast_transforms.py b/pycparser/ast_transforms.py
index 623821d..ba50966 100644
--- a/pycparser/ast_transforms.py
+++ b/pycparser/ast_transforms.py
@@ -3,7 +3,7 @@
#
# Some utilities used by the parser to create a friendlier AST.
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#------------------------------------------------------------------------------
diff --git a/pycparser/c_ast.py b/pycparser/c_ast.py
index 786e83e..b7bbbee 100644
--- a/pycparser/c_ast.py
+++ b/pycparser/c_ast.py
@@ -11,7 +11,7 @@
#
# AST Node classes.
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-----------------------------------------------------------------
diff --git a/pycparser/c_generator.py b/pycparser/c_generator.py
index 8f2e69a..f789742 100644
--- a/pycparser/c_generator.py
+++ b/pycparser/c_generator.py
@@ -3,7 +3,7 @@
#
# C code generator from pycparser AST nodes.
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#------------------------------------------------------------------------------
from . import c_ast
diff --git a/pycparser/c_lexer.py b/pycparser/c_lexer.py
index 944cbb8..de8445e 100644
--- a/pycparser/c_lexer.py
+++ b/pycparser/c_lexer.py
@@ -3,7 +3,7 @@
#
# CLexer class: lexer for the C language
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#------------------------------------------------------------------------------
import re
diff --git a/pycparser/c_parser.py b/pycparser/c_parser.py
index 0ce41bd..5545d3c 100644
--- a/pycparser/c_parser.py
+++ b/pycparser/c_parser.py
@@ -3,7 +3,7 @@
#
# CParser class: Parser and AST builder for the C language
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#------------------------------------------------------------------------------
import re
diff --git a/pycparser/ply/cpp.py b/pycparser/ply/cpp.py
index 8ff0be1..86273ea 100644
--- a/pycparser/ply/cpp.py
+++ b/pycparser/ply/cpp.py
@@ -7,8 +7,6 @@
#
# This module implements an ANSI-C style lexical preprocessor for PLY.
# -----------------------------------------------------------------------------
-from __future__ import generators
-
import sys
# Some Python 3 compatibility shims
diff --git a/pycparser/ply/yacc.py b/pycparser/ply/yacc.py
index 03bd86e..20b4f28 100644
--- a/pycparser/ply/yacc.py
+++ b/pycparser/ply/yacc.py
@@ -309,7 +309,7 @@ class LRParser:
# certain kinds of advanced parsing situations where the lexer and parser interact with
# each other or change states (i.e., manipulation of scope, lexer states, etc.).
#
- # See: http://www.gnu.org/software/bison/manual/html_node/Default-Reductions.html#Default-Reductions
+ # See: https://www.gnu.org/software/bison/manual/html_node/Default-Reductions.html#Default-Reductions
def set_defaulted_states(self):
self.defaulted_states = {}
for state, actions in self.action.items():
diff --git a/pycparser/plyparser.py b/pycparser/plyparser.py
index b6640fa..6222c0e 100644
--- a/pycparser/plyparser.py
+++ b/pycparser/plyparser.py
@@ -4,7 +4,7 @@
# PLYParser class and other utilites for simplifying programming
# parsers with PLY
#
-# Eli Bendersky [http://eli.thegreenplace.net]
+# Eli Bendersky [https://eli.thegreenplace.net/]
# License: BSD
#-----------------------------------------------------------------
diff --git a/setup.py b/setup.py
index 9189712..0fcc191 100644
--- a/setup.py
+++ b/setup.py
@@ -55,12 +55,11 @@ setup(
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.2',
- 'Programming Language :: Python :: 3.3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
],
+ python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*",
packages=['pycparser', 'pycparser.ply'],
package_data={'pycparser': ['*.cfg']},
cmdclass={'install': install, 'sdist': sdist},
diff --git a/tests/test_c_ast.py b/tests/test_c_ast.py
index 8e95d55..6ea3ceb 100644
--- a/tests/test_c_ast.py
+++ b/tests/test_c_ast.py
@@ -16,11 +16,11 @@ class Test_c_ast(unittest.TestCase):
left=c_ast.Constant(type='int', value='6'),
right=c_ast.ID(name='joe'))
- self.failUnless(isinstance(b1.left, c_ast.Constant))
+ self.assertIsInstance(b1.left, c_ast.Constant)
self.assertEqual(b1.left.type, 'int')
self.assertEqual(b1.left.value, '6')
- self.failUnless(isinstance(b1.right, c_ast.ID))
+ self.assertIsInstance(b1.right, c_ast.ID)
self.assertEqual(b1.right.name, 'joe')
def test_weakref_works_on_nodes(self):
diff --git a/tests/test_c_parser.py b/tests/test_c_parser.py
index d461cb1..90df6c5 100755
--- a/tests/test_c_parser.py
+++ b/tests/test_c_parser.py
@@ -3,6 +3,7 @@
import pprint
import re
import os, sys
+import io
import unittest
sys.path[0:0] = ['.', '..']
@@ -118,18 +119,18 @@ class TestCParser_fundamentals(TestCParser_base):
def test_FileAST(self):
t = self.parse('int a; char c;')
- self.assertTrue(isinstance(t, FileAST))
+ self.assertIsInstance(t, FileAST)
self.assertEqual(len(t.ext), 2)
# empty file
t2 = self.parse('')
- self.assertTrue(isinstance(t2, FileAST))
+ self.assertIsInstance(t2, FileAST)
self.assertEqual(len(t2.ext), 0)
def test_empty_toplevel_decl(self):
code = 'int foo;;'
t = self.parse(code)
- self.assertTrue(isinstance(t, FileAST))
+ self.assertIsInstance(t, FileAST)
self.assertEqual(len(t.ext), 1)
self.assertEqual(self.get_decl(code),
['Decl', 'foo',
@@ -458,7 +459,7 @@ class TestCParser_fundamentals(TestCParser_base):
d2 = "static char * const p;"
assert_qs(d2, 0, [], ['static'])
pdecl = self.parse(d2).ext[0].type
- self.assertTrue(isinstance(pdecl, PtrDecl))
+ self.assertIsInstance(pdecl, PtrDecl)
self.assertEqual(pdecl.quals, ['const'])
def test_sizeof(self):
@@ -476,9 +477,9 @@ class TestCParser_fundamentals(TestCParser_base):
compound = self.parse(e).ext[0].body
s1 = compound.block_items[0].init
- self.assertTrue(isinstance(s1, UnaryOp))
+ self.assertIsInstance(s1, UnaryOp)
self.assertEqual(s1.op, 'sizeof')
- self.assertTrue(isinstance(s1.expr, ID))
+ self.assertIsInstance(s1.expr, ID)
self.assertEqual(s1.expr.name, 'k')
s2 = compound.block_items[1].init
@@ -504,15 +505,15 @@ class TestCParser_fundamentals(TestCParser_base):
"""
compound = self.parse(e).ext[0].body
s1 = compound.block_items[0].init
- self.assertTrue(isinstance(s1, FuncCall))
- self.assertTrue(isinstance(s1.name, ID))
+ self.assertIsInstance(s1, FuncCall)
+ self.assertIsInstance(s1.name, ID)
self.assertEqual(s1.name.name, 'offsetof')
- self.assertTrue(isinstance(s1.args.exprs[0], Typename))
- self.assertTrue(isinstance(s1.args.exprs[1], ID))
+ self.assertIsInstance(s1.args.exprs[0], Typename)
+ self.assertIsInstance(s1.args.exprs[1], ID)
s3 = compound.block_items[2].init
- self.assertTrue(isinstance(s3.args.exprs[1], StructRef))
+ self.assertIsInstance(s3.args.exprs[1], StructRef)
s4 = compound.block_items[3].init
- self.assertTrue(isinstance(s4.args.exprs[1], ArrayRef))
+ self.assertIsInstance(s4.args.exprs[1], ArrayRef)
def test_compound_statement(self):
e = """
@@ -520,7 +521,7 @@ class TestCParser_fundamentals(TestCParser_base):
}
"""
compound = self.parse(e).ext[0].body
- self.assertTrue(isinstance(compound, Compound))
+ self.assertIsInstance(compound, Compound)
self.assert_coord(compound, 2)
# The C99 compound literal feature
@@ -550,21 +551,21 @@ class TestCParser_fundamentals(TestCParser_base):
e1 = "enum mycolor op;"
e1_type = self.parse(e1).ext[0].type.type
- self.assertTrue(isinstance(e1_type, Enum))
+ self.assertIsInstance(e1_type, Enum)
self.assertEqual(e1_type.name, 'mycolor')
self.assertEqual(e1_type.values, None)
e2 = "enum mysize {large=20, small, medium} shoes;"
e2_type = self.parse(e2).ext[0].type.type
- self.assertTrue(isinstance(e2_type, Enum))
+ self.assertIsInstance(e2_type, Enum)
self.assertEqual(e2_type.name, 'mysize')
e2_elist = e2_type.values
- self.assertTrue(isinstance(e2_elist, EnumeratorList))
+ self.assertIsInstance(e2_elist, EnumeratorList)
for e2_eval in e2_elist.enumerators:
- self.assertTrue(isinstance(e2_eval, Enumerator))
+ self.assertIsInstance(e2_eval, Enumerator)
self.assertEqual(e2_elist.enumerators[0].name, 'large')
self.assertEqual(e2_elist.enumerators[0].value.value, '20')
@@ -582,12 +583,12 @@ class TestCParser_fundamentals(TestCParser_base):
"""
e3_type = self.parse(e3).ext[0].type.type
- self.assertTrue(isinstance(e3_type, Enum))
+ self.assertIsInstance(e3_type, Enum)
e3_elist = e3_type.values
- self.assertTrue(isinstance(e3_elist, EnumeratorList))
+ self.assertIsInstance(e3_elist, EnumeratorList)
for e3_eval in e3_elist.enumerators:
- self.assertTrue(isinstance(e3_eval, Enumerator))
+ self.assertIsInstance(e3_eval, Enumerator)
self.assertEqual(e3_elist.enumerators[0].name, 'red')
self.assertEqual(e3_elist.enumerators[0].value, None)
@@ -1087,7 +1088,7 @@ class TestCParser_fundamentals(TestCParser_base):
s3_type = self.parse(s3).ext[1].type
- self.assertTrue(isinstance(s3_type, Enum))
+ self.assertIsInstance(s3_type, Enum)
self.assertEqual(s3_type.name, 'mytag')
def test_multi_decls(self):
@@ -1373,8 +1374,8 @@ class TestCParser_fundamentals(TestCParser_base):
int var2[*];
}
''')
- self.assertTrue(isinstance(ps2.ext[0].body.block_items[1].type.dim, Assignment))
- self.assertTrue(isinstance(ps2.ext[0].body.block_items[2].type.dim, ID))
+ self.assertIsInstance(ps2.ext[0].body.block_items[1].type.dim, Assignment)
+ self.assertIsInstance(ps2.ext[0].body.block_items[2].type.dim, ID)
def test_pragma(self):
s1 = r'''
@@ -1389,19 +1390,19 @@ class TestCParser_fundamentals(TestCParser_base):
} s;
'''
s1_ast = self.parse(s1)
- self.assertTrue(isinstance(s1_ast.ext[0], Pragma))
+ self.assertIsInstance(s1_ast.ext[0], Pragma)
self.assertEqual(s1_ast.ext[0].string, 'bar')
self.assertEqual(s1_ast.ext[0].coord.line, 2)
- self.assertTrue(isinstance(s1_ast.ext[1].body.block_items[0], Pragma))
+ self.assertIsInstance(s1_ast.ext[1].body.block_items[0], Pragma)
self.assertEqual(s1_ast.ext[1].body.block_items[0].string, 'foo')
self.assertEqual(s1_ast.ext[1].body.block_items[0].coord.line, 4)
- self.assertTrue(isinstance(s1_ast.ext[1].body.block_items[2], Pragma))
+ self.assertIsInstance(s1_ast.ext[1].body.block_items[2], Pragma)
self.assertEqual(s1_ast.ext[1].body.block_items[2].string, '')
self.assertEqual(s1_ast.ext[1].body.block_items[2].coord.line, 6)
- self.assertTrue(isinstance(s1_ast.ext[2].type.type.decls[0], Pragma))
+ self.assertIsInstance(s1_ast.ext[2].type.type.decls[0], Pragma)
self.assertEqual(s1_ast.ext[2].type.type.decls[0].string, 'baz')
self.assertEqual(s1_ast.ext[2].type.type.decls[0].coord.line, 9)
@@ -1432,26 +1433,26 @@ class TestCParser_fundamentals(TestCParser_base):
}
'''
s1_ast = self.parse(s1)
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[1], For))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[1].stmt, Compound))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[1].stmt.block_items[0], Pragma))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[1].stmt.block_items[1], Assignment))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[2], While))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[2].stmt, Compound))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[2].stmt.block_items[0], Pragma))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[2].stmt.block_items[1], Assignment))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[3], Label))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[3].stmt, Compound))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[3].stmt.block_items[0], Pragma))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[3].stmt.block_items[1], Assignment))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[4], If))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[4].iftrue, Compound))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[4].iftrue.block_items[0], Pragma))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[4].iftrue.block_items[1], Assignment))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[5], Switch))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[5].stmt.stmts[0], Compound))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[5].stmt.stmts[0].block_items[0], Pragma))
- self.assertTrue(isinstance(s1_ast.ext[0].body.block_items[5].stmt.stmts[0].block_items[1], Assignment))
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[1], For)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[1].stmt, Compound)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[1].stmt.block_items[0], Pragma)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[1].stmt.block_items[1], Assignment)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[2], While)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[2].stmt, Compound)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[2].stmt.block_items[0], Pragma)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[2].stmt.block_items[1], Assignment)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[3], Label)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[3].stmt, Compound)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[3].stmt.block_items[0], Pragma)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[3].stmt.block_items[1], Assignment)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[4], If)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[4].iftrue, Compound)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[4].iftrue.block_items[0], Pragma)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[4].iftrue.block_items[1], Assignment)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[5], Switch)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[5].stmt.stmts[0], Compound)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[5].stmt.stmts[0].block_items[0], Pragma)
+ self.assertIsInstance(s1_ast.ext[0].body.block_items[5].stmt.stmts[0].block_items[1], Assignment)
class TestCParser_whole_code(TestCParser_base):
@@ -1667,12 +1668,12 @@ class TestCParser_whole_code(TestCParser_base):
def test_switch_statement(self):
def assert_case_node(node, const_value):
- self.assertTrue(isinstance(node, Case))
- self.assertTrue(isinstance(node.expr, Constant))
+ self.assertIsInstance(node, Case)
+ self.assertIsInstance(node.expr, Constant)
self.assertEqual(node.expr.value, const_value)
def assert_default_node(node):
- self.assertTrue(isinstance(node, Default))
+ self.assertIsInstance(node, Default)
s1 = r'''
int foo(void) {
@@ -1780,7 +1781,7 @@ class TestCParser_whole_code(TestCParser_base):
testdir = os.path.dirname(__file__)
name = os.path.join(testdir, 'c_files', name)
assert os.path.exists(name)
- return open(name, 'rU')
+ return io.open(name)
def test_whole_file(self):
# See how pycparser handles a whole, real C file.
@@ -1810,16 +1811,16 @@ class TestCParser_whole_code(TestCParser_base):
code = f.read()
p = self.parse(code)
- self.assertTrue(isinstance(p.ext[0], Typedef))
+ self.assertIsInstance(p.ext[0], Typedef)
self.assertEqual(p.ext[0].coord.line, 213)
self.assertEqual(p.ext[0].coord.file, r"D:\eli\cpp_stuff\libc_include/stddef.h")
- self.assertTrue(isinstance(p.ext[-1], FuncDef))
+ self.assertIsInstance(p.ext[-1], FuncDef)
self.assertEqual(p.ext[-1].coord.line, 15)
self.assertEqual(p.ext[-1].coord.file, "example_c_file.c")
- self.assertTrue(isinstance(p.ext[-8], Typedef))
- self.assertTrue(isinstance(p.ext[-8].type, TypeDecl))
+ self.assertIsInstance(p.ext[-8], Typedef)
+ self.assertIsInstance(p.ext[-8].type, TypeDecl)
self.assertEqual(p.ext[-8].name, 'cookie_io_functions_t')
@@ -1849,7 +1850,7 @@ class TestCParser_typenames(TestCParser_base):
unsigned TT;
}
'''
- self.assertTrue(isinstance(self.parse(s2), FileAST))
+ self.assertIsInstance(self.parse(s2), FileAST)
def test_ambiguous_parameters(self):
# From ISO/IEC 9899:TC2, 6.7.5.3.11:
@@ -2081,7 +2082,7 @@ class TestCParser_typenames(TestCParser_base):
TT x = 10;
}
'''
- self.assertTrue(isinstance(self.parse(s1), FileAST))
+ self.assertIsInstance(self.parse(s1), FileAST)
def test_samescope_reuse_name(self):
# a typedef name cannot be reused as an object name in the same scope
diff --git a/tests/test_general.py b/tests/test_general.py
index e5e9d69..18e388c 100644
--- a/tests/test_general.py
+++ b/tests/test_general.py
@@ -23,7 +23,7 @@ class TestParsing(unittest.TestCase):
def test_without_cpp(self):
ast = parse_file(self._find_file('example_c_file.c'))
- self.assertTrue(isinstance(ast, c_ast.FileAST))
+ self.assertIsInstance(ast, c_ast.FileAST)
@unittest.skipUnless(platform.system() == 'Linux',
'cpp only works on Linux')
@@ -33,7 +33,7 @@ class TestParsing(unittest.TestCase):
ast = parse_file(memmgr_path, use_cpp=True,
cpp_path=CPPPATH,
cpp_args='-I%s' % c_files_path)
- self.assertTrue(isinstance(ast, c_ast.FileAST))
+ self.assertIsInstance(ast, c_ast.FileAST)
fake_libc = os.path.join(c_files_path, '..', '..',
'utils', 'fake_libc_include')
@@ -41,7 +41,7 @@ class TestParsing(unittest.TestCase):
cpp_path=CPPPATH,
cpp_args=[r'-I%s' % fake_libc])
- self.assertTrue(isinstance(ast2, c_ast.FileAST))
+ self.assertIsInstance(ast2, c_ast.FileAST)
@unittest.skipUnless(platform.system() == 'Linux',
'cpp only works on Linux')
@@ -53,14 +53,14 @@ class TestParsing(unittest.TestCase):
c_files_path = os.path.join('tests', 'c_files')
ast = parse_file(self._find_file('simplemain.c'), use_cpp=True,
cpp_path=CPPPATH, cpp_args='-I%s' % c_files_path)
- self.assertTrue(isinstance(ast, c_ast.FileAST))
+ self.assertIsInstance(ast, c_ast.FileAST)
@unittest.skipUnless(platform.system() == 'Linux',
'cpp only works on Linux')
def test_no_real_content_after_cpp(self):
ast = parse_file(self._find_file('empty.h'), use_cpp=True,
cpp_path=CPPPATH)
- self.assertTrue(isinstance(ast, c_ast.FileAST))
+ self.assertIsInstance(ast, c_ast.FileAST)
if __name__ == '__main__':
diff --git a/tox.ini b/tox.ini
index 3f45f1d..02bd1e2 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
[tox]
-envlist = py27,py34,py35
+envlist = py27,py34,py35,py36
[testenv]
commands =
diff --git a/utils/fake_libc_include/X11/Intrinsic.h b/utils/fake_libc_include/X11/Intrinsic.h
new file mode 100644
index 0000000..ab7ebb3
--- /dev/null
+++ b/utils/fake_libc_include/X11/Intrinsic.h
@@ -0,0 +1,4 @@
+#include "_fake_defines.h"
+#include "_fake_typedefs.h"
+#include "_X11_fake_defines.h"
+#include "_X11_fake_typedefs.h"
diff --git a/utils/fake_libc_include/X11/_X11_fake_defines.h b/utils/fake_libc_include/X11/_X11_fake_defines.h
index 1de6f62..c88774b 100644
--- a/utils/fake_libc_include/X11/_X11_fake_defines.h
+++ b/utils/fake_libc_include/X11/_X11_fake_defines.h
@@ -10,4 +10,7 @@
#define _XFUNCPROTOEND
#define _Xconst const
+#define _X_RESTRICT_KYWD
+#define Cardinal unsigned int
+#define Boolean int
#endif