Age | Commit message (Collapse) | Author |
|
|
|
Recognize integer multicharacter constants like 'ABCD'
The feature I am adding is defined here - 5th case.
https://en.cppreference.com/w/c/language/character_constant
Also here: 6.4.4.4.10 of C99.
Put simply, pycparser thought a statement like this is an error:
int a = 'ABCD';
However it is not.
It is likely possible to just modify char_const regular expression in c_lexer.py:240 to allow longer characters, but the way it is done in this PR - multicharacter constants are clearly separated. I am also limiting the length of multicharacter const integers to 4 characters - this matches VS compiler behavior (gcc allows any length with a warning) and lets pycparser NOT consider lengthy single-quoted strings as integers - these would be nonsensical anyway.
|
|
qualifiers (#327)
Fixes #314
|
|
|
|
|
|
|
|
* Corrects the type attribute of a constant node when parsing doubles. This sets the type attribute to either 'float', 'long double' or 'double' depending on if 'f|F', 'l|L' or '' is specified at the end of the constant definition.
* Add tests for previous changes.
|
|
|
|
|
|
* Fix #235: Pragma displacing real statements
|
|
- Removed unnecessary whitespace
- Removed old & stale 'if __main__' sections in some of the library files
|
|
|
|
|
|
* Remove `init_declarator_list` workarounds
* Remove `struct_declaration` workaround
* Remove `declarator` pointer workaround
* Add `@parameterized` decorator for parser rules
* Rename `declarator` productions to `id_declarator` in preparation of adding `typeid_declarator`
* Use `id_declarator` in function definitions
* Add `typeid_declarator` and allow it as a `declarator`
* Create separate production for `type_specifier_no_typeid`
* Allow specifiers to be appended (useful for left-recursive lists)
* Change `specifier_qualifier_list` to be left-recursive and require at least one `type specifier`
* Change `declaration_specifiers` to require one `type_specifier` and disallow `typeid`s once we've seen a `type_specifier`
* Allow `decl_body` to omit a `type_specifier` if `init_declarator` doesn't start with a TYPEID
* Add `typeid_noparen_declarator` for use in `parameter_declaration`s
* Add test for multi-declarator declaration using a typedef name
* Move test into a more appropriate function and add another test
* Expand UnaryOp in `expand_init()`
* Add test for redefining name in the middle of a declaration
* Added info on the `append` parameter.
* Move rule template processing to a class constructor
* Auto-remove template methods and remove leading underscores
* Use xxx/yyy instead of XXX/YYY for better readability
* Add more documentation of the templating functions
* Add test for correct handling of ambiguity in parameter declarations
* Don't test incremental generation of declarators yet
|
|
symbol. (#159)"
This reverts commit 44137334bac69df72c6378fa84931006179d8bdf.
|
|
Replace it by website link; copyright appears in the LICENSE file already, which is sufficient
|
|
|
|
* Add argument to CParser.__init__ for overriding the yacc start symbol.
* Add a test for the new 'start' argument of CParser.__init__.
* Add documentation for the new 'start' argument of CParser.__init__.
|
|
This type is not part of the core C99 or C11 standards, but is mentioned
in both documents under "Common extensions".
|
|
|
|
|
|
|
|
|
|
|
|
Fixes #117
|
|
|
|
Preprocessor pragmas and their arguments are tokenized (as PPPRAGMA and
PPPRAGMASTR) and included in the AST as a pppragma directive with the
argument as value. If no argument was given the string will be empty.
Unit test of the lexer, parser and generator have been modified and
added accordingly.
The previous behavior, that #pragma lines would be ignored, is
henceforth obsolete.
|
|
|
|
|
|
The idea comes from #79 but the implementation is somewhat different.
|
|
|
|
Closes #68
|
|
After qualifiers were added, some problems seeped in assigning dimensions
properly.
|
|
- Add lexer and parser tests.
|
|
In general, there's no need to dynamically adjust the attributes of AST nodes.
So __slots__ seems suitable.
This reduces the memory usage of the test case reported in issue #72 from 21MB
to 17.5MB and should reduce the amount of space consumed by AST nodes in
general.
|
|
The pycparser grammar for direct-declarators diverged with the C
standard, which permits const, volatile, restrict, and static to
be modifiers in the array dimension. The relevant grammar can be
found in section 6.7.5.
The old p_direct_declarator_3 was split into two rules, and the
remaining p_direct_declarator rules were renumbered, preserving
precedence. So p_direct_declarator_3 now matches array
declarations with optional type qualifiers or assignment
expressions; p_direct_declarator_4 matches declarations with the
static keyword; p_direct_declarator_5 matches the variable-length
array declarations; and p_direct_declarator_6 matches
declarations with parentheses.
|
|
|
|
|
|
Added a field to the ArrayDecl node and modified tests
|
|
and move tests around.
|
|
|
|
and some comment fixes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|