Formatter: @optional and @required go on their own line.

Previously:
@protocol myProtocol
- (void)mandatoryWithInt:(int)i;
@optional - (void) optional;
@required - (void) required;
@end

Now:
@protocol myProtocol
- (void)mandatoryWithInt:(int)i;
@optional
- (void)optional;
@required
- (void)required;
@end



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172023 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp
index e271ba2..beea48e 100644
--- a/lib/Format/Format.cpp
+++ b/lib/Format/Format.cpp
@@ -273,6 +273,7 @@
   void addTokenToState(bool Newline, bool DryRun, IndentState &State) {
     const AnnotatedToken &Current = *State.NextToken;
     const AnnotatedToken &Previous = *State.NextToken->Parent;
+    assert(State.Indent.size());
     unsigned ParenLevel = State.Indent.size() - 1;
 
     if (Newline) {
@@ -357,6 +358,7 @@
   /// accordingly.
   void moveStateToNextToken(IndentState &State) {
     const AnnotatedToken &Current = *State.NextToken;
+    assert(State.Indent.size());
     unsigned ParenLevel = State.Indent.size() - 1;
 
     if (Current.is(tok::lessless) && State.FirstLessLess[ParenLevel] == 0)
diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp
index c049ac6..9b2a1e9 100644
--- a/lib/Format/UnwrappedLineParser.cpp
+++ b/lib/Format/UnwrappedLineParser.cpp
@@ -215,6 +215,11 @@
       return parseObjCProtocol();
     case tok::objc_end:
       return; // Handled by the caller.
+    case tok::objc_optional:
+    case tok::objc_required:
+      nextToken();
+      addUnwrappedLine();
+      return;
     default:
       break;
     }