diff options
Diffstat (limited to 'lib/Format/Format.cpp')
-rw-r--r-- | lib/Format/Format.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 625f93151f..aca5d36aef 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -284,6 +284,7 @@ public: State.VariablePos = 0; State.LineContainsContinuedForLoopSection = false; State.ParenLevel = 0; + State.StartOfStringLiteral = 0; State.StartOfLineLevel = State.ParenLevel; DEBUG({ @@ -421,6 +422,10 @@ private: /// \brief The \c ParenLevel at the start of this line. unsigned StartOfLineLevel; + /// \brief The start column of the string literal, if we're in a string + /// literal sequence, 0 otherwise. + unsigned StartOfStringLiteral; + /// \brief A stack keeping track of properties applying to parenthesis /// levels. std::vector<ParenState> Stack; @@ -440,6 +445,8 @@ private: return ParenLevel < Other.ParenLevel; if (StartOfLineLevel != Other.StartOfLineLevel) return StartOfLineLevel < Other.StartOfLineLevel; + if (StartOfStringLiteral != Other.StartOfStringLiteral) + return StartOfStringLiteral < Other.StartOfStringLiteral; return Stack < Other.Stack; } }; @@ -472,8 +479,8 @@ private: if (Current.is(tok::r_brace)) { State.Column = Line.Level * 2; } else if (Current.is(tok::string_literal) && - Previous.is(tok::string_literal)) { - State.Column = State.Column - Previous.FormatTok.TokenLength; + State.StartOfStringLiteral != 0) { + State.Column = State.StartOfStringLiteral; State.Stack.back().BreakBeforeParameter = true; } else if (Current.is(tok::lessless) && State.Stack.back().FirstLessLess != 0) { @@ -685,6 +692,12 @@ private: State.Stack.pop_back(); } + if (Current.is(tok::string_literal) && State.StartOfStringLiteral == 0) { + State.StartOfStringLiteral = State.Column; + } else if (Current.isNot(tok::comment)) { + State.StartOfStringLiteral = 0; + } + State.Column += Current.FormatTok.TokenLength; if (State.NextToken->Children.empty()) |