diff options
author | Nico Weber <nicolasweber@gmx.de> | 2013-01-09 21:15:03 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2013-01-09 21:15:03 +0000 |
commit | 8696a8d9e38e3f4fc267db9d1c5c47415e335316 (patch) | |
tree | 3749e04c7e42b17f296d53c6f68392624d99088d /clang/lib/Format/UnwrappedLineParser.cpp | |
parent | 5652a8df32cab65b4968caf3432ad4de220c46ac (diff) | |
download | bcm5719-llvm-8696a8d9e38e3f4fc267db9d1c5c47415e335316.tar.gz bcm5719-llvm-8696a8d9e38e3f4fc267db9d1c5c47415e335316.zip |
Formatting: Add support for @protocol.
Pull pieces of the @interface code into reusable methods.
llvm-svn: 172001
Diffstat (limited to 'clang/lib/Format/UnwrappedLineParser.cpp')
-rw-r--r-- | clang/lib/Format/UnwrappedLineParser.cpp | 56 |
1 files changed, 40 insertions, 16 deletions
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index 131d982906b..688937c1e6a 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -210,6 +210,8 @@ void UnwrappedLineParser::parseStructuralElement() { return parseAccessSpecifier(); case tok::objc_interface: return parseObjCInterface(); + case tok::objc_protocol: + return parseObjCProtocol(); default: break; } @@ -496,6 +498,25 @@ void UnwrappedLineParser::parseStructOrClass() { } while (!eof()); } +void UnwrappedLineParser::parseObjCProtocolList() { + assert(FormatTok.Tok.is(tok::less) && "'<' expected."); + do + nextToken(); + while (!eof() && FormatTok.Tok.isNot(tok::greater)); + nextToken(); // Skip '>'. +} + +void UnwrappedLineParser::parseObjCUntilAtEnd() { + do { + if (FormatTok.Tok.isObjCAtKeyword(tok::objc_end)) { + nextToken(); + addUnwrappedLine(); + break; + } + parseStructuralElement(); + } while (!eof()); +} + void UnwrappedLineParser::parseObjCInterface() { nextToken(); nextToken(); // interface name @@ -508,13 +529,8 @@ void UnwrappedLineParser::parseObjCInterface() { // Skip category, if present. parseParens(); - // Skip protocol list, if present. - if (FormatTok.Tok.is(tok::less)) { - do - nextToken(); - while (!eof() && FormatTok.Tok.isNot(tok::greater)); - nextToken(); // Skip '>'. - } + if (FormatTok.Tok.is(tok::less)) + parseObjCProtocolList(); // If instance variables are present, keep the '{' on the first line too. if (FormatTok.Tok.is(tok::l_brace)) @@ -524,16 +540,24 @@ void UnwrappedLineParser::parseObjCInterface() { // variables, this ends the @interface line. addUnwrappedLine(); - // Read everything up to the @end. - do { - if (FormatTok.Tok.isObjCAtKeyword(tok::objc_end)) { - nextToken(); - addUnwrappedLine(); - break; - } + parseObjCUntilAtEnd(); +} - parseStructuralElement(); - } while (!eof()); +void UnwrappedLineParser::parseObjCProtocol() { + nextToken(); + nextToken(); // protocol name + + if (FormatTok.Tok.is(tok::less)) + parseObjCProtocolList(); + + // Check for protocol declaration. + if (FormatTok.Tok.is(tok::semi)) { + nextToken(); + return addUnwrappedLine(); + } + + addUnwrappedLine(); + parseObjCUntilAtEnd(); } void UnwrappedLineParser::addUnwrappedLine() { |