diff options
author | Nico Weber <nicolasweber@gmx.de> | 2017-04-11 15:50:04 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2017-04-11 15:50:04 +0000 |
commit | 48c94a6164192b05c5c19d07c0fda4b38e8eed5a (patch) | |
tree | 66961b967d4b81e78f8a02c6be48ff97f4e42f65 /clang/lib/Format | |
parent | 46103e0ede41cef3ddce5f5194c258f6de607acd (diff) | |
download | bcm5719-llvm-48c94a6164192b05c5c19d07c0fda4b38e8eed5a.tar.gz bcm5719-llvm-48c94a6164192b05c5c19d07c0fda4b38e8eed5a.zip |
[clang-format] Recognize Java logical shift assignment operator
At present, clang-format mangles Java containing logical right shift operators
('>>>=' or '>>>'), splitting them in two, resulting in invalid code:
public class Minimal {
public void func(String args) {
int i = 42;
- i >>>= 1;
+ i >> >= 1;
return i;
}
}
This adds both forms of logical right shift to the FormatTokenLexer, so
clang-format won't attempt to split them and insert bogus whitespace.
https://reviews.llvm.org/D31652
Patch from Richard Bradfield <bradfier@fstab.me>!
llvm-svn: 299952
Diffstat (limited to 'clang/lib/Format')
-rw-r--r-- | clang/lib/Format/FormatTokenLexer.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Format/FormatTokenLexer.cpp b/clang/lib/Format/FormatTokenLexer.cpp index 9415dbe9ab3..4ee43d6937e 100644 --- a/clang/lib/Format/FormatTokenLexer.cpp +++ b/clang/lib/Format/FormatTokenLexer.cpp @@ -84,6 +84,19 @@ void FormatTokenLexer::tryMergePreviousTokens() { if (tryMergeTokens(JSRightArrow, TT_JsFatArrow)) return; } + + if (Style.Language == FormatStyle::LK_Java) { + static const tok::TokenKind JavaRightLogicalShift[] = {tok::greater, + tok::greater, + tok::greater}; + static const tok::TokenKind JavaRightLogicalShiftAssign[] = {tok::greater, + tok::greater, + tok::greaterequal}; + if (tryMergeTokens(JavaRightLogicalShift, TT_BinaryOperator)) + return; + if (tryMergeTokens(JavaRightLogicalShiftAssign, TT_BinaryOperator)) + return; + } } bool FormatTokenLexer::tryMergeNSStringLiteral() { |