// Check whether the UnwrappedLine can be put onto a single line. If so,
// this is bound to be the optimal solution (by definition) and we don't
- // need to analyze the entire solution space.
+ // need to analyze the entire solution space.
unsigned Columns = State.Column;
bool FitsOnALine = true;
for (unsigned i = 1, n = Line.Tokens.size(); i != n; ++i) {
return true;
}
if (Tokens[Index].Tok.is(tok::r_paren) ||
- Tokens[Index].Tok.is(tok::r_square))
+ Tokens[Index].Tok.is(tok::r_square) ||
+ Tokens[Index].Tok.is(tok::r_brace))
return false;
if (Tokens[Index].Tok.is(tok::pipepipe) ||
Tokens[Index].Tok.is(tok::ampamp) ||
Tokens[Index].Tok.is(tok::question) ||
Tokens[Index].Tok.is(tok::colon))
return false;
- consumeToken();
+ if (!consumeToken())
+ return false;
}
return false;
}
next();
return true;
}
- if (Tokens[Index].Tok.is(tok::r_square))
+ if (Tokens[Index].Tok.is(tok::r_square) ||
+ Tokens[Index].Tok.is(tok::r_brace))
+ return false;
+ if (!consumeToken())
return false;
- consumeToken();
}
return false;
}
next();
return true;
}
- if (Tokens[Index].Tok.is(tok::r_paren))
+ if (Tokens[Index].Tok.is(tok::r_paren) ||
+ Tokens[Index].Tok.is(tok::r_brace))
+ return false;
+ if (!consumeToken())
return false;
- consumeToken();
}
return false;
}
next();
return true;
}
- consumeToken();
+ if (!consumeToken())
+ return false;
}
return false;
}
return false;
}
- void consumeToken() {
+ bool consumeToken() {
unsigned CurrentIndex = Index;
next();
switch (Tokens[CurrentIndex].Tok.getKind()) {
case tok::l_paren:
- parseParens();
+ if (!parseParens())
+ return false;
if (Index < Tokens.size() && Tokens[Index].Tok.is(tok::colon)) {
Annotations[Index].Type = TokenAnnotation::TT_CtorInitializerColon;
next();
}
break;
case tok::l_square:
- parseSquare();
+ if (!parseSquare())
+ return false;
break;
case tok::less:
if (parseAngle())
Index = CurrentIndex + 1;
}
break;
+ case tok::r_paren:
+ case tok::r_square:
+ return false;
case tok::greater:
Annotations[CurrentIndex].Type = TokenAnnotation::TT_BinaryOperator;
break;
default:
break;
}
+ return true;
}
void parseIncludeDirective() {
}
}
- void parseLine() {
+ bool parseLine() {
if (Tokens[Index].Tok.is(tok::hash)) {
parsePreprocessorDirective();
- return;
+ return true;
}
while (Index < Tokens.size()) {
- consumeToken();
+ if (!consumeToken())
+ return false;
}
+ return true;
}
void next() {
unsigned Index;
};
- void annotate() {
+ bool annotate() {
Annotations.clear();
for (int i = 0, e = Line.Tokens.size(); i != e; ++i) {
Annotations.push_back(TokenAnnotation());
}
AnnotatingParser Parser(Line.Tokens, Annotations);
- Parser.parseLine();
+ if (!Parser.parseLine())
+ return false;
determineTokenTypes();
bool IsObjCMethodDecl =
if (Annotation.MustBreakBefore)
Annotation.CanBreakBefore = true;
}
+ return true;
}
const std::vector<TokenAnnotation> &getAnnotations() {
continue;
TokenAnnotator Annotator(TheLine, Style, SourceMgr);
- Annotator.annotate();
+ if (!Annotator.annotate())
+ return;
UnwrappedLineFormatter Formatter(Style, SourceMgr, TheLine,
Annotator.getAnnotations(), Replaces,
StructuralError);