Commits

eli.bendersky  committed af7914c

documentation & updates for 1.08

  • Participants
  • Parent commits ab6fb5b
  • Tags 1.x_final

Comments (0)

Files changed (7)

 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <meta name="generator" content="Docutils 0.6: http://docutils.sourceforge.net/" />
-<title>pycparser v1.07</title>
+<title>pycparser v1.08</title>
 <meta name="author" content="Eli Bendersky" />
 <style type="text/css">
 
 </style>
 </head>
 <body>
-<div class="document" id="pycparser-v1-07">
-<h1 class="title">pycparser v1.07</h1>
+<div class="document" id="pycparser-v1-08">
+<h1 class="title">pycparser v1.08</h1>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
 </table>
 <div class="contents topic" id="contents">
 <p class="topic-title first">Contents</p>
-<ul class="simple">
-<li><a class="reference internal" href="#introduction" id="id1">Introduction</a><ul>
-<li><a class="reference internal" href="#what-is-pycparser" id="id2">What is pycparser?</a></li>
-<li><a class="reference internal" href="#what-is-it-good-for" id="id3">What is it good for?</a></li>
-<li><a class="reference internal" href="#which-version-of-c-does-pycparser-support" id="id4">Which version of C does pycparser support?</a></li>
-<li><a class="reference internal" href="#what-grammar-does-pycparser-follow" id="id5">What grammar does pycparser follow?</a></li>
-<li><a class="reference internal" href="#what-is-an-ast" id="id6">What is an AST?</a></li>
-<li><a class="reference internal" href="#how-is-pycparser-licensed" id="id7">How is pycparser licensed?</a></li>
-<li><a class="reference internal" href="#contact-details" id="id8">Contact details</a></li>
+<ul class="auto-toc simple">
+<li><a class="reference internal" href="#introduction" id="id1">1&nbsp;&nbsp;&nbsp;Introduction</a><ul class="auto-toc">
+<li><a class="reference internal" href="#what-is-pycparser" id="id2">1.1&nbsp;&nbsp;&nbsp;What is pycparser?</a></li>
+<li><a class="reference internal" href="#what-is-it-good-for" id="id3">1.2&nbsp;&nbsp;&nbsp;What is it good for?</a></li>
+<li><a class="reference internal" href="#which-version-of-c-does-pycparser-support" id="id4">1.3&nbsp;&nbsp;&nbsp;Which version of C does pycparser support?</a></li>
+<li><a class="reference internal" href="#what-grammar-does-pycparser-follow" id="id5">1.4&nbsp;&nbsp;&nbsp;What grammar does pycparser follow?</a></li>
+<li><a class="reference internal" href="#what-is-an-ast" id="id6">1.5&nbsp;&nbsp;&nbsp;What is an AST?</a></li>
+<li><a class="reference internal" href="#how-is-pycparser-licensed" id="id7">1.6&nbsp;&nbsp;&nbsp;How is pycparser licensed?</a></li>
+<li><a class="reference internal" href="#contact-details" id="id8">1.7&nbsp;&nbsp;&nbsp;Contact details</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#installing" id="id9">Installing</a><ul>
-<li><a class="reference internal" href="#prerequisites" id="id10">Prerequisites</a></li>
-<li><a class="reference internal" href="#installation-process" id="id11">Installation process</a></li>
+<li><a class="reference internal" href="#installing" id="id9">2&nbsp;&nbsp;&nbsp;Installing</a><ul class="auto-toc">
+<li><a class="reference internal" href="#prerequisites" id="id10">2.1&nbsp;&nbsp;&nbsp;Prerequisites</a></li>
+<li><a class="reference internal" href="#installation-process" id="id11">2.2&nbsp;&nbsp;&nbsp;Installation process</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#using" id="id12">Using</a><ul>
-<li><a class="reference internal" href="#interaction-with-the-c-preprocessor" id="id13">Interaction with the C preprocessor</a></li>
-<li><a class="reference internal" href="#what-about-the-standard-c-library-headers" id="id14">What about the standard C library headers?</a></li>
-<li><a class="reference internal" href="#basic-usage" id="id15">Basic usage</a></li>
-<li><a class="reference internal" href="#advanced-usage" id="id16">Advanced usage</a></li>
+<li><a class="reference internal" href="#using" id="id12">3&nbsp;&nbsp;&nbsp;Using</a><ul class="auto-toc">
+<li><a class="reference internal" href="#interaction-with-the-c-preprocessor" id="id13">3.1&nbsp;&nbsp;&nbsp;Interaction with the C preprocessor</a></li>
+<li><a class="reference internal" href="#what-about-the-standard-c-library-headers" id="id14">3.2&nbsp;&nbsp;&nbsp;What about the standard C library headers?</a></li>
+<li><a class="reference internal" href="#basic-usage" id="id15">3.3&nbsp;&nbsp;&nbsp;Basic usage</a></li>
+<li><a class="reference internal" href="#advanced-usage" id="id16">3.4&nbsp;&nbsp;&nbsp;Advanced usage</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#modifying" id="id17">Modifying</a></li>
-<li><a class="reference internal" href="#package-contents" id="id18">Package contents</a></li>
-<li><a class="reference internal" href="#contributors" id="id19">Contributors</a></li>
-<li><a class="reference internal" href="#changelog" id="id20">Changelog</a><ul>
-<li><a class="reference internal" href="#version-1-07-18-05-2010" id="id21">Version 1.07 (18.05.2010)</a></li>
-<li><a class="reference internal" href="#version-1-06-10-04-2010" id="id22">Version 1.06 (10.04.2010)</a></li>
-<li><a class="reference internal" href="#version-1-05-16-10-2009" id="id23">Version 1.05 (16.10.2009)</a></li>
-<li><a class="reference internal" href="#version-1-04-22-05-2009" id="id24">Version 1.04 (22.05.2009)</a></li>
-<li><a class="reference internal" href="#version-1-03-31-01-2009" id="id25">Version 1.03 (31.01.2009)</a></li>
-<li><a class="reference internal" href="#version-1-02-16-01-2009" id="id26">Version 1.02 (16.01.2009)</a></li>
-<li><a class="reference internal" href="#version-1-01-09-01-2009" id="id27">Version 1.01 (09.01.2009)</a></li>
-<li><a class="reference internal" href="#version-1-0-15-11-2008" id="id28">Version 1.0 (15.11.2008)</a></li>
+<li><a class="reference internal" href="#modifying" id="id17">4&nbsp;&nbsp;&nbsp;Modifying</a></li>
+<li><a class="reference internal" href="#package-contents" id="id18">5&nbsp;&nbsp;&nbsp;Package contents</a></li>
+<li><a class="reference internal" href="#contributors" id="id19">6&nbsp;&nbsp;&nbsp;Contributors</a></li>
+<li><a class="reference internal" href="#changelog" id="id20">7&nbsp;&nbsp;&nbsp;Changelog</a><ul class="auto-toc">
+<li><a class="reference internal" href="#version-1-08-09-10-2010" id="id21">7.1&nbsp;&nbsp;&nbsp;Version 1.08 (09.10.2010)</a></li>
+<li><a class="reference internal" href="#version-1-07-18-05-2010" id="id22">7.2&nbsp;&nbsp;&nbsp;Version 1.07 (18.05.2010)</a></li>
+<li><a class="reference internal" href="#version-1-06-10-04-2010" id="id23">7.3&nbsp;&nbsp;&nbsp;Version 1.06 (10.04.2010)</a></li>
+<li><a class="reference internal" href="#version-1-05-16-10-2009" id="id24">7.4&nbsp;&nbsp;&nbsp;Version 1.05 (16.10.2009)</a></li>
+<li><a class="reference internal" href="#version-1-04-22-05-2009" id="id25">7.5&nbsp;&nbsp;&nbsp;Version 1.04 (22.05.2009)</a></li>
+<li><a class="reference internal" href="#version-1-03-31-01-2009" id="id26">7.6&nbsp;&nbsp;&nbsp;Version 1.03 (31.01.2009)</a></li>
+<li><a class="reference internal" href="#version-1-02-16-01-2009" id="id27">7.7&nbsp;&nbsp;&nbsp;Version 1.02 (16.01.2009)</a></li>
+<li><a class="reference internal" href="#version-1-01-09-01-2009" id="id28">7.8&nbsp;&nbsp;&nbsp;Version 1.01 (09.01.2009)</a></li>
+<li><a class="reference internal" href="#version-1-0-15-11-2008" id="id29">7.9&nbsp;&nbsp;&nbsp;Version 1.0 (15.11.2008)</a></li>
 </ul>
 </li>
 </ul>
 </div>
 <div class="section" id="introduction">
-<h1><a class="toc-backref" href="#id1">Introduction</a></h1>
+<h1>1&nbsp;&nbsp;&nbsp;Introduction</h1>
 <div class="section" id="what-is-pycparser">
-<h2><a class="toc-backref" href="#id2">What is pycparser?</a></h2>
+<h2>1.1&nbsp;&nbsp;&nbsp;What is pycparser?</h2>
 <p><tt class="docutils literal"><span class="pre">pycparser</span></tt> is a parser for the C language, written in pure Python. It is a module designed to be easily integrated into applications that need to parse C source code.</p>
 </div>
 <div class="section" id="what-is-it-good-for">
-<h2><a class="toc-backref" href="#id3">What is it good for?</a></h2>
+<h2>1.2&nbsp;&nbsp;&nbsp;What is it good for?</h2>
 <p>Anything that needs C code to be parsed. The following are some uses for <tt class="docutils literal"><span class="pre">pycparser</span></tt>, taken from real user reports:</p>
 <ul class="simple">
 <li>C code obfuscator</li>
 <p><tt class="docutils literal"><span class="pre">pycparser</span></tt> is unique in the sense that it's written in pure Python - a very high level language that's easy to experiment with and tweak. To people familiar with Lex and Yacc, <tt class="docutils literal"><span class="pre">pycparser</span></tt>'s code will be simple to understand.</p>
 </div>
 <div class="section" id="which-version-of-c-does-pycparser-support">
-<h2><a class="toc-backref" href="#id4">Which version of C does pycparser support?</a></h2>
+<h2>1.3&nbsp;&nbsp;&nbsp;Which version of C does pycparser support?</h2>
 <p>At the moment, <tt class="docutils literal"><span class="pre">pycparser</span></tt> supports ANSI/ISO C89, the language described by Kernighan and Ritchie in &quot;The C Programming language, 2nd edition&quot; (K&amp;R2), with only selected extensions from C99. The currently supported C99 features are:</p>
 <ul class="simple">
 <li>Allowing a comma after the last value in an enumeration list</li>
 </ul>
+<p>Additionally, since <tt class="docutils literal"><span class="pre">pycparser</span></tt> lets you use your own C preprocessor (<tt class="docutils literal"><span class="pre">cpp</span></tt>), C99 features implemented in the preprocessor (such as variadic macros or <tt class="docutils literal"><span class="pre">//</span></tt> comments) can be supported in a manner transparent to <tt class="docutils literal"><span class="pre">pycparser</span></tt>.</p>
 <p><tt class="docutils literal"><span class="pre">pycparser</span></tt> doesn't support any GCC extensions.</p>
 </div>
 <div class="section" id="what-grammar-does-pycparser-follow">
-<h2><a class="toc-backref" href="#id5">What grammar does pycparser follow?</a></h2>
+<h2>1.4&nbsp;&nbsp;&nbsp;What grammar does pycparser follow?</h2>
 <p><tt class="docutils literal"><span class="pre">pycparser</span></tt> very closely follows the ANSI C grammar provided in the end of K&amp;R2. Listings of this grammar (often in Yacc syntax) can be easily found by a simple web search. Google for <cite>ansi c grammar</cite> to get started.</p>
 </div>
 <div class="section" id="what-is-an-ast">
-<h2><a class="toc-backref" href="#id6">What is an AST?</a></h2>
+<h2>1.5&nbsp;&nbsp;&nbsp;What is an AST?</h2>
 <p><a class="reference external" href="http://en.wikipedia.org/wiki/Abstract_syntax_tree">AST</a> - Abstract Syntax Tree. It is a tree representation of the syntax of source code - a convenient hierarchical data structure that's built from the code and is readily suitable for exploration and manipulation.</p>
 </div>
 <div class="section" id="how-is-pycparser-licensed">
-<h2><a class="toc-backref" href="#id7">How is pycparser licensed?</a></h2>
+<h2>1.6&nbsp;&nbsp;&nbsp;How is pycparser licensed?</h2>
 <p><a class="reference external" href="http://www.gnu.org/licenses/lgpl.html">LGPL</a></p>
 </div>
 <div class="section" id="contact-details">
-<h2><a class="toc-backref" href="#id8">Contact details</a></h2>
-<p>Drop me an email to <a class="reference external" href="mailto:eliben&#64;gmail.com">eliben&#64;gmail.com</a> for any questions regarding <tt class="docutils literal"><span class="pre">pycparser</span></tt>.</p>
+<h2>1.7&nbsp;&nbsp;&nbsp;Contact details</h2>
+<p>Drop me an email to <a class="reference external" href="mailto:eliben&#64;gmail.com">eliben&#64;gmail.com</a> for any questions regarding <tt class="docutils literal"><span class="pre">pycparser</span></tt>. For reporting problems with <tt class="docutils literal"><span class="pre">pycparser</span></tt> or submitting feature requests, the best way is to open an issue on the <a class="reference external" href="http://code.google.com/p/pycparser/">pycparser page at Google Code</a>.</p>
 </div>
 </div>
 <div class="section" id="installing">
-<h1><a class="toc-backref" href="#id9">Installing</a></h1>
+<h1>2&nbsp;&nbsp;&nbsp;Installing</h1>
 <div class="section" id="prerequisites">
-<h2><a class="toc-backref" href="#id10">Prerequisites</a></h2>
+<h2>2.1&nbsp;&nbsp;&nbsp;Prerequisites</h2>
 <ul class="simple">
 <li><tt class="docutils literal"><span class="pre">pycparser</span></tt> was tested on Python 2.5, 2.6 and 3.1, on both Linux and Windows</li>
-<li><tt class="docutils literal"><span class="pre">pycparser</span></tt> uses the PLY module for the actual lexer and parser construction. You'll also need to install PLY version 3.2 (earlier versions work at least since 2.5) from <a class="reference external" href="http://www.dabeaz.com/ply/">its website</a>.</li>
+<li><tt class="docutils literal"><span class="pre">pycparser</span></tt> uses the PLY module for the actual lexer and parser construction. Install PLY version 3.3 (earlier versions work at least since 2.5) from <a class="reference external" href="http://www.dabeaz.com/ply/">its website</a>.</li>
 <li>If you want to modify <tt class="docutils literal"><span class="pre">pycparser</span></tt>'s code, you'll need to install <a class="reference external" href="http://pyyaml.org/">PyYAML</a>, since it's used by <tt class="docutils literal"><span class="pre">pycparser</span></tt> to store the AST configuration in a YAML file.</li>
 </ul>
 </div>
 <div class="section" id="installation-process">
-<h2><a class="toc-backref" href="#id11">Installation process</a></h2>
+<h2>2.2&nbsp;&nbsp;&nbsp;Installation process</h2>
 <p>Installing <tt class="docutils literal"><span class="pre">pycparser</span></tt> is very simple. Once you download it from its <a class="reference external" href="http://code.google.com/p/pycparser/">website</a> and unzip the package, you just have to execute the standard <tt class="docutils literal"><span class="pre">python</span> <span class="pre">setup.py</span> <span class="pre">install</span></tt>. The setup script will then place the <tt class="docutils literal"><span class="pre">pycparser</span></tt> module into <tt class="docutils literal"><span class="pre">site-packages</span></tt> in your Python's installation library.</p>
 <p>It's recommended to run <tt class="docutils literal"><span class="pre">_build_tables.py</span></tt> in the <tt class="docutils literal"><span class="pre">pycparser</span></tt> code directory to make sure the parsing tables of PLY are pre-generated. This can make your code run faster.</p>
 </div>
 </div>
 <div class="section" id="using">
-<h1><a class="toc-backref" href="#id12">Using</a></h1>
+<h1>3&nbsp;&nbsp;&nbsp;Using</h1>
 <div class="section" id="interaction-with-the-c-preprocessor">
-<h2><a class="toc-backref" href="#id13">Interaction with the C preprocessor</a></h2>
+<h2>3.1&nbsp;&nbsp;&nbsp;Interaction with the C preprocessor</h2>
 <p>In order to be compilable, C code must be preprocessed by the C preprocessor - <tt class="docutils literal"><span class="pre">cpp</span></tt>. <tt class="docutils literal"><span class="pre">cpp</span></tt> handles preprocessing directives like <tt class="docutils literal"><span class="pre">#include</span></tt> and <tt class="docutils literal"><span class="pre">#define</span></tt>, removes comments, and does other minor tasks that prepare the C code for compilation.</p>
 <p>For all but the most trivial snippets of C code, <tt class="docutils literal"><span class="pre">pycparser</span></tt>, like a C compiler, must receive preprocessed C code in order to function correctly. If you import the top-level <tt class="docutils literal"><span class="pre">parse_file</span></tt> function from the <tt class="docutils literal"><span class="pre">pycparser</span></tt> package, it will interact with <tt class="docutils literal"><span class="pre">cpp</span></tt> for you, as long as it's in your PATH, or you provide a path to it.</p>
 <p>On the vast majority of Linux systems, <tt class="docutils literal"><span class="pre">cpp</span></tt> is installed and is in the PATH. If you're on Windows and don't have <tt class="docutils literal"><span class="pre">cpp</span></tt> somewhere, you can use the one provided in the <tt class="docutils literal"><span class="pre">utils</span></tt> directory in <tt class="docutils literal"><span class="pre">pycparser</span></tt>'s distribution. This <tt class="docutils literal"><span class="pre">cpp</span></tt> executable was compiled from the <a class="reference external" href="http://www.cs.princeton.edu/software/lcc/">LCC distribution</a>, and is provided under LCC's license terms.</p>
 </div>
 <div class="section" id="what-about-the-standard-c-library-headers">
-<h2><a class="toc-backref" href="#id14">What about the standard C library headers?</a></h2>
+<h2>3.2&nbsp;&nbsp;&nbsp;What about the standard C library headers?</h2>
 <p>C code almost always includes various header files from the standard C library, like <tt class="docutils literal"><span class="pre">stdio.h</span></tt>. While, with some effort, <tt class="docutils literal"><span class="pre">pycparser</span></tt> can be made to parse the standard headers from any C compiler, it's much simpler to use the provided &quot;fake&quot; standard in includes in <tt class="docutils literal"><span class="pre">utils/fake_libc_include</span></tt>. These are standard C header files that contain only the bare necessities to allow valid compilation of the files that use them. As a bonus, since they're minimal, it can significantly improve the performance of parsing C files.</p>
 <p>See the <tt class="docutils literal"><span class="pre">using_cpp_libc.py</span></tt> example for more details.</p>
 </div>
 <div class="section" id="basic-usage">
-<h2><a class="toc-backref" href="#id15">Basic usage</a></h2>
+<h2>3.3&nbsp;&nbsp;&nbsp;Basic usage</h2>
 <p>Take a look at the <tt class="docutils literal"><span class="pre">examples</span></tt> directory of the distribution for a few examples of using <tt class="docutils literal"><span class="pre">pycparser</span></tt>. These should be enough to get you started.</p>
 </div>
 <div class="section" id="advanced-usage">
-<h2><a class="toc-backref" href="#id16">Advanced usage</a></h2>
+<h2>3.4&nbsp;&nbsp;&nbsp;Advanced usage</h2>
 <p>The public interface of <tt class="docutils literal"><span class="pre">pycparser</span></tt> is well documented with comments in <tt class="docutils literal"><span class="pre">pycparser/c_parser.py</span></tt>. For a detailed overview of the various AST nodes created by the parser, see <tt class="docutils literal"><span class="pre">pycparser/_c_ast.yaml</span></tt>.</p>
 <p>In any case, you can always drop me an <a class="reference external" href="mailto:eliben&#64;gmail.com">email</a> for help.</p>
 </div>
 </div>
 <div class="section" id="modifying">
-<h1><a class="toc-backref" href="#id17">Modifying</a></h1>
+<h1>4&nbsp;&nbsp;&nbsp;Modifying</h1>
 <p>There are a few points to keep in mind when modifying <tt class="docutils literal"><span class="pre">pycparser</span></tt>:</p>
 <ul class="simple">
 <li>The code for <tt class="docutils literal"><span class="pre">pycparser</span></tt>'s AST nodes is automatically generated from a YAML configuration file - <tt class="docutils literal"><span class="pre">_c_ast.yaml</span></tt>, by <tt class="docutils literal"><span class="pre">_ast_gen.py</span></tt>. If you modify the AST configuration, make sure to re-generate the code.</li>
 </ul>
 </div>
 <div class="section" id="package-contents">
-<h1><a class="toc-backref" href="#id18">Package contents</a></h1>
+<h1>5&nbsp;&nbsp;&nbsp;Package contents</h1>
 <p>Once you unzip the <tt class="docutils literal"><span class="pre">pycparser</span></tt> package, you'll see the following files and directories:</p>
 <dl class="docutils">
 <dt>README.txt/html:</dt>
 </dl>
 </div>
 <div class="section" id="contributors">
-<h1><a class="toc-backref" href="#id19">Contributors</a></h1>
+<h1>6&nbsp;&nbsp;&nbsp;Contributors</h1>
 <p>Some people have contributed to <tt class="docutils literal"><span class="pre">pycparser</span></tt> by opening issues on bugs they've found and/or submitting patches. The list of contributors is at <a class="reference external" href="http://code.google.com/p/pycparser/wiki/Contributors">this pycparser Wiki page</a>.</p>
 </div>
 <div class="section" id="changelog">
-<h1><a class="toc-backref" href="#id20">Changelog</a></h1>
+<h1>7&nbsp;&nbsp;&nbsp;Changelog</h1>
+<div class="section" id="version-1-08-09-10-2010">
+<h2>7.1&nbsp;&nbsp;&nbsp;Version 1.08 (09.10.2010)</h2>
+<ul class="simple">
+<li>Bug fixes:<ul>
+<li>Correct handling of <tt class="docutils literal"><span class="pre">do{}</span> <span class="pre">...</span> <span class="pre">while</span></tt> statements in some cases</li>
+<li>Issues 6 &amp; 7: Concatenation of string literals</li>
+<li>Issue 9: Support for unnamed bitfields in structs</li>
+</ul>
+</li>
+</ul>
+</div>
 <div class="section" id="version-1-07-18-05-2010">
-<h2><a class="toc-backref" href="#id21">Version 1.07 (18.05.2010)</a></h2>
+<h2>7.2&nbsp;&nbsp;&nbsp;Version 1.07 (18.05.2010)</h2>
 <ul class="simple">
 <li>Python 3.1 compatibility: <tt class="docutils literal"><span class="pre">pycparser</span></tt> was modified to run on Python 3.1 as well as 2.6</li>
 </ul>
 </div>
 <div class="section" id="version-1-06-10-04-2010">
-<h2><a class="toc-backref" href="#id22">Version 1.06 (10.04.2010)</a></h2>
+<h2>7.3&nbsp;&nbsp;&nbsp;Version 1.06 (10.04.2010)</h2>
 <ul class="simple">
 <li>Bug fixes:<ul>
 <li>coord not propagated to FuncCall nodes</li>
 </ul>
 </div>
 <div class="section" id="version-1-05-16-10-2009">
-<h2><a class="toc-backref" href="#id23">Version 1.05 (16.10.2009)</a></h2>
+<h2>7.4&nbsp;&nbsp;&nbsp;Version 1.05 (16.10.2009)</h2>
 <ul class="simple">
 <li>Fixed the <tt class="docutils literal"><span class="pre">parse_file</span></tt> auxiliary function to handle multiple arguments to <tt class="docutils literal"><span class="pre">cpp</span></tt> correctly</li>
 </ul>
 </div>
 <div class="section" id="version-1-04-22-05-2009">
-<h2><a class="toc-backref" href="#id24">Version 1.04 (22.05.2009)</a></h2>
+<h2>7.5&nbsp;&nbsp;&nbsp;Version 1.04 (22.05.2009)</h2>
 <ul class="simple">
 <li>Added the <tt class="docutils literal"><span class="pre">fake_libc_include</span></tt> directory to allow parsing of C code that uses standard C library include files without dependency on a real C library.</li>
 <li>Tested with Python 2.6 and PLY 3.2</li>
 </ul>
 </div>
 <div class="section" id="version-1-03-31-01-2009">
-<h2><a class="toc-backref" href="#id25">Version 1.03 (31.01.2009)</a></h2>
+<h2>7.6&nbsp;&nbsp;&nbsp;Version 1.03 (31.01.2009)</h2>
 <ul class="simple">
 <li>Accept enumeration lists with a comma after the last item (C99 feature).</li>
 </ul>
 </div>
 <div class="section" id="version-1-02-16-01-2009">
-<h2><a class="toc-backref" href="#id26">Version 1.02 (16.01.2009)</a></h2>
+<h2>7.7&nbsp;&nbsp;&nbsp;Version 1.02 (16.01.2009)</h2>
 <ul class="simple">
 <li>Fixed problem of parsing struct/enum/union names that were named similarly to previously defined <tt class="docutils literal"><span class="pre">typedef</span></tt> types.</li>
 </ul>
 </div>
 <div class="section" id="version-1-01-09-01-2009">
-<h2><a class="toc-backref" href="#id27">Version 1.01 (09.01.2009)</a></h2>
+<h2>7.8&nbsp;&nbsp;&nbsp;Version 1.01 (09.01.2009)</h2>
 <ul class="simple">
 <li>Fixed subprocess invocation in the helper function parse_file - now it's more portable</li>
 </ul>
 </div>
 <div class="section" id="version-1-0-15-11-2008">
-<h2><a class="toc-backref" href="#id28">Version 1.0 (15.11.2008)</a></h2>
+<h2>7.9&nbsp;&nbsp;&nbsp;Version 1.0 (15.11.2008)</h2>
 <ul class="simple">
 <li>Initial release</li>
 <li>Support for ANSI C89</li>
 ===============
-pycparser v1.07
+pycparser v1.08
 ===============
 
 :Author: `Eli Bendersky <http://eli.thegreenplace.net>`_
 
 
 .. contents::
+    :backlinks: none
+
+.. sectnum::
+
 
 Introduction
 ============
 
 * Allowing a comma after the last value in an enumeration list
 
+Additionally, since ``pycparser`` lets you use your own C preprocessor (``cpp``), C99 features implemented in the preprocessor (such as variadic macros or ``//`` comments) can be supported in a manner transparent to ``pycparser``.
+
 ``pycparser`` doesn't support any GCC extensions.
 
 What grammar does pycparser follow?
 Contact details
 ---------------
 
-Drop me an email to eliben@gmail.com for any questions regarding ``pycparser``.
+Drop me an email to eliben@gmail.com for any questions regarding ``pycparser``. For reporting problems with ``pycparser`` or submitting feature requests, the best way is to open an issue on the `pycparser page at Google Code <http://code.google.com/p/pycparser/>`_.
 
 
 Installing
 -------------
 
 * ``pycparser`` was tested on Python 2.5, 2.6 and 3.1, on both Linux and Windows
-* ``pycparser`` uses the PLY module for the actual lexer and parser construction. You'll also need to install PLY version 3.2 (earlier versions work at least since 2.5) from `its website <http://www.dabeaz.com/ply/>`_.
+* ``pycparser`` uses the PLY module for the actual lexer and parser construction. Install PLY version 3.3 (earlier versions work at least since 2.5) from `its website <http://www.dabeaz.com/ply/>`_.
 * If you want to modify ``pycparser``'s code, you'll need to install `PyYAML <http://pyyaml.org/>`_, since it's used by ``pycparser`` to store the AST configuration in a YAML file.
 
 Installation process
 Changelog
 =========
 
+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)
 -------------------------
 
 Fixes since last:
 ------------------
 
-* bugfix: correct handling of do{} while statements in some cases
-* bugfix: Issues 6 & 7 (concatenation of string literals)
+* 
 
 Version Update
 --------------

File pycparser/__init__.py

 #-----------------------------------------------------------------
 
 __all__ = ['c_lexer', 'c_parser', 'c_ast']
-__version__ = '1.07'
+__version__ = '1.08'
 
 from subprocess import Popen, PIPE
 
         C compilers or analysis tools.
     """,
     license='LGPL',
-    version='1.07',
+    version='1.08',
     author='Eli Bendersky',
     maintainer='Eli Bendersky',
     author_email='eliben@gmail.com',

File tests/test_c_parser.py

                         ['PtrDecl', ['PtrDecl', ['TypeDecl', ['IdentifierType', ['Node']]]]]]]]]])
     
     def test_struct_bitfields(self):
-        # a struct with two bitfields, one anonymous
+        # a struct with two bitfields, one unnamed
         s1 = """
             struct {
                 int k:6;
 
         parsed_struct = self.parse(s1).ext[0]
 
-        # We can see here the name of the decl for the anonymous bitfield is 
+        # We can see here the name of the decl for the unnamed bitfield is 
         # None, but expand_decl doesn't show bitfield widths
         # ...
         self.assertEqual(expand_decl(parsed_struct),
     source_code = """
     int main()
     {
+        p++;
         int a;
-        struct joe {
-            int :6;
-            int blbl:2;
-        } kwa;
-        a = sizeof(int());
     }
     """