]> granicus.if.org Git - clang/commitdiff
Lift the ObjCPropertyCallback out of local scope to unbreak VS2005 builds.
authorJohn McCall <rjmccall@apple.com>
Thu, 3 Dec 2009 22:31:13 +0000 (22:31 +0000)
committerJohn McCall <rjmccall@apple.com>
Thu, 3 Dec 2009 22:31:13 +0000 (22:31 +0000)
Make it an inner class of Parser to assuage access control.
No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90491 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Parse/Parser.h
lib/Parse/ParseObjc.cpp

index 81a80ebcbc61fceee13ae8e010c5d191f0d426f0..d906b09d9bb7c72b22583d9627cc934b6efbcffa 100644 (file)
@@ -1087,6 +1087,7 @@ private:
   private:
     virtual void _anchor();
   };
+  struct ObjCPropertyCallback;
 
   void ParseStructDeclaration(DeclSpec &DS, FieldCallback &Callback);
 
index 295625ae272db5a01b58ffd9965dc84d9ed4e02b..04d2a2c6c6f693ec8788fe8c58be1b9d31f98157 100644 (file)
@@ -228,6 +228,63 @@ Parser::DeclPtrTy Parser::ParseObjCAtInterfaceDeclaration(
   return ClsType;
 }
 
+/// The Objective-C property callback.  This should be defined where
+/// it's used, but instead it's been lifted to here to support VS2005.
+struct Parser::ObjCPropertyCallback : FieldCallback {
+  Parser &P;
+  DeclPtrTy IDecl;
+  llvm::SmallVectorImpl<DeclPtrTy> &Props;
+  ObjCDeclSpec &OCDS;
+  SourceLocation AtLoc;
+  tok::ObjCKeywordKind MethodImplKind;
+        
+  ObjCPropertyCallback(Parser &P, DeclPtrTy IDecl,
+                       llvm::SmallVectorImpl<DeclPtrTy> &Props,
+                       ObjCDeclSpec &OCDS, SourceLocation AtLoc,
+                       tok::ObjCKeywordKind MethodImplKind) :
+    P(P), IDecl(IDecl), Props(Props), OCDS(OCDS), AtLoc(AtLoc),
+    MethodImplKind(MethodImplKind) {
+  }
+
+  DeclPtrTy invoke(FieldDeclarator &FD) {
+    if (FD.D.getIdentifier() == 0) {
+      P.Diag(AtLoc, diag::err_objc_property_requires_field_name)
+        << FD.D.getSourceRange();
+      return DeclPtrTy();
+    }
+    if (FD.BitfieldSize) {
+      P.Diag(AtLoc, diag::err_objc_property_bitfield)
+        << FD.D.getSourceRange();
+      return DeclPtrTy();
+    }
+
+    // Install the property declarator into interfaceDecl.
+    IdentifierInfo *SelName =
+      OCDS.getGetterName() ? OCDS.getGetterName() : FD.D.getIdentifier();
+
+    Selector GetterSel =
+      P.PP.getSelectorTable().getNullarySelector(SelName);
+    IdentifierInfo *SetterName = OCDS.getSetterName();
+    Selector SetterSel;
+    if (SetterName)
+      SetterSel = P.PP.getSelectorTable().getSelector(1, &SetterName);
+    else
+      SetterSel = SelectorTable::constructSetterName(P.PP.getIdentifierTable(),
+                                                     P.PP.getSelectorTable(),
+                                                     FD.D.getIdentifier());
+    bool isOverridingProperty = false;
+    DeclPtrTy Property =
+      P.Actions.ActOnProperty(P.CurScope, AtLoc, FD, OCDS,
+                              GetterSel, SetterSel, IDecl,
+                              &isOverridingProperty,
+                              MethodImplKind);
+    if (!isOverridingProperty)
+      Props.push_back(Property);
+
+    return Property;
+  }
+};
+
 ///   objc-interface-decl-list:
 ///     empty
 ///     objc-interface-decl-list objc-property-decl [OBJC2]
@@ -329,61 +386,8 @@ void Parser::ParseObjCInterfaceDeclList(DeclPtrTy interfaceDecl,
         ParseObjCPropertyAttribute(OCDS, interfaceDecl,
                                    allMethods.data(), allMethods.size());
 
-      struct ObjCPropertyCallback : FieldCallback {
-        Parser &P;
-        DeclPtrTy IDecl;
-        llvm::SmallVectorImpl<DeclPtrTy> &Props;
-        ObjCDeclSpec &OCDS;
-        SourceLocation AtLoc;
-        tok::ObjCKeywordKind MethodImplKind;
-        
-        ObjCPropertyCallback(Parser &P, DeclPtrTy IDecl,
-                             llvm::SmallVectorImpl<DeclPtrTy> &Props,
-                             ObjCDeclSpec &OCDS, SourceLocation AtLoc,
-                             tok::ObjCKeywordKind MethodImplKind) :
-          P(P), IDecl(IDecl), Props(Props), OCDS(OCDS), AtLoc(AtLoc),
-          MethodImplKind(MethodImplKind) {
-        }
-
-        DeclPtrTy invoke(FieldDeclarator &FD) {
-          if (FD.D.getIdentifier() == 0) {
-            P.Diag(AtLoc, diag::err_objc_property_requires_field_name)
-              << FD.D.getSourceRange();
-            return DeclPtrTy();
-          }
-          if (FD.BitfieldSize) {
-            P.Diag(AtLoc, diag::err_objc_property_bitfield)
-              << FD.D.getSourceRange();
-            return DeclPtrTy();
-          }
-
-          // Install the property declarator into interfaceDecl.
-          IdentifierInfo *SelName =
-            OCDS.getGetterName() ? OCDS.getGetterName() : FD.D.getIdentifier();
-
-          Selector GetterSel =
-            P.PP.getSelectorTable().getNullarySelector(SelName);
-          IdentifierInfo *SetterName = OCDS.getSetterName();
-          Selector SetterSel;
-          if (SetterName)
-            SetterSel = P.PP.getSelectorTable().getSelector(1, &SetterName);
-          else
-            SetterSel = SelectorTable::constructSetterName(P.PP.getIdentifierTable(),
-                                                           P.PP.getSelectorTable(),
-                                                           FD.D.getIdentifier());
-          bool isOverridingProperty = false;
-          DeclPtrTy Property =
-            P.Actions.ActOnProperty(P.CurScope, AtLoc, FD, OCDS,
-                                    GetterSel, SetterSel, IDecl,
-                                    &isOverridingProperty,
-                                    MethodImplKind);
-          if (!isOverridingProperty)
-            Props.push_back(Property);
-
-          return Property;
-        }
-      } Callback(*this, interfaceDecl, allProperties,
-                 OCDS, AtLoc, MethodImplKind);
+      ObjCPropertyCallback Callback(*this, interfaceDecl, allProperties,
+                                    OCDS, AtLoc, MethodImplKind);
 
       // Parse all the comma separated declarators.
       DeclSpec DS;