As a result, the pretty-printer no longer turns int a, b; into int a; int b; but rather preserves the original syntax. (this is quite a nice benefit, see the test output)
Finally, it resolves the above issue by allowing decls most places a statement was previously specified.
Other than the parsing and pretty-printing changes, all behavior is the same. The MIR works as before, where each item is split into its own vardecl statement.
Submission Checklist
[x] Run unit tests
Documentation
[ ] If a user-facing facing change was made, the documentation PR is here: grammar in documentation needs to be updated
Release notes
The pretty-printer now preserves multiple declarations in one line like int a, b; rather than splitting them into two declarations.
Declarations are now allowed in places they previously would not parse, such as the only statement in the body of an if statement.
This closes https://github.com/stan-dev/stan/issues/2610
It does 3 things:
int a, b;
are stored in the same AST node, much like in Clang's C++ AST: https://stackoverflow.com/questions/41339220/clang-ast-visitor-for-single-line-multiple-variable-declaration. This saves some memory and allows the following two bulletsint a, b;
intoint a; int b;
but rather preserves the original syntax. (this is quite a nice benefit, see the test output)Other than the parsing and pretty-printing changes, all behavior is the same. The MIR works as before, where each item is split into its own vardecl statement.
Submission Checklist
Release notes
The pretty-printer now preserves multiple declarations in one line like
int a, b;
rather than splitting them into two declarations.Declarations are now allowed in places they previously would not parse, such as the only statement in the body of an if statement.
Copyright and Licensing
By submitting this pull request, the copyright holder is agreeing to license the submitted work under the BSD 3-clause license (https://opensource.org/licenses/BSD-3-Clause)