[cfe-commits] r60983 - in /cfe/trunk: Driver/PrintParserCallbacks.cpp include/clang/Parse/Action.h lib/Parse/ParseDecl.cpp lib/Parse/ParseObjc.cpp lib/Parse/ParseStmt.cpp lib/Parse/Parser.cpp lib/Sema/Sema.h lib/Sema/SemaDecl.cpp lib/Sema/SemaDeclCXX.cpp lib/Sema/SemaExprCXX.cpp
Sebastian Redl
sebastian.redl at getdesigned.at
Sat Dec 13 08:23:55 PST 2008
Author: cornedbee
Date: Sat Dec 13 10:23:55 2008
New Revision: 60983
URL: http://llvm.org/viewvc/llvm-project?rev=60983&view=rev
Log:
Some utilities for using the smart pointers in Actions, especially Sema. Convert a few functions.
Modified:
cfe/trunk/Driver/PrintParserCallbacks.cpp
cfe/trunk/include/clang/Parse/Action.h
cfe/trunk/lib/Parse/ParseDecl.cpp
cfe/trunk/lib/Parse/ParseObjc.cpp
cfe/trunk/lib/Parse/ParseStmt.cpp
cfe/trunk/lib/Parse/Parser.cpp
cfe/trunk/lib/Sema/Sema.h
cfe/trunk/lib/Sema/SemaDecl.cpp
cfe/trunk/lib/Sema/SemaDeclCXX.cpp
cfe/trunk/lib/Sema/SemaExprCXX.cpp
Modified: cfe/trunk/Driver/PrintParserCallbacks.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/PrintParserCallbacks.cpp?rev=60983&r1=60982&r2=60983&view=diff
==============================================================================
--- cfe/trunk/Driver/PrintParserCallbacks.cpp (original)
+++ cfe/trunk/Driver/PrintParserCallbacks.cpp Sat Dec 13 10:23:55 2008
@@ -108,7 +108,7 @@
/// This allows ActOnDeclarator to register "xx" prior to parsing the
/// initializer. The declaration above should still result in a warning,
/// since the reference to "xx" is uninitialized.
- virtual void AddInitializerToDecl(DeclTy *Dcl, ExprTy *Init) {
+ virtual void AddInitializerToDecl(DeclTy *Dcl, ExprArg Init) {
llvm::cout << __FUNCTION__ << "\n";
}
@@ -140,12 +140,12 @@
/// ActOnFunctionDefBody - This is called when a function body has completed
/// parsing. Decl is the DeclTy returned by ParseStartOfFunctionDef.
- virtual DeclTy *ActOnFinishFunctionBody(DeclTy *Decl, StmtTy *Body) {
+ virtual DeclTy *ActOnFinishFunctionBody(DeclTy *Decl, StmtArg Body) {
llvm::cout << __FUNCTION__ << "\n";
return 0;
}
- virtual DeclTy *ActOnFileScopeAsmDecl(SourceLocation Loc, ExprTy *AsmString) {
+ virtual DeclTy *ActOnFileScopeAsmDecl(SourceLocation Loc, ExprArg AsmString) {
llvm::cout << __FUNCTION__ << "\n";
return 0;
}
Modified: cfe/trunk/include/clang/Parse/Action.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Action.h?rev=60983&r1=60982&r2=60983&view=diff
==============================================================================
--- cfe/trunk/include/clang/Parse/Action.h (original)
+++ cfe/trunk/include/clang/Parse/Action.h Sat Dec 13 10:23:55 2008
@@ -87,6 +87,17 @@
typedef ASTMultiPtr<&ActionBase::DeleteExpr> MultiExprArg;
typedef ASTMultiPtr<&ActionBase::DeleteStmt> MultiStmtArg;
+
+ // Utilities for Action implementations to return smart results.
+
+ OwningExprResult ExprError() { return OwningExprResult(*this, true); }
+ OwningStmtResult StmtError() { return OwningStmtResult(*this, true); }
+ OwningExprResult ExprError(const DiagnosticBuilder&) { return ExprError(); }
+ OwningStmtResult StmtError(const DiagnosticBuilder&) { return StmtError(); }
+
+ OwningExprResult ExprEmpty() { return OwningExprResult(*this, false); }
+ OwningStmtResult StmtEmpty() { return OwningStmtResult(*this, false); }
+
/// Statistics.
virtual void PrintStats() const {}
//===--------------------------------------------------------------------===//
@@ -170,7 +181,7 @@
/// This allows ActOnDeclarator to register "xx" prior to parsing the
/// initializer. The declaration above should still result in a warning,
/// since the reference to "xx" is uninitialized.
- virtual void AddInitializerToDecl(DeclTy *Dcl, ExprTy *Init) {
+ virtual void AddInitializerToDecl(DeclTy *Dcl, ExprArg Init) {
return;
}
@@ -204,14 +215,14 @@
virtual void ObjCActOnStartOfMethodDef(Scope *FnBodyScope, DeclTy *D) {
return;
}
-
+
/// ActOnFunctionDefBody - This is called when a function body has completed
/// parsing. Decl is the DeclTy returned by ParseStartOfFunctionDef.
- virtual DeclTy *ActOnFinishFunctionBody(DeclTy *Decl, StmtTy *Body) {
+ virtual DeclTy *ActOnFinishFunctionBody(DeclTy *Decl, StmtArg Body) {
return Decl;
}
- virtual DeclTy *ActOnFileScopeAsmDecl(SourceLocation Loc, ExprTy *AsmString) {
+ virtual DeclTy *ActOnFileScopeAsmDecl(SourceLocation Loc, ExprArg AsmString) {
return 0;
}
Modified: cfe/trunk/lib/Parse/ParseDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=60983&r1=60982&r2=60983&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/ParseDecl.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDecl.cpp Sat Dec 13 10:23:55 2008
@@ -294,7 +294,7 @@
SkipUntil(tok::semi);
return 0;
}
- Actions.AddInitializerToDecl(LastDeclInGroup, Init.release());
+ Actions.AddInitializerToDecl(LastDeclInGroup, move_convert(Init));
} else if (Tok.is(tok::l_paren)) {
// Parse C++ direct initializer: '(' expression-list ')'
SourceLocation LParenLoc = ConsumeParen();
Modified: cfe/trunk/lib/Parse/ParseObjc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=60983&r1=60982&r2=60983&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/ParseObjc.cpp (original)
+++ cfe/trunk/lib/Parse/ParseObjc.cpp Sat Dec 13 10:23:55 2008
@@ -1364,12 +1364,12 @@
// If the function body could not be parsed, make a bogus compoundstmt.
if (FnBody.isInvalid())
FnBody = Actions.ActOnCompoundStmt(BraceLoc, BraceLoc, 0, 0, false);
-
+
// Leave the function body scope.
BodyScope.Exit();
-
+
// TODO: Pass argument information.
- Actions.ActOnFinishFunctionBody(MDecl, FnBody.release());
+ Actions.ActOnFinishFunctionBody(MDecl, move_convert(FnBody));
return MDecl;
}
Modified: cfe/trunk/lib/Parse/ParseStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseStmt.cpp?rev=60983&r1=60982&r2=60983&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/ParseStmt.cpp (original)
+++ cfe/trunk/lib/Parse/ParseStmt.cpp Sat Dec 13 10:23:55 2008
@@ -1240,5 +1240,5 @@
if (FnBody.isInvalid())
FnBody = Owned(Actions.ActOnCompoundStmt(L, R, 0, 0, false));
- return Actions.ActOnFinishFunctionBody(Decl, FnBody.release());
+ return Actions.ActOnFinishFunctionBody(Decl, move_convert(FnBody));
}
Modified: cfe/trunk/lib/Parse/Parser.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/Parser.cpp?rev=60983&r1=60982&r2=60983&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/Parser.cpp (original)
+++ cfe/trunk/lib/Parse/Parser.cpp Sat Dec 13 10:23:55 2008
@@ -342,7 +342,8 @@
"top-level asm block");
if (!Result.isInvalid())
- return Actions.ActOnFileScopeAsmDecl(Tok.getLocation(), Result.release());
+ return Actions.ActOnFileScopeAsmDecl(Tok.getLocation(),
+ move_convert(Result));
return 0;
}
case tok::at:
Modified: cfe/trunk/lib/Sema/Sema.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.h?rev=60983&r1=60982&r2=60983&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/Sema.h (original)
+++ cfe/trunk/lib/Sema/Sema.h Sat Dec 13 10:23:55 2008
@@ -39,6 +39,7 @@
class DeclSpec;
class NamedDecl;
class ScopedDecl;
+ class Stmt;
class Expr;
class InitListExpr;
class CallExpr;
@@ -242,6 +243,9 @@
virtual void DeleteExpr(ExprTy *E);
virtual void DeleteStmt(StmtTy *S);
+ OwningExprResult Owned(Expr* E) { return OwningExprResult(*this, E); }
+ OwningStmtResult Owned(Stmt* S) { return OwningStmtResult(*this, S); }
+
virtual void ActOnEndOfTranslationUnit();
//===--------------------------------------------------------------------===//
@@ -268,7 +272,7 @@
virtual void ActOnParamDefaultArgument(DeclTy *param,
SourceLocation EqualLoc,
ExprTy *defarg);
- void AddInitializerToDecl(DeclTy *dcl, ExprTy *init);
+ void AddInitializerToDecl(DeclTy *dcl, ExprArg init);
void ActOnUninitializedDecl(DeclTy *dcl);
virtual DeclTy *FinalizeDeclaratorGroup(Scope *S, DeclTy *Group);
@@ -276,11 +280,11 @@
virtual DeclTy *ActOnStartOfFunctionDef(Scope *S, DeclTy *D);
virtual void ObjCActOnStartOfMethodDef(Scope *S, DeclTy *D);
- virtual DeclTy *ActOnFinishFunctionBody(DeclTy *Decl, StmtTy *Body);
+ virtual DeclTy *ActOnFinishFunctionBody(DeclTy *Decl, StmtArg Body);
virtual DeclTy *ActOnLinkageSpec(SourceLocation Loc, SourceLocation LBrace,
SourceLocation RBrace, const char *Lang,
unsigned StrSize, DeclTy *D);
- virtual DeclTy *ActOnFileScopeAsmDecl(SourceLocation Loc, ExprTy *expr);
+ virtual DeclTy *ActOnFileScopeAsmDecl(SourceLocation Loc, ExprArg expr);
/// Scope actions.
virtual void ActOnPopScope(SourceLocation Loc, Scope *S);
Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=60983&r1=60982&r2=60983&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Sat Dec 13 10:23:55 2008
@@ -1884,9 +1884,9 @@
return true;
}
-void Sema::AddInitializerToDecl(DeclTy *dcl, ExprTy *init) {
+void Sema::AddInitializerToDecl(DeclTy *dcl, ExprArg init) {
Decl *RealDecl = static_cast<Decl *>(dcl);
- Expr *Init = static_cast<Expr *>(init);
+ Expr *Init = static_cast<Expr *>(init.release());
assert(Init && "missing initializer");
// If there is no declaration, there was an error parsing it. Just ignore
@@ -2281,10 +2281,11 @@
return FD;
}
-Sema::DeclTy *Sema::ActOnFinishFunctionBody(DeclTy *D, StmtTy *Body) {
+Sema::DeclTy *Sema::ActOnFinishFunctionBody(DeclTy *D, StmtArg BodyArg) {
Decl *dcl = static_cast<Decl *>(D);
+ Stmt *Body = static_cast<Stmt*>(BodyArg.release());
if (FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(dcl)) {
- FD->setBody((Stmt*)Body);
+ FD->setBody(Body);
assert(FD == getCurFunctionDecl() && "Function parsing confused");
} else if (ObjCMethodDecl *MD = dyn_cast_or_null<ObjCMethodDecl>(dcl)) {
MD->setBody((Stmt*)Body);
@@ -2309,7 +2310,7 @@
// formed.
if (Body) {
L->setSubStmt(new NullStmt(L->getIdentLoc()));
- cast<CompoundStmt>((Stmt*)Body)->push_back(L);
+ cast<CompoundStmt>(Body)->push_back(L);
} else {
// The whole function wasn't parsed correctly, just delete this.
delete L;
@@ -3358,9 +3359,9 @@
}
Sema::DeclTy *Sema::ActOnFileScopeAsmDecl(SourceLocation Loc,
- ExprTy *expr) {
- StringLiteral *AsmString = cast<StringLiteral>((Expr*)expr);
-
+ ExprArg expr) {
+ StringLiteral *AsmString = cast<StringLiteral>((Expr*)expr.release());
+
return FileScopeAsmDecl::Create(Context, Loc, AsmString);
}
Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=60983&r1=60982&r2=60983&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Sat Dec 13 10:23:55 2008
@@ -1391,7 +1391,7 @@
assert(NumExprs == 1 && "Expected 1 expression");
// Set the init expression, handles conversions.
- AddInitializerToDecl(Dcl, ExprTys[0]);
+ AddInitializerToDecl(Dcl, ExprArg(*this, ExprTys[0]));
}
/// PerformInitializationByConstructor - Perform initialization by
Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=60983&r1=60982&r2=60983&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Sat Dec 13 10:23:55 2008
@@ -645,7 +645,7 @@
DeclTy *Dcl = ActOnDeclarator(S, D, 0);
if (!Dcl)
return true;
- AddInitializerToDecl(Dcl, AssignExprVal);
+ AddInitializerToDecl(Dcl, ExprArg(*this, AssignExprVal));
// Mark this variable as one that is declared within a conditional.
if (VarDecl *VD = dyn_cast<VarDecl>((Decl *)Dcl))
More information about the cfe-commits
mailing list