[cfe-commits] r169531 - in /cfe/trunk: include/clang/AST/Decl.h include/clang/AST/DeclObjC.h include/clang/Sema/Sema.h lib/Parse/ParseStmt.cpp lib/Sema/SemaDecl.cpp lib/Serialization/ASTReaderDecl.cpp lib/Serialization/ASTWriterDecl.cpp
Jordan Rose
jordan_rose at apple.com
Thu Dec 6 11:19:28 PST 2012
Wouldn't this just be isDefined() && !hasBody()? Or will that get things like synthesized methods as well?
On Dec 6, 2012, at 10:59 , Argyrios Kyrtzidis <akyrtzi at gmail.com> wrote:
> Author: akirtzidis
> Date: Thu Dec 6 12:59:10 2012
> New Revision: 169531
>
> URL: http://llvm.org/viewvc/llvm-project?rev=169531&view=rev
> Log:
> Add a bit on FunctionDecl/ObjCMethodDecl to indicate if there was a body
> that was skipped by the parser.
>
> Modified:
> cfe/trunk/include/clang/AST/Decl.h
> cfe/trunk/include/clang/AST/DeclObjC.h
> cfe/trunk/include/clang/Sema/Sema.h
> cfe/trunk/lib/Parse/ParseStmt.cpp
> cfe/trunk/lib/Sema/SemaDecl.cpp
> cfe/trunk/lib/Serialization/ASTReaderDecl.cpp
> cfe/trunk/lib/Serialization/ASTWriterDecl.cpp
>
> Modified: cfe/trunk/include/clang/AST/Decl.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Decl.h?rev=169531&r1=169530&r2=169531&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/AST/Decl.h (original)
> +++ cfe/trunk/include/clang/AST/Decl.h Thu Dec 6 12:59:10 2012
> @@ -1472,6 +1472,10 @@
> bool IsLateTemplateParsed : 1;
> bool IsConstexpr : 1;
>
> + /// \brief Indicates if the function was a definition but its body was
> + /// skipped.
> + unsigned HasSkippedBody : 1;
> +
> /// \brief End part of this FunctionDecl's source range.
> ///
> /// We could compute the full range in getSourceRange(). However, when we're
> @@ -1782,6 +1786,10 @@
> /// \brief Determines whether this is a global function.
> bool isGlobal() const;
>
> + /// \brief True if the function was a definition but its body was skipped.
> + bool hasSkippedBody() const { return HasSkippedBody; }
> + void setHasSkippedBody(bool Skipped = true) { HasSkippedBody = Skipped; }
> +
> void setPreviousDeclaration(FunctionDecl * PrevDecl);
>
> virtual const FunctionDecl *getCanonicalDecl() const;
>
> Modified: cfe/trunk/include/clang/AST/DeclObjC.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclObjC.h?rev=169531&r1=169530&r2=169531&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/AST/DeclObjC.h (original)
> +++ cfe/trunk/include/clang/AST/DeclObjC.h Thu Dec 6 12:59:10 2012
> @@ -159,6 +159,9 @@
> /// method in the interface or its categories.
> unsigned IsOverriding : 1;
>
> + /// \brief Indicates if the method was a definition but its body was skipped.
> + unsigned HasSkippedBody : 1;
> +
> // Result type of this method.
> QualType MethodDeclType;
>
> @@ -429,6 +432,10 @@
> void getOverriddenMethods(
> SmallVectorImpl<const ObjCMethodDecl *> &Overridden) const;
>
> + /// \brief True if the method was a definition but its body was skipped.
> + bool hasSkippedBody() const { return HasSkippedBody; }
> + void setHasSkippedBody(bool Skipped = true) { HasSkippedBody = Skipped; }
> +
> /// \brief Returns the property associated with this method's selector.
> ///
> /// Note that even if this particular method is not marked as a property
>
> Modified: cfe/trunk/include/clang/Sema/Sema.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=169531&r1=169530&r2=169531&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Sema/Sema.h (original)
> +++ cfe/trunk/include/clang/Sema/Sema.h Thu Dec 6 12:59:10 2012
> @@ -1412,6 +1412,7 @@
> void computeNRVO(Stmt *Body, sema::FunctionScopeInfo *Scope);
> Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body);
> Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body, bool IsInstantiation);
> + Decl *ActOnSkippedFunctionBody(Decl *Decl);
>
> /// ActOnFinishDelayedAttribute - Invoked when we have finished parsing an
> /// attribute for which parsing is delayed.
>
> Modified: cfe/trunk/lib/Parse/ParseStmt.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseStmt.cpp?rev=169531&r1=169530&r2=169531&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Parse/ParseStmt.cpp (original)
> +++ cfe/trunk/lib/Parse/ParseStmt.cpp Thu Dec 6 12:59:10 2012
> @@ -2006,7 +2006,7 @@
> if (SkipFunctionBodies && Actions.canSkipFunctionBody(Decl) &&
> trySkippingFunctionBody()) {
> BodyScope.Exit();
> - return Actions.ActOnFinishFunctionBody(Decl, 0);
> + return Actions.ActOnSkippedFunctionBody(Decl);
> }
>
> PrettyDeclStackTraceEntry CrashInfo(Actions, Decl, LBraceLoc,
> @@ -2049,7 +2049,7 @@
> if (SkipFunctionBodies && Actions.canSkipFunctionBody(Decl) &&
> trySkippingFunctionBody()) {
> BodyScope.Exit();
> - return Actions.ActOnFinishFunctionBody(Decl, 0);
> + return Actions.ActOnSkippedFunctionBody(Decl);
> }
>
> SourceLocation LBraceLoc = Tok.getLocation();
>
> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=169531&r1=169530&r2=169531&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Thu Dec 6 12:59:10 2012
> @@ -8016,6 +8016,14 @@
> return !FD->isConstexpr();
> }
>
> +Decl *Sema::ActOnSkippedFunctionBody(Decl *Decl) {
> + if (FunctionDecl *FD = dyn_cast<FunctionDecl>(Decl))
> + FD->setHasSkippedBody();
> + else if (ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(Decl))
> + MD->setHasSkippedBody();
> + return ActOnFinishFunctionBody(Decl, 0);
> +}
> +
> Decl *Sema::ActOnFinishFunctionBody(Decl *D, Stmt *BodyArg) {
> return ActOnFinishFunctionBody(D, BodyArg, false);
> }
>
> Modified: cfe/trunk/lib/Serialization/ASTReaderDecl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderDecl.cpp?rev=169531&r1=169530&r2=169531&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTReaderDecl.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTReaderDecl.cpp Thu Dec 6 12:59:10 2012
> @@ -528,6 +528,7 @@
> FD->IsExplicitlyDefaulted = Record[Idx++];
> FD->HasImplicitReturnZero = Record[Idx++];
> FD->IsConstexpr = Record[Idx++];
> + FD->HasSkippedBody = Record[Idx++];
> FD->EndRangeLoc = ReadSourceLocation(Record, Idx);
>
> switch ((FunctionDecl::TemplatedKind)Record[Idx++]) {
> @@ -652,6 +653,7 @@
> MD->setPropertyAccessor(Record[Idx++]);
> MD->setDefined(Record[Idx++]);
> MD->IsOverriding = Record[Idx++];
> + MD->HasSkippedBody = Record[Idx++];
>
> MD->IsRedeclaration = Record[Idx++];
> MD->HasRedeclaration = Record[Idx++];
>
> Modified: cfe/trunk/lib/Serialization/ASTWriterDecl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterDecl.cpp?rev=169531&r1=169530&r2=169531&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTWriterDecl.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTWriterDecl.cpp Thu Dec 6 12:59:10 2012
> @@ -328,6 +328,7 @@
> Record.push_back(D->isExplicitlyDefaulted());
> Record.push_back(D->hasImplicitReturnZero());
> Record.push_back(D->isConstexpr());
> + Record.push_back(D->HasSkippedBody);
> Writer.AddSourceLocation(D->getLocEnd(), Record);
>
> Record.push_back(D->getTemplatedKind());
> @@ -419,6 +420,7 @@
> Record.push_back(D->isPropertyAccessor());
> Record.push_back(D->isDefined());
> Record.push_back(D->IsOverriding);
> + Record.push_back(D->HasSkippedBody);
>
> Record.push_back(D->IsRedeclaration);
> Record.push_back(D->HasRedeclaration);
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list