| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
| |
* Support _Pragma, a C99 alternative to #pragma
See https://gcc.gnu.org/onlinedocs/cpp/Pragmas.html
* Test cases for _Pragma
* Add explanatory comment for _PRAGMA and PPPRAGMA
|
| |
|
|
|
|
|
| |
* Fix typos
* Revert changes in vendor module
|
|
|
|
|
|
|
|
|
| |
* Fix PEP8 [E101](https://github.com/PyCQA/pycodestyle/blob/2.8.0/docs/intro.rst#error-codes)
* Fix PEP8 [E711](https://github.com/PyCQA/pycodestyle/blob/2.8.0/docs/intro.rst#error-codes)
* Fix E999 (python2)
* Fix PEP8 [F401](https://flake8.pycqa.org/en/4.0.1/user/error-codes.html)
|
|
|
| |
Co-authored-by: vit9696 <vit9696@users.noreply.github.com>
|
|
|
|
|
|
|
| |
* Implement u8, u, and U strings from C11
* Also add u8, u, and U chars from C11 and C23
Co-authored-by: vit9696 <vit9696@users.noreply.github.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Implement _Alignas and _Alignof support with tests
* Improve testing and avoid unnecessary alignas for typedef
* Add more tests
* Drop legacy artifact
* Remove extra _add_declaration_specifier call
* Drop custom equality comparators for now
Co-authored-by: vit9696 <vit9696@users.noreply.github.com>
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
* Improve _Atomic support with more tests and fix typedef handling
* Remove duplicated tests and check the generated code for typedefs
* Add typedef testing to parser as well
Co-authored-by: vit9696 <vit9696@users.noreply.github.com>
|
|
|
|
| |
Now it matches the yacc flag name
|
|
|
|
|
| |
Now the ASTs produced are more correct, and more complex cases work like
nested _Atomic(...) specifiers.
|
|
|
|
|
| |
Based on #431 by vit9696
Updates #430
|
|
|
|
|
|
|
| |
This adds initial implementation for the _Atomic keyword in C11, only focusing
on the use as qualifier (spec section 6.7.3)
Based on #431 by vit9696. Updates #430
|
|
|
|
|
|
|
|
|
|
| |
* Introduce partial C11 support
Implemented _Noreturn, _Static_assert, _Thread_local. Also fixed
tests with preprocessor on macOS.
* Add more tests
Co-authored-by: vit9696 <vit9696@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* c_parser: support parenthesized compounds
Support parenthesized compound statements as described here:
https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
Signed-off-by: Jordan Yates <jordan.yates@data61.csiro.au>
* test_c_parser: support additional initializers
Add support to `expand_init` for additional `c_ast` types. If a type
is not explicitly handled, return the type name instead of `None`.
Signed-off-by: Jordan Yates <jordan.yates@data61.csiro.au>
* test_c_parser: test parenthesized compounds
Add parsing tests for various situations of parenthesized compound
statements. The complete tree generated by the test string is:
```
FileAST:
FuncDef:
Decl: foo, [], [], []
FuncDecl:
TypeDecl: foo, []
IdentifierType: ['void']
Compound:
Decl: a, [], [], []
TypeDecl: a, []
IdentifierType: ['int']
Compound:
Compound:
Constant: int, 1
Compound:
Constant: int, 1
Constant: int, 2
Decl: b, [], [], []
TypeDecl: b, []
IdentifierType: ['int']
Compound:
Constant: int, 1
Decl: c, [], [], []
TypeDecl: c, []
IdentifierType: ['int']
Decl: d, [], [], []
TypeDecl: d, []
IdentifierType: ['int']
Compound:
Decl: x, [], [], []
TypeDecl: x, []
IdentifierType: ['int']
Constant: int, 1
BinaryOp: +
ID: x
Constant: int, 2
Assignment: =
ID: a
Compound:
Decl: x, [], [], []
TypeDecl: x, []
IdentifierType: ['int']
Constant: int, 1
BinaryOp: *
Constant: int, 2
ID: x
```
Signed-off-by: Jordan Yates <jordan.yates@data61.csiro.au>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Fix #385: generate code with nested sizeofs
* Fix #378: replace assertion with check
Only the assertion inside `_build_function_definition` is replaced. The
assertion is not appropriate because there are possible inputs that
would trigger the assertion, they're just grammatically incorrect. Thus,
it is replaced with a check that raises `ParseError` on failure.
* Fix #379: parse struct with nested enum
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|