+ Version 2.18 (04.07.2017)

  - PR #161 & #184: Update bundled PLY version to 3.10
  - PR #158: Add support for the __int128 type.
  - PR #169: Handle more tricky TYPEID in declarators.
  - PR #178: Add columns to the coord of each node

+ Version 2.17 (29.10.2016)

  - Again functionality identical to 2.15 and 2.16; the difference is that the
    tarball now contains Python files with properly set permissions.

+ Version 2.16 (18.10.2016)

  - Functionally identical to 2.15, but fixes a packaging problem that caused
    failed installation (_build_tables wasn't rerun in the pycparser/ dir).

+ Version 2.15 (18.10.2016)

  - PR #121: Update bundled PLY version to 3.8
  - Issue #117: Fix parsing of extra semi-colons inside structure declarations.
  - PR #109: Update c_generator to add {} around nested named initializers.
  - PR #101: Added support for parsing pragmas into the AST.
  - Additional fake headers and typedefs, manifest fixes (#97, #106, #111).
  - Testing with Python 3.5 instead of 3.3 now (3.4 and 3.5 are the 3.x versions
    tested).
  - PR #145: More complete support for offsetof()
  - Issue #116: Fix line numbers recorded for empty and compound statements.
  - Minor performance improvement to the invalid string literal regex.

+ Version 2.14 (09.06.2015)

  - Added CParser parameter to specify output directory for generated parsing
    tables (#84).
  - Removed lcc's cpp and its license from the distribution. Using lcc's cpp
    is no longer recommended, now that Clang has binary builds available for
    Windows.

+ Version 2.13 (12.05.2015)

  - Added support for offsetof() the way gcc implements it (special builtin
    that takes a type as an argument).
  - Added faked va_* macros (these are expected to come from stdarg.h)
  - Added a bunch more fake headers and typedefs to support parsing C projects
    like Git and SQLite without modifications to pycparser.
  - Added support for empty initializer lists (#79).

+ Version 2.12 (21.04.2015)

  - This is a fix release for 2.11; the memory optimization with __slots__ on
    Coord and AST nodes didn't take weakrefs into account, which broke cffi and
    its many dependents (issue #76). Fixed by adding __weakref__ to __slots__.

+ Version 2.11 (21.04.2015)

  - Add support for C99 6.5.3.7 p7 - qualifiers within array dimensions in
    function declarations. Started with issue #21 (reported with initial patch
    by Robin Martinjak).
  - Issue #27: bug in handling of unified wstring literals.
  - Issue #28: fix coord reporting for 'for' loops.
  - Added ``examples/using_gcc_E_libc.py`` to demonstrate how ``gcc -E`` can
    be used instead of ``cpp`` for preprocessing.
  - Pull request #64: support keywords like const, volatile, restrict and static
    in dimensions in array declarations.
  - Reduce memory usage of AST nodes (issue #72).
  - Parsing order of nested pointer declarations fixed (issue #68).

+ Version 2.10 (03.08.2013)

  - A number of improvements in the handling of typedef-name ambiguities,
    contributed by Sye van der Veen in GitHub issue #1:

    * Allow shadowing of types by identifiers in inner scopes.
    * Allow struct field names to reside in a separate namespace and have
      the same names as types.
    * Allow duplicate typedefs in some cases to mimic real compiler behavior.

  - c_generator error for ExprList in expression context.
  - Assume default int type for functions whose argument or return types were
    not specified.
  - Relax the lexer a bit w.r.t. some integer suffixes and $ in identifier names
    (which is supported by some other compilers).

+ Version 2.09.1 (29.12.2012)

  - No actual functionality changes.
  - The source distribution was re-packaged to contain the pre-generated Lex and
    Yacc tables of PLY.

+ Version 2.09 (27.12.2012)

  - The pycparser project has moved to Bitbucket. For this version, issue
    numbers still refer to the old Googlecode project, unless stated otherwise.
    Starting with the next version all issue numbers will refer to the new
    Bitbucket project.
  - pycparser now carries its PLY dependency along. The pycparser/ply directory
    contains the source of PLY for the currently supported version. This makes
    distribution and testing easier.
  - Issue #79: fix generation of new switch/case AST nodes.
  - Issue #83: fix parsing and C generation to distinguish between initializer
    lists in declarations and initializing variables with parenthesized
    comma-separated expressions.
  - Issue #84: fix C generation for some statements.
  - Issues #86 and #87: improve location reporting for parse errors.
  - Issue #89: fix C generation for K&R-style function definitions.

+ Version 2.08 (10.08.2012)

  - Issue 73: initial support for #pragma directives. Consume them without
    errors and ignore (no tokens are returned). Line numbers are preserved.
  - Issue 68: more correct handling of source files without any actual content.
  - Issue 69: running all tests will now set appropriate return code.
  - Better error reporting in case where multiple type specifiers are provided.
    Also fixes Issue 60.
  - Issue 63: line endings cleanup for consistent LF ending.
  - Issues 64 & 65: added some more headers and typedefs to fake includes.
  - Refactoring the cpp invocation in parse_file into a separate function, which
    can also be used as a utility.
  - Issue 74: some Windows include paths were handled incorrectly.

+ Version 2.07 (16.06.2012)

  - Issue 54: added an optional parser argument to parse_file
  - Issue 59: added some more fake headers for C99
  - Issue 62: correct coord for Ellipsis nodes
  - Issue 57: support for C99 hexadecimal float constants
  - Made running tests that call on 'cpp' a bit more robust.

+ Version 2.06 (04.02.2012)

  - Issue 48: gracefully handle parsing of empty files
  - Issues 49 & 50: handle more escaped chars in paths to #line - "..\..\test.h".
  - Support for C99 _Complex type.
  - CGenerator moves from examples/ to pycparser/ as a first-class citizen, and
    added some fixes to it. examples/c-to-c.py still stays as a convenience
    wrapper.
  - Fix problem with parsing a file in which the first statement is just a
    semicolon.
  - Improved the AST created for switch statements, making it closer to the
    semantic meaning than to the grammar.

+ Version 2.05 (16.10.2011)

  - Added support for the C99 ``_Bool`` type and ``stdbool.h`` header file
  - Expanded ``examples/explore_ast.py`` with more details on working with the 
    AST
  - Relaxed the rules on parsing unnamed struct members (helps parse ``windows.h``)
  - Bug fixes:
  
    * Fixed spacing issue for some type declarations
    * Issue 47: display empty statements (lone ';') correctly after parsing

+ Version 2.04 (21.05.2011)

  - License changed from LGPL to BSD
  - Bug fixes:
  
    * Issue 31: constraining the scope of typedef definitions
    * Issues 33, 35: fixes for the c-to-c.py example
  
  - Added C99 integer types to fake headers
  - Added unit tests for the c-to-c.py example

+ Version 2.03 (06.03.2011)

  - Bug fixes:
  
    * Issue 17: empty file-level declarations
    * Issue 18: empty statements and declarations in functions
    * Issue 19: anonymous structs & union fields
    * Issue 23: fix coordinates of Cast nodes
  
  - New example added (``examples/c-to-c.py``) for translating ASTs generated
    by ``pycparser`` back into C code.
  - ``pycparser`` is now on PyPI (Python Package Index)
  - Created `FAQ <http://code.google.com/p/pycparser/wiki/FAQ>`_ on
    the ``pycparser`` project page 
  - Removed support for Python 2.5. ``pycparser`` supports Python 2
    from 2.6 and on, and Python 3.

+ Version 2.02 (10.12.2010)

  * The name of a ``NamedInitializer`` node was turned into a sequence of nodes 
    instead of an attribute, to make it discoverable by the AST node visitor.  
  * Documentation updates

+ Version 2.01 (04.12.2010)

  * Removed dependency on YAML. Parsing of the AST node configuration file
    is done with a simple parser.
  * Fixed issue 12: installation problems

+ Version 2.00 (31.10.2010)

  * Support for C99 (read
    `this wiki page <http://code.google.com/p/pycparser/wiki/C99support>`_
    for more information).

+ Version 1.08 (09.10.2010)

  * Bug fixes:

    + Correct handling of ``do{} ... while`` statements in some cases
    + Issues 6 & 7: Concatenation of string literals
    + Issue 9: Support for unnamed bitfields in structs

+ Version 1.07 (18.05.2010)

  * Python 3.1 compatibility: ``pycparser`` was modified to run
    on Python 3.1 as well as 2.6

+ Version 1.06 (10.04.2010)

  * Bug fixes: 

    + coord not propagated to FuncCall nodes
    + lexing of the ^= token (XOREQUALS)
    + parsing failed on some abstract declarator rules

  * Linux compatibility: fixed end-of-line and ``cpp`` path issues to allow
    all tests and examples run on Linux

+ Version 1.05 (16.10.2009)

  * Fixed the ``parse_file`` auxiliary function to handle multiple arguments to
    ``cpp`` correctly

+ Version 1.04 (22.05.2009)

  * Added the ``fake_libc_include`` directory to allow parsing of C code that
    uses standard C library include files without dependency on a real C
    library.
  * Tested with Python 2.6 and PLY 3.2

+ Version 1.03 (31.01.2009)

  * Accept enumeration lists with a comma after the last item (C99 feature).

+ Version 1.02 (16.01.2009)

  * Fixed problem of parsing struct/enum/union names that were named similarly
    to previously defined ``typedef`` types. 

+ Version 1.01 (09.01.2009)

  * Fixed subprocess invocation in the helper function parse_file - now
    it's more portable

+ Version 1.0 (15.11.2008)

  * Initial release
  * Support for ANSI C89
