| 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
|
|
|
|
| |
simplify it to use f-strings while we're at it
|
| |
|
| |
|
|
|
|
| |
Emit stderr as well as stdout from the example in case of failure
|
| |
|
| |
|
| |
|
|
|
|
|
| |
* 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>
|
|
|
|
| |
This lets us re-enable that were commented out in #435
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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>
|
|
|
|
| |
Updates #430
|
|
|
|
|
| |
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>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Use the stdlib standard entry point for running tests through the
command:
python -m unittest discover
Docs: https://docs.python.org/3/library/unittest.html#unittest-test-discovery
This automatically looks for files with the test_ prefix and runs them
as tests. This removes the need for the custom test entry point script,
all_tests.py.
|
| |
|
| |
|
| |
|
|
|
|
| |
[no fix yet]
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Fix slow backtracking when parsing strings (no external deps)
Fixes #61
This uses negative lookaheads to avoid ambiguity in how string should be
parsed by the regex.
- https://docs.python.org/2/library/re.html#regular-expression-syntax
- Previously, if it didn't immediately succeed at parsing an escape
sequence such as `\123`, it would have to try `\1`+`23`, `\12` + `3`,
and `\123`, which multiplied the time taken by 3 per additional escape
sequence. This solves that by only allowing `\123`
- The same fix was added for hex escapes.
Also fix a test that relied on the incorrect handling of regexes.
The implementation documentation says that it intends to allow
**decimal** escapes permissively.
* WIP debug
* Fix ambiguity caused by allowing #path directives
Solve this by allowing "\x" when not followed by hex,
in the regular string literal.
In the previous commits,
`\x12` could be parsed both as `\x`+`12` and `\x12`,
which caused exponential options for backtracking.
* Document changes to lexer, remove debug code
* Optimize this for strings
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Fix error transforming an empty switch
The parser would crash on that line for `switch(1) {}`
because NoneType is not iterable.
Fixes #345
* Add a test of empty switch statements
* Address review comments
|
| |
|
|
|
|
| |
return type (#329)
|
|
|
|
|
| |
qualifiers (#327)
Fixes #314
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add visit_PtrDecl to generate ptr types correctly
Also removed code duplication from visit_ArrayDecl and visit_TypeDecl by calling _generate_type instead, without emitting the declname.
Added tests for ptr type generation
* Truncate lines longer than 80 characters
per https://github.com/eliben/pycparser/pull/315/files#r269553083
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Fix array type generation (#312)
Also added dim_quals handling to _generate_type
Exmaple:
>>> ast = parser.parse('int g(const int a[const 20]){}')
>>> gen.visit(ast.ext[0].decl.type.args.params[0])
'const int a[const 20]'
>>> gen.visit(ast.ext[0].decl.type.args.params[0].type)
'int[const 20]'
* Added TypeDecl generation. Added tests
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
* 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.
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When running tests with Python warnings enabled, warnings of the
following form appear:
DeprecationWarning: Please use assertTrue instead.
self.failUnless(isinstance(...))
Use assertIsInstance instead to fix these warnings.
Using a more specific assert also has the advantage of more informative
error reporting upon failure.
https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertTrue
> This method should also be avoided when more specific methods are
> available (e.g. assertEqual(a, b) instead of assertTrue(a == b)),
> because they provide a better error message in case of failure.
|