objc - Simplify switing objc decl context by using
a context switching object.

llvm-svn: 138248
diff --git a/clang/lib/Parse/ParseTemplate.cpp b/clang/lib/Parse/ParseTemplate.cpp
index d0e6349..b70a51d 100644
--- a/clang/lib/Parse/ParseTemplate.cpp
+++ b/clang/lib/Parse/ParseTemplate.cpp
@@ -27,20 +27,13 @@
 Parser::ParseDeclarationStartingWithTemplate(unsigned Context,
                                              SourceLocation &DeclEnd,
                                              AccessSpecifier AS) {
-  Decl *DC = getObjCDeclContext();
-  if (DC)
-    Actions.ActOnObjCContainerFinishDefinition(DC);
+  ObjCDeclContextSwitch ObjCDC(*this);
+  
   if (Tok.is(tok::kw_template) && NextToken().isNot(tok::less)) {
-    Decl *Res = ParseExplicitInstantiation(SourceLocation(), ConsumeToken(),
+    return ParseExplicitInstantiation(SourceLocation(), ConsumeToken(),
                                            DeclEnd);
-    if (DC)
-      Actions.ActOnObjCContainerStartDefinition(DC);
-    return Res;
   }
-  Decl *Res = ParseTemplateDeclarationOrSpecialization(Context, DeclEnd, AS);
-  if (DC)
-    Actions.ActOnObjCContainerStartDefinition(DC);
-  return Res;
+  return ParseTemplateDeclarationOrSpecialization(Context, DeclEnd, AS);
 }
 
 /// \brief RAII class that manages the template parameter depth.