diff options
author | Sebastian Redl <sebastian.redl@getdesigned.at> | 2008-12-21 12:04:03 +0000 |
---|---|---|
committer | Sebastian Redl <sebastian.redl@getdesigned.at> | 2008-12-21 12:04:03 +0000 |
commit | 52f03bac607d5b4e0cd9a89aaa97246db2105ded (patch) | |
tree | 7d3324d86562146e91f95bba1c5a15075303dbc1 /clang/lib/Sema/SemaStmt.cpp | |
parent | 8de8234de4ca3f13ae3bf794da5fe82b5fc2b1cc (diff) | |
download | bcm5719-llvm-52f03bac607d5b4e0cd9a89aaa97246db2105ded.tar.gz bcm5719-llvm-52f03bac607d5b4e0cd9a89aaa97246db2105ded.zip |
Convert a few Stmt actions to smart pointers.
llvm-svn: 61309
Diffstat (limited to 'clang/lib/Sema/SemaStmt.cpp')
-rw-r--r-- | clang/lib/Sema/SemaStmt.cpp | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index 97cad60a19f..22a9617eb7f 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -20,31 +20,31 @@ #include "clang/Basic/Diagnostic.h" using namespace clang; -Sema::StmtResult Sema::ActOnExprStmt(ExprTy *expr) { - Expr *E = static_cast<Expr*>(expr); +Sema::OwningStmtResult Sema::ActOnExprStmt(ExprArg expr) { + Expr *E = static_cast<Expr*>(expr.release()); assert(E && "ActOnExprStmt(): missing expression"); - + // C99 6.8.3p2: The expression in an expression statement is evaluated as a // void expression for its side effects. Conversion to void allows any // operand, even incomplete types. - + // Same thing in for stmt first clause (when expr) and third clause. - return E; + return Owned(static_cast<Stmt*>(E)); } -Sema::StmtResult Sema::ActOnNullStmt(SourceLocation SemiLoc) { - return new NullStmt(SemiLoc); +Sema::OwningStmtResult Sema::ActOnNullStmt(SourceLocation SemiLoc) { + return Owned(new NullStmt(SemiLoc)); } -Sema::StmtResult Sema::ActOnDeclStmt(DeclTy *decl, SourceLocation StartLoc, - SourceLocation EndLoc) { +Sema::OwningStmtResult Sema::ActOnDeclStmt(DeclTy *decl, + SourceLocation StartLoc, + SourceLocation EndLoc) { if (decl == 0) - return true; - + return StmtError(); + ScopedDecl *SD = cast<ScopedDecl>(static_cast<Decl *>(decl)); - - + // This is a temporary hack until we are always passing around // DeclGroupRefs. llvm::SmallVector<Decl*, 10> decls; @@ -56,21 +56,22 @@ Sema::StmtResult Sema::ActOnDeclStmt(DeclTy *decl, SourceLocation StartLoc, } assert (!decls.empty()); - + if (decls.size() == 1) { DeclGroupOwningRef DG(*decls.begin()); - return new DeclStmt(DG, StartLoc, EndLoc); + return Owned(new DeclStmt(DG, StartLoc, EndLoc)); } else { DeclGroupOwningRef DG(DeclGroup::Create(Context, decls.size(), &decls[0])); - return new DeclStmt(DG, StartLoc, EndLoc); + return Owned(new DeclStmt(DG, StartLoc, EndLoc)); } } -Action::StmtResult +Action::OwningStmtResult Sema::ActOnCompoundStmt(SourceLocation L, SourceLocation R, - StmtTy **elts, unsigned NumElts, bool isStmtExpr) { - Stmt **Elts = reinterpret_cast<Stmt**>(elts); + MultiStmtArg elts, bool isStmtExpr) { + unsigned NumElts = elts.size(); + Stmt **Elts = reinterpret_cast<Stmt**>(elts.release()); // If we're in C89 mode, check that we don't have any decls after stmts. If // so, emit an extension diagnostic. if (!getLangOptions().C99 && !getLangOptions().CPlusPlus) { @@ -111,11 +112,11 @@ Sema::ActOnCompoundStmt(SourceLocation L, SourceLocation R, else if (const UnaryOperator *UO = dyn_cast<UnaryOperator>(E)) Diag(UO->getOperatorLoc(), diag::warn_unused_expr) << UO->getSubExpr()->getSourceRange(); - else + else Diag(E->getExprLoc(), diag::warn_unused_expr) << E->getSourceRange(); } - - return new CompoundStmt(Elts, NumElts, L, R); + + return Owned(new CompoundStmt(Elts, NumElts, L, R)); } Action::StmtResult |