Implement a tiny expression parser to improve formatting decisions.
With this patch, the formatter introduces 'fake' parenthesis according
to the operator precedence of binary operators.
Before:
return aaaa &
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA || bbbb &
BBBBBBBBBBBBBBBBBBBBBBBBBBBBB || cccc &
CCCCCCCCCCCCCCCCCCCCCCCCCC ||
dddd &
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD;
f(
aaaaaaaaaaaaaaaaaaaa &&
aaaaaaaaaaaaaaaaaaaa,
aaaaaaaaaaaaaaaaaaaa &&
aaaaaaaaaaaaaaaaaaaa,
aaaaaaaaaaaaaaaaaaaa &&
aaaaaaaaaaaaaaaaaaaa);
After:
return aaaa &
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA ||
bbbb &
BBBBBBBBBBBBBBBBBBBBBBBBBBBBB ||
cccc &
CCCCCCCCCCCCCCCCCCCCCCCCCC ||
dddd &
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD;
f(
aaaaaaaaaaaaaaaaaaaa &&
aaaaaaaaaaaaaaaaaaaa,
aaaaaaaaaaaaaaaaaaaa &&
aaaaaaaaaaaaaaaaaaaa,
aaaaaaaaaaaaaaaaaaaa &&
aaaaaaaaaaaaaaaaaaaa);
Future improvements:
- Get rid of some of the hacky ways to nicely format certain constructs.
- Merge this parser and the AnnotatingParser as we now have several parsers
that analyze (), [], etc.
llvm-svn: 174714