aboutsummaryrefslogtreecommitdiff
path: root/lib/Format
diff options
context:
space:
mode:
authorDaniel Jasper <djasper@google.com>2013-04-08 10:45:44 +0000
committerDaniel Jasper <djasper@google.com>2013-04-08 10:45:44 +0000
commit65622aae92ff6e338abed83d31e512ee0e013dc7 (patch)
tree6fa78e2978a9359229e5125995b56f889b8696a9 /lib/Format
parentc4ff76913ada469a70ed4bd960aeff038b6c2e1b (diff)
Revert accidental commit r179015.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179016 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Format')
-rw-r--r--lib/Format/Format.cpp26
-rw-r--r--lib/Format/TokenAnnotator.cpp35
-rw-r--r--lib/Format/TokenAnnotator.h9
3 files changed, 27 insertions, 43 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp
index 8cdcd0b028..101b16f1a1 100644
--- a/lib/Format/Format.cpp
+++ b/lib/Format/Format.cpp
@@ -86,6 +86,12 @@ static bool isTrailingComment(const AnnotatedToken &Tok) {
(Tok.Children.empty() || Tok.Children[0].MustBreakBefore);
}
+static bool isComparison(const AnnotatedToken &Tok) {
+ prec::Level Precedence = getPrecedence(Tok);
+ return Tok.Type == TT_BinaryOperator &&
+ (Precedence == prec::Equality || Precedence == prec::Relational);
+}
+
// Returns the length of everything up to the first possible line break after
// the ), ], } or > matching \c Tok.
static unsigned getLengthToMatchingParen(const AnnotatedToken &Tok) {
@@ -486,6 +492,10 @@ public:
State.StartOfStringLiteral = 0;
State.StartOfLineLevel = State.ParenLevel;
+ DEBUG({
+ DebugTokenState(*State.NextToken);
+ });
+
// The first token has already been indented and thus consumed.
moveStateToNextToken(State, /*DryRun=*/ false);
@@ -731,7 +741,8 @@ private:
State.Stack.back().ColonPos =
State.Column + Current.FormatTok.TokenLength;
}
- } else if (Current.Type == TT_StartOfName || Previous.is(tok::equal) ||
+ } else if (Current.Type == TT_StartOfName || Current.is(tok::question) ||
+ Previous.is(tok::equal) || isComparison(Previous) ||
Previous.Type == TT_ObjCMethodExpr) {
State.Column = ContinuationIndent;
} else {
@@ -868,13 +879,10 @@ private:
State.Stack.back().StartOfFunctionCall =
Current.LastInChainOfCalls ? 0 : State.Column;
if (Current.Type == TT_CtorInitializerColon) {
- State.Stack.back().Indent = State.Column + 2;
if (Style.ConstructorInitializerAllOnOneLineOrOnePerLine)
State.Stack.back().AvoidBinPacking = true;
State.Stack.back().BreakBeforeParameter = false;
}
- if (Current.is(tok::kw_return))
- State.Stack.back().LastSpace = State.Column + 7;
// In ObjC method declaration we align on the ":" of parameters, but we need
// to ensure that we indent parameters on subsequent lines by at least 4.
@@ -882,15 +890,9 @@ private:
State.Stack.back().Indent += 4;
// Insert scopes created by fake parenthesis.
- for (SmallVector<unsigned, 4>::const_reverse_iterator
- I = Current.FakeLParens.rbegin(),
- E = Current.FakeLParens.rend();
- I != E; ++I) {
+ for (unsigned i = 0, e = Current.FakeLParens; i != e; ++i) {
ParenState NewParenState = State.Stack.back();
- NewParenState.Indent = //State.Stack.back().LastSpace;
- std::max(State.Column, State.Stack.back().LastSpace);
- if ((*I > 3 && State.ParenLevel != 0) || *I == 4)
- NewParenState.Indent += 4;
+ NewParenState.Indent = std::max(State.Column, State.Stack.back().Indent);
NewParenState.BreakBeforeParameter = false;
State.Stack.push_back(NewParenState);
}
diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp
index 833a0c062b..44421c4bbe 100644
--- a/lib/Format/TokenAnnotator.cpp
+++ b/lib/Format/TokenAnnotator.cpp
@@ -16,7 +16,6 @@
#include "TokenAnnotator.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Lex/Lexer.h"
-#include "llvm/Support/Debug.h"
namespace clang {
namespace format {
@@ -783,9 +782,12 @@ public:
if (Precedence > prec::PointerToMember || Current == NULL)
return;
+ // Skip over "return" until we can properly parse it.
+ if (Current->is(tok::kw_return))
+ next();
+
// Eagerly consume trailing comments.
- while (Current && Current->FormatTok.NewlinesBefore == 0 &&
- isTrailingComment(Current)) {
+ while (isTrailingComment(Current)) {
next();
}
@@ -800,7 +802,8 @@ public:
if (Current) {
if (Current->Type == TT_ConditionalExpr)
CurrentPrecedence = 1 + (int) prec::Conditional;
- else if (Current->is(tok::semi) || Current->Type == TT_InlineASMColon)
+ else if (Current->is(tok::semi) || Current->Type == TT_InlineASMColon ||
+ Current->Type == TT_CtorInitializerColon)
CurrentPrecedence = 1;
else if (Current->Type == TT_BinaryOperator || Current->is(tok::comma))
CurrentPrecedence = 1 + (int) getPrecedence(*Current);
@@ -811,7 +814,7 @@ public:
if (Current == NULL || closesScope(*Current) ||
(CurrentPrecedence != 0 && CurrentPrecedence < Precedence)) {
if (OperatorFound) {
- Start->FakeLParens.push_back(Precedence);
+ ++Start->FakeLParens;
if (Current)
++Current->Parent->FakeRParens;
}
@@ -826,9 +829,9 @@ public:
parse();
}
// Remove fake parens that just duplicate the real parens.
- if (Current && !Left->Children[0].FakeLParens.empty() &&
+ if (Current && Left->Children[0].FakeLParens > 0 &&
Current->Parent->FakeRParens > 0) {
- Left->Children[0].FakeLParens.pop_back();
+ --Left->Children[0].FakeLParens;
--Current->Parent->FakeRParens;
}
next();
@@ -860,10 +863,6 @@ void TokenAnnotator::annotate(AnnotatedLine &Line) {
ExpressionParser ExprParser(Line);
ExprParser.parse();
- DEBUG({
- printDebugInfo(Line);
- });
-
if (Line.First.Type == TT_ObjCMethodSpecifier)
Line.Type = LT_ObjCMethodDecl;
else if (Line.First.Type == TT_ObjCDecl)
@@ -1188,19 +1187,5 @@ bool TokenAnnotator::canBreakBefore(const AnnotatedLine &Line,
(Left.is(tok::l_square) && !Right.is(tok::r_square));
}
-void TokenAnnotator::printDebugInfo(const AnnotatedLine &Line) {
- llvm::errs() << "AnnotatedTokens:\n";
- const AnnotatedToken *Tok = &Line.First;
- while (Tok) {
- llvm::errs() << Tok->FormatTok.Tok.getName() << ":"
- << " Type=" << Tok->Type << " FakeLParens=";
- for (unsigned i = 0, e = Tok->FakeLParens.size(); i != e; ++i)
- llvm::errs() << Tok->FakeLParens[i] << "/";
- llvm::errs() << " FakeRParens=" << Tok->FakeRParens << "\n";
- Tok = Tok->Children.empty() ? NULL : &Tok->Children[0];
- }
- llvm::errs() << "----\n";
-}
-
} // namespace format
} // namespace clang
diff --git a/lib/Format/TokenAnnotator.h b/lib/Format/TokenAnnotator.h
index 605f506793..c41ee33c43 100644
--- a/lib/Format/TokenAnnotator.h
+++ b/lib/Format/TokenAnnotator.h
@@ -75,7 +75,7 @@ public:
CanBreakBefore(false), MustBreakBefore(false),
ClosesTemplateDeclaration(false), MatchingParen(NULL),
ParameterCount(0), BindingStrength(0), SplitPenalty(0),
- LongestObjCSelectorName(0), Parent(NULL),
+ LongestObjCSelectorName(0), Parent(NULL), FakeLParens(0),
FakeRParens(0), LastInChainOfCalls(false),
PartOfMultiVariableDeclStmt(false) {}
@@ -158,9 +158,8 @@ public:
std::vector<AnnotatedToken> Children;
AnnotatedToken *Parent;
- /// \brief Stores the number of required fake parenthesis and the
- /// corresponding operator precedence.
- SmallVector<unsigned, 4> FakeLParens;
+ /// \brief Insert this many fake ( before this token for correct indentation.
+ unsigned FakeLParens;
/// \brief Insert this many fake ) after this token for correct indentation.
unsigned FakeRParens;
@@ -249,8 +248,6 @@ private:
bool canBreakBefore(const AnnotatedLine &Line, const AnnotatedToken &Right);
- void printDebugInfo(const AnnotatedLine &Line);
-
const FormatStyle &Style;
SourceManager &SourceMgr;
Lexer &Lex;