Lines Matching refs:State

71   LineState State;
72 State.FirstIndent = FirstIndent;
73 State.Column = FirstIndent;
74 State.Line = Line;
75 State.NextToken = Line->First;
76 State.Stack.push_back(ParenState(FirstIndent, Line->Level, FirstIndent,
79 State.LineContainsContinuedForLoopSection = false;
80 State.ParenLevel = 0;
81 State.StartOfStringLiteral = 0;
82 State.StartOfLineLevel = State.ParenLevel;
83 State.LowestLevelOnLine = State.ParenLevel;
84 State.IgnoreStackForComparison = false;
87 moveStateToNextToken(State, DryRun, /*Newline=*/false);
88 return State;
91 bool ContinuationIndenter::canBreak(const LineState &State) {
92 const FormatToken &Current = *State.NextToken;
95 if (!Current.CanBreakBefore && !(State.Stack.back().BreakBeforeClosingBrace &&
110 if (Previous.opensScope() && State.LowestLevelOnLine < State.StartOfLineLevel)
112 if (Current.isMemberAccess() && State.Stack.back().ContainsUnwrappedBuilder)
114 return !State.Stack.back().NoLineBreak;
117 bool ContinuationIndenter::mustBreak(const LineState &State) {
118 const FormatToken &Current = *State.NextToken;
122 if (State.Stack.back().BreakBeforeClosingBrace &&
125 if (Previous.is(tok::semi) && State.LineContainsContinuedForLoopSection)
133 State.Stack.back().BreakBeforeParameter && !Current.isTrailingComment() &&
137 State.Column > State.Stack.back().Indent && // Breaking saves columns.
139 Previous.Type != TT_InlineASMColon && NextIsMultilineString(State))
143 getLengthToMatchingParen(Previous) + State.Column > getColumnLimit(State))
171 State.Stack.back().BreakBeforeParameter)
176 if (Current.is(tok::lessless) && State.Stack.back().BreakBeforeParameter &&
177 State.Stack.back().FirstLessLess == 0)
184 State.Stack.back().BreakBeforeParameter)
187 (Previous.ClosesTemplateDeclaration && State.ParenLevel == 0 &&
192 State.Line->MightBeFunctionDecl &&
193 State.Stack.back().BreakBeforeParameter && State.ParenLevel == 0)
196 (State.Stack.back().CallContinuation != 0 ||
197 (State.Stack.back().BreakBeforeParameter &&
198 State.Stack.back().ContainsUnwrappedBuilder)))
203 unsigned ContinuationIndenter::addTokenToState(LineState &State, bool Newline,
206 const FormatToken &Current = *State.NextToken;
208 if (State.Stack.size() == 0 ||
215 State.NextToken->WhitespaceRange.getEnd()) -
217 State.NextToken->WhitespaceRange.getBegin());
218 State.Column += WhitespaceLength + State.NextToken->ColumnWidth;
219 State.NextToken = State.NextToken->Next;
225 Penalty = addTokenOnNewLine(State, DryRun);
227 addTokenOnCurrentLine(State, DryRun, ExtraSpaces);
229 return moveStateToNextToken(State, DryRun, Newline) + Penalty;
232 void ContinuationIndenter::addTokenOnCurrentLine(LineState &State, bool DryRun,
234 FormatToken &Current = *State.NextToken;
235 const FormatToken &Previous = *State.NextToken->Previous;
237 (State.Line->First->is(tok::kw_for) || State.ParenLevel == 0) &&
238 State.Stack.back().VariablePos == 0) {
239 State.Stack.back().VariablePos = State.Column;
242 while (Tok && State.Stack.back().VariablePos >= Tok->ColumnWidth) {
243 State.Stack.back().VariablePos -= Tok->ColumnWidth;
249 State.Stack.back().LastSpace = State.Stack.back().VariablePos;
256 Spaces, State.Column + Spaces);
258 if (Current.Type == TT_ObjCSelectorName && State.Stack.back().ColonPos == 0) {
259 if (State.Stack.back().Indent + Current.LongestObjCSelectorName >
260 State.Column + Spaces + Current.ColumnWidth)
261 State.Stack.back().ColonPos =
262 State.Stack.back().Indent + Current.LongestObjCSelectorName;
264 State.Stack.back().ColonPos = State.Column + Spaces + Current.ColumnWidth;
269 State.Stack.back().Indent = State.Column + Spaces;
270 if (State.Stack.back().AvoidBinPacking && startsNextParameter(Current, Style))
271 State.Stack.back().NoLineBreak = true;
273 State.Stack.back().ContainsUnwrappedBuilder = true;
275 State.Column += Spaces;
279 State.Stack.back().LastSpace = State.Column + 1; // 1 is length of "(".
281 State.Stack.back().LastSpace = State.Column;
291 State.Stack.back().LastSpace = State.Column;
293 State.Stack.back().Indent = State.Column;
294 State.Stack.back().LastSpace = State.Column;
307 State.Stack[State.Stack.size() - 2].CallContinuation == 0)
308 State.Stack.back().LastSpace = State.Column;
312 unsigned ContinuationIndenter::addTokenOnNewLine(LineState &State,
314 FormatToken &Current = *State.NextToken;
315 const FormatToken &Previous = *State.NextToken->Previous;
318 std::max(State.Stack.back().LastSpace, State.Stack.back().Indent) +
325 State.NextToken->getPreviousNonComment();
328 if (!State.Stack.back().ContainsLineBreak)
330 State.Stack.back().ContainsLineBreak = true;
332 Penalty += State.NextToken->SplitPenalty;
336 if (Current.is(tok::lessless) && State.Stack.back().FirstLessLess == 0 &&
337 State.Column <= Style.ColumnLimit / 2)
341 State.Column = State.FirstIndent;
346 State.Column = State.Stack[State.Stack.size() - 2].LastSpace;
348 State.Column = State.FirstIndent;
350 State.StartOfStringLiteral != 0) {
351 State.Column = State.StartOfStringLiteral;
352 State.Stack.back().BreakBeforeParameter = true;
354 State.Stack.back().FirstLessLess != 0) {
355 State.Column = State.Stack.back().FirstLessLess;
357 if (State.Stack.back().CallContinuation == 0) {
358 State.Column = ContinuationIndent;
359 State.Stack.back().CallContinuation = State.Column;
361 State.Column = State.Stack.back().CallContinuation;
363 } else if (State.Stack.back().QuestionColumn != 0 &&
366 State.Column = State.Stack.back().QuestionColumn;
367 } else if (Previous.is(tok::comma) && State.Stack.back().VariablePos != 0) {
368 State.Column = State.Stack.back().VariablePos;
373 State.ParenLevel == 0 &&
375 State.Line->StartsDefinition))) {
376 State.Column = State.Stack.back().Indent;
378 if (State.Stack.back().ColonPos == 0) {
379 State.Stack.back().ColonPos =
380 State.Stack.back().Indent + Current.LongestObjCSelectorName;
381 State.Column = State.Stack.back().ColonPos - Current.ColumnWidth;
382 } else if (State.Stack.back().ColonPos > Current.ColumnWidth) {
383 State.Column = State.Stack.back().ColonPos - Current.ColumnWidth;
385 State.Column = State.Stack.back().Indent;
386 State.Stack.back().ColonPos = State.Column + Current.ColumnWidth;
389 if (State.Stack.back().StartOfArraySubscripts != 0)
390 State.Column = State.Stack.back().StartOfArraySubscripts;
392 State.Column = ContinuationIndent;
396 State.Column = ContinuationIndent;
398 State.Column = State.FirstIndent + Style.ConstructorInitializerIndentWidth;
400 State.Column = State.Stack.back().Indent;
402 State.Column = State.Stack.back().Indent;
405 if (State.Column == State.FirstIndent &&
407 State.Column += Style.ContinuationIndentWidth;
411 !State.Stack.back().AvoidBinPacking) ||
413 State.Stack.back().BreakBeforeParameter = false;
414 if (Previous.Type == TT_TemplateCloser && State.ParenLevel == 0)
415 State.Stack.back().BreakBeforeParameter = false;
418 State.Stack.back().BreakBeforeParameter = true;
426 State.Stack.back().IndentLevel, State.Column,
427 State.Column, State.Line->InPPDirective);
431 State.Stack.back().LastSpace = State.Column;
433 State.Stack.back().LastSpace += Current.ColumnWidth;
434 State.StartOfLineLevel = State.ParenLevel;
435 State.LowestLevelOnLine = State.ParenLevel;
439 for (unsigned i = 0, e = State.Stack.size() - 1; i != e; ++i) {
440 State.Stack[i].BreakBeforeParameter = true;
448 State.Stack.back().BreakBeforeParameter = true;
453 State.Stack.back().BreakBeforeClosingBrace = true;
455 if (State.Stack.back().AvoidBinPacking) {
461 State.Line->MustBeDeclaration))
462 State.Stack.back().BreakBeforeParameter = true;
468 unsigned ContinuationIndenter::moveStateToNextToken(LineState &State,
470 const FormatToken &Current = *State.NextToken;
471 assert(State.Stack.size());
474 State.Stack.back().AvoidBinPacking = true;
475 if (Current.is(tok::lessless) && State.Stack.back().FirstLessLess == 0)
476 State.Stack.back().FirstLessLess = State.Column;
478 State.Stack.back().StartOfArraySubscripts == 0)
479 State.Stack.back().StartOfArraySubscripts = State.Column;
484 State.Stack.back().QuestionColumn = State.Column;
486 State.LowestLevelOnLine =
487 std::min(State.LowestLevelOnLine, State.ParenLevel);
489 State.Stack.back().StartOfFunctionCall =
490 Current.LastInChainOfCalls ? 0 : State.Column + Current.ColumnWidth;
497 State.Stack.back().Indent =
498 State.Column + (Style.BreakConstructorInitializersBeforeComma ? 0 : 2);
500 State.Stack.back().AvoidBinPacking = true;
501 State.Stack.back().BreakBeforeParameter = false;
508 State.Stack.back().Indent += Style.ContinuationIndentWidth;
523 ParenState NewParenState = State.Stack.back();
531 std::max(std::max(State.Column, NewParenState.Indent),
532 State.Stack.back().LastSpace);
541 NewParenState.LastSpace = std::max(NewParenState.LastSpace, State.Column);
553 State.Stack.push_back(NewParenState);
561 unsigned NewIndentLevel = State.Stack.back().IndentLevel;
583 State.Stack.pop_back();
584 NewIndent = State.Stack.back().LastSpace + Style.IndentWidth;
588 NewIndent = State.Stack.back().LastSpace;
604 std::max(State.Stack.back().LastSpace,
605 State.Stack.back().StartOfFunctionCall);
614 getLengthToMatchingParen(Current) + State.Column >
615 getColumnLimit(State))
619 bool NoLineBreak = State.Stack.back().NoLineBreak ||
621 State.Stack.back().ContainsUnwrappedBuilder);
622 State.Stack.push_back(ParenState(NewIndent, NewIndentLevel,
623 State.Stack.back().LastSpace,
625 State.Stack.back().BreakBeforeParameter = BreakBeforeParameter;
626 ++State.ParenLevel;
631 if (State.Stack.size() > 1 &&
633 (Current.is(tok::r_brace) && State.NextToken != State.Line->First) ||
634 State.NextToken->Type == TT_TemplateCloser)) {
635 State.Stack.pop_back();
636 --State.ParenLevel;
642 State.Stack.back().StartOfArraySubscripts = 0;
651 unsigned VariablePos = State.Stack.back().VariablePos;
652 State.Stack.pop_back();
653 State.Stack.back().VariablePos = VariablePos;
657 if (Current.is(tok::string_literal) && State.StartOfStringLiteral == 0) {
658 State.StartOfStringLiteral = State.Column;
661 State.StartOfStringLiteral = 0;
664 State.Column += Current.ColumnWidth;
665 State.NextToken = State.NextToken->Next;
666 unsigned Penalty = breakProtrudingToken(Current, State, DryRun);
667 if (State.Column > getColumnLimit(State)) {
668 unsigned ExcessCharacters = State.Column - getColumnLimit(State);
678 Penalty += Previous->Role->format(State, this, DryRun);
684 LineState &State) {
686 for (unsigned i = 0, e = State.Stack.size(); i != e; ++i)
687 State.Stack[i].BreakBeforeParameter = true;
689 unsigned ColumnsUsed = State.Column;
692 State.Column = Current.LastLineColumnWidth;
694 if (ColumnsUsed > getColumnLimit(State))
695 return Style.PenaltyExcessCharacter * (ColumnsUsed - getColumnLimit(State));
719 LineState &State,
724 return addMultilineToken(Current, State);
736 unsigned StartColumn = State.Column - Current.ColumnWidth;
737 unsigned ColumnLimit = getColumnLimit(State);
748 if (State.Line->Type == LT_PreprocessorDirective)
769 Current, State.Line->Level, StartColumn, Prefix, Postfix,
770 State.Line->InPPDirective, Encoding, Style));
776 Current, State.Line->Level, StartColumn, Current.OriginalColumn,
777 !Current.Previous, State.Line->InPPDirective, Encoding, Style));
781 Token.reset(new BreakableLineComment(Current, State.Line->Level,
840 State.Column = RemainingTokenColumns;
847 for (unsigned i = 0, e = State.Stack.size(); i != e; ++i)
848 State.Stack[i].BreakBeforeParameter = true;
854 State.Stack.back().LastSpace = StartColumn;
859 unsigned ContinuationIndenter::getColumnLimit(const LineState &State) const {
861 return Style.ColumnLimit - (State.Line->InPPDirective ? 2 : 0);
864 bool ContinuationIndenter::NextIsMultilineString(const LineState &State) {
865 const FormatToken &Current = *State.NextToken;
877 if (State.Column + Current.ColumnWidth + Current.UnbreakableTailLength >