[cfe-commits] r141334 - in /cfe/trunk: include/clang/Parse/Parser.h include/clang/Sema/Sema.h lib/Parse/ParseObjc.cpp lib/Sema/Sema.cpp lib/Sema/SemaDecl.cpp lib/Sema/SemaDeclAttr.cpp lib/Sema/SemaDeclObjC.cpp lib/Sema/SemaExpr.cpp test/SemaObjC/attr-deprecated.m test/SemaObjC/class-unavail-warning.m

Fariborz Jahanian fjahanian at apple.com
Thu Oct 6 17:28:26 PDT 2011


On Oct 6, 2011, at 4:23 PM, Argyrios Kyrtzidis wrote:

> Author: akirtzidis
> Date: Thu Oct  6 18:23:20 2011
> New Revision: 141334
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=141334&view=rev
> Log:
> When using an unavailable/deprecated interface Foo inside Foo's interface/implementation
> don't emit unavailable errors.
> 
> Modified:
>    cfe/trunk/include/clang/Parse/Parser.h
>    cfe/trunk/include/clang/Sema/Sema.h
>    cfe/trunk/lib/Parse/ParseObjc.cpp
>    cfe/trunk/lib/Sema/Sema.cpp
>    cfe/trunk/lib/Sema/SemaDecl.cpp
>    cfe/trunk/lib/Sema/SemaDeclAttr.cpp
>    cfe/trunk/lib/Sema/SemaDeclObjC.cpp
>    cfe/trunk/lib/Sema/SemaExpr.cpp
>    cfe/trunk/test/SemaObjC/attr-deprecated.m
>    cfe/trunk/test/SemaObjC/class-unavail-warning.m
> 
> Modified: cfe/trunk/include/clang/Parse/Parser.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Parser.h?rev=141334&r1=141333&r2=141334&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Parse/Parser.h (original)
> +++ cfe/trunk/include/clang/Parse/Parser.h Thu Oct  6 18:23:20 2011
> @@ -520,11 +520,11 @@
>     explicit ObjCDeclContextSwitch(Parser &p) : P(p), 
>                DC(p.getObjCDeclContext()) {
>       if (DC)
> -        P.Actions.ActOnObjCContainerFinishDefinition();
> +        P.Actions.ActOnObjCTemporaryExitContainerContext();
>     }
>     ~ObjCDeclContextSwitch() {
>       if (DC)
> -        P.Actions.ActOnObjCContainerStartDefinition(DC);
> +        P.Actions.ActOnObjCReenterContainerContext();
>     }
>   };
> 
> 
> Modified: cfe/trunk/include/clang/Sema/Sema.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=141334&r1=141333&r2=141334&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Sema/Sema.h (original)
> +++ cfe/trunk/include/clang/Sema/Sema.h Thu Oct  6 18:23:20 2011
> @@ -202,6 +202,10 @@
>   /// CurContext - This is the current declaration context of parsing.
>   DeclContext *CurContext;
> 
> +  /// \brief Generally null except when we temporarily switch decl contexts,
> +  /// like in \see ActOnObjCTemporaryExitContainerContext.
> +  DeclContext *OriginalLexicalContext;
> +
>   /// VAListTagName - The declaration name corresponding to __va_list_tag.
>   /// This is used as part of a hack to omit that class from ADL results.
>   DeclarationName VAListTagName;
> @@ -1224,7 +1228,7 @@
>   /// struct, or union).
>   void ActOnTagStartDefinition(Scope *S, Decl *TagDecl);
> 
> -  void ActOnObjCContainerStartDefinition(Decl *IDecl);
> +  Decl *ActOnObjCContainerStartDefinition(Decl *IDecl);
> 
>   /// ActOnStartCXXMemberDeclarations - Invoked when we have parsed a
>   /// C++ record definition's base-specifiers clause and are starting its
> @@ -1240,6 +1244,13 @@
> 
>   void ActOnObjCContainerFinishDefinition();
> 
> +  /// \brief Invoked when we must temporarily exit the objective-c container
> +  /// scope for parsing/looking-up C constructs.
> +  ///
> +  /// Must be followed by a call to \see ActOnObjCReenterContainerContext
> +  void ActOnObjCTemporaryExitContainerContext();
> +  void ActOnObjCReenterContainerContext();
> +
>   /// ActOnTagDefinitionError - Invoked when there was an unrecoverable
>   /// error parsing the definition of a tag.
>   void ActOnTagDefinitionError(Scope *S, Decl *TagDecl);
> @@ -6150,6 +6161,10 @@
>   Scope *getCurScope() const { return CurScope; }
> 
>   Decl *getObjCDeclContext() const;
> +
> +  DeclContext *getCurLexicalContext() const {
> +    return OriginalLexicalContext ? OriginalLexicalContext : CurContext;
> +  }
> };
> 
> /// \brief RAII object that enters a new expression evaluation context.
> 
> Modified: cfe/trunk/lib/Parse/ParseObjc.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=141334&r1=141333&r2=141334&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Parse/ParseObjc.cpp (original)
> +++ cfe/trunk/lib/Parse/ParseObjc.cpp Thu Oct  6 18:23:20 2011
> @@ -336,7 +336,6 @@
>   tok::ObjCKeywordKind MethodImplKind = tok::objc_not_keyword;
> 
>   SourceRange AtEnd;
> -  Actions.ActOnObjCContainerStartDefinition(CDecl);

Here do you now push this context? 
> 
>   while (1) {
>     // If this is a method prototype, parse it.
> @@ -1195,6 +1194,7 @@
>   SmallVector<Decl *, 32> AllIvarDecls;
> 
>   ParseScope ClassScope(this, Scope::DeclScope|Scope::ClassScope);
> +  ObjCDeclContextSwitch ObjCDC(*this);
> 
>   SourceLocation LBraceLoc = ConsumeBrace(); // the "{"
> 
> @@ -1441,7 +1441,6 @@
>                                     atLoc, nameId, nameLoc, categoryId,
>                                     categoryLoc);
> 
> -    Actions.ActOnObjCContainerStartDefinition(ImplCatType);

And this?

>     ObjCImpDecl = ImplCatType;
>     PendingObjCImpDecl.push_back(ObjCImpDecl);
>     return 0;
> @@ -1466,7 +1465,6 @@
>   if (Tok.is(tok::l_brace)) // we have ivars
>     ParseObjCClassInstanceVariables(ImplClsType, tok::objc_private, atLoc);
> 
> -  Actions.ActOnObjCContainerStartDefinition(ImplClsType);
And this?

- Fariborz





More information about the cfe-commits mailing list