summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Redl <sebastian.redl@getdesigned.at>2008-12-28 16:13:43 +0000
committerSebastian Redl <sebastian.redl@getdesigned.at>2008-12-28 16:13:43 +0000
commit1cbb59182cb886eb3a23ee09e33821f064a0c24e (patch)
tree8b9bc1109bcf308ffc019d1f61a935730a158534
parent4f84ddccc8a39a6df96ad13b6ffda7b9a96d79a8 (diff)
downloadbcm5719-llvm-1cbb59182cb886eb3a23ee09e33821f064a0c24e.tar.gz
bcm5719-llvm-1cbb59182cb886eb3a23ee09e33821f064a0c24e.zip
Convert a two more statement actions to smart pointers.
llvm-svn: 61456
-rw-r--r--clang/Driver/PrintParserCallbacks.cpp19
-rw-r--r--clang/include/clang/Parse/Action.h16
-rw-r--r--clang/lib/Parse/ParseStmt.cpp10
-rw-r--r--clang/lib/Sema/Sema.h12
-rw-r--r--clang/lib/Sema/SemaStmt.cpp49
5 files changed, 57 insertions, 49 deletions
diff --git a/clang/Driver/PrintParserCallbacks.cpp b/clang/Driver/PrintParserCallbacks.cpp
index 291ee393c18..c5d754e73d8 100644
--- a/clang/Driver/PrintParserCallbacks.cpp
+++ b/clang/Driver/PrintParserCallbacks.cpp
@@ -269,17 +269,20 @@ namespace {
/// ActOnCaseStmt - Note that this handles the GNU 'case 1 ... 4' extension,
/// which can specify an RHS value.
- virtual StmtResult ActOnCaseStmt(SourceLocation CaseLoc, ExprTy *LHSVal,
- SourceLocation DotDotDotLoc, ExprTy *RHSVal,
- SourceLocation ColonLoc, StmtTy *SubStmt) {
+ virtual OwningStmtResult ActOnCaseStmt(SourceLocation CaseLoc,
+ ExprArg LHSVal,
+ SourceLocation DotDotDotLoc,
+ ExprArg RHSVal,
+ SourceLocation ColonLoc,
+ StmtArg SubStmt) {
llvm::cout << __FUNCTION__ << "\n";
- return 0;
+ return StmtEmpty();
}
- virtual StmtResult ActOnDefaultStmt(SourceLocation DefaultLoc,
- SourceLocation ColonLoc, StmtTy *SubStmt,
- Scope *CurScope){
+ virtual OwningStmtResult ActOnDefaultStmt(SourceLocation DefaultLoc,
+ SourceLocation ColonLoc,
+ StmtArg SubStmt, Scope *CurScope){
llvm::cout << __FUNCTION__ << "\n";
- return 0;
+ return StmtEmpty();
}
virtual StmtResult ActOnLabelStmt(SourceLocation IdentLoc, IdentifierInfo *II,
diff --git a/clang/include/clang/Parse/Action.h b/clang/include/clang/Parse/Action.h
index 335b97224c5..b55106a9c67 100644
--- a/clang/include/clang/Parse/Action.h
+++ b/clang/include/clang/Parse/Action.h
@@ -366,15 +366,15 @@ public:
/// ActOnCaseStmt - Note that this handles the GNU 'case 1 ... 4' extension,
/// which can specify an RHS value.
- virtual StmtResult ActOnCaseStmt(SourceLocation CaseLoc, ExprTy *LHSVal,
- SourceLocation DotDotDotLoc, ExprTy *RHSVal,
- SourceLocation ColonLoc, StmtTy *SubStmt) {
- return 0;
+ virtual OwningStmtResult ActOnCaseStmt(SourceLocation CaseLoc, ExprArg LHSVal,
+ SourceLocation DotDotDotLoc, ExprArg RHSVal,
+ SourceLocation ColonLoc, StmtArg SubStmt) {
+ return StmtEmpty();
}
- virtual StmtResult ActOnDefaultStmt(SourceLocation DefaultLoc,
- SourceLocation ColonLoc, StmtTy *SubStmt,
- Scope *CurScope){
- return 0;
+ virtual OwningStmtResult ActOnDefaultStmt(SourceLocation DefaultLoc,
+ SourceLocation ColonLoc,
+ StmtArg SubStmt, Scope *CurScope){
+ return StmtEmpty();
}
virtual StmtResult ActOnLabelStmt(SourceLocation IdentLoc, IdentifierInfo *II,
diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp
index c853ecf8842..9f525a5491e 100644
--- a/clang/lib/Parse/ParseStmt.cpp
+++ b/clang/lib/Parse/ParseStmt.cpp
@@ -271,9 +271,9 @@ Parser::OwningStmtResult Parser::ParseCaseStatement() {
if (SubStmt.isInvalid())
SubStmt = Actions.ActOnNullStmt(ColonLoc);
- return Owned(Actions.ActOnCaseStmt(CaseLoc, LHS.release(), DotDotDotLoc,
- RHS.release(), ColonLoc,
- SubStmt.release()));
+ return Actions.ActOnCaseStmt(CaseLoc, move_convert(LHS), DotDotDotLoc,
+ move_convert(RHS), ColonLoc,
+ move_convert(SubStmt));
}
/// ParseDefaultStatement
@@ -303,8 +303,8 @@ Parser::OwningStmtResult Parser::ParseDefaultStatement() {
if (SubStmt.isInvalid())
return StmtError();
- return Owned(Actions.ActOnDefaultStmt(DefaultLoc, ColonLoc,
- SubStmt.release(), CurScope));
+ return Actions.ActOnDefaultStmt(DefaultLoc, ColonLoc,
+ move_convert(SubStmt), CurScope);
}
diff --git a/clang/lib/Sema/Sema.h b/clang/lib/Sema/Sema.h
index 94e8a3ccccd..386639061dc 100644
--- a/clang/lib/Sema/Sema.h
+++ b/clang/lib/Sema/Sema.h
@@ -567,12 +567,12 @@ public:
bool isStmtExpr);
virtual OwningStmtResult ActOnDeclStmt(DeclTy *Decl, SourceLocation StartLoc,
SourceLocation EndLoc);
- virtual StmtResult ActOnCaseStmt(SourceLocation CaseLoc, ExprTy *LHSVal,
- SourceLocation DotDotDotLoc, ExprTy *RHSVal,
- SourceLocation ColonLoc, StmtTy *SubStmt);
- virtual StmtResult ActOnDefaultStmt(SourceLocation DefaultLoc,
- SourceLocation ColonLoc, StmtTy *SubStmt,
- Scope *CurScope);
+ virtual OwningStmtResult ActOnCaseStmt(SourceLocation CaseLoc, ExprArg LHSVal,
+ SourceLocation DotDotDotLoc, ExprArg RHSVal,
+ SourceLocation ColonLoc, StmtArg SubStmt);
+ virtual OwningStmtResult ActOnDefaultStmt(SourceLocation DefaultLoc,
+ SourceLocation ColonLoc,
+ StmtArg SubStmt, Scope *CurScope);
virtual StmtResult ActOnLabelStmt(SourceLocation IdentLoc, IdentifierInfo *II,
SourceLocation ColonLoc, StmtTy *SubStmt);
virtual StmtResult ActOnIfStmt(SourceLocation IfLoc, ExprTy *CondVal,
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp
index 0c441f75231..b0f0c9b8ece 100644
--- a/clang/lib/Sema/SemaStmt.cpp
+++ b/clang/lib/Sema/SemaStmt.cpp
@@ -119,49 +119,54 @@ Sema::ActOnCompoundStmt(SourceLocation L, SourceLocation R,
return Owned(new CompoundStmt(Elts, NumElts, L, R));
}
-Action::StmtResult
-Sema::ActOnCaseStmt(SourceLocation CaseLoc, ExprTy *lhsval,
- SourceLocation DotDotDotLoc, ExprTy *rhsval,
- SourceLocation ColonLoc, StmtTy *subStmt) {
- Stmt *SubStmt = static_cast<Stmt*>(subStmt);
- Expr *LHSVal = ((Expr *)lhsval), *RHSVal = ((Expr *)rhsval);
- assert((LHSVal != 0) && "missing expression in case statement");
-
+Action::OwningStmtResult
+Sema::ActOnCaseStmt(SourceLocation CaseLoc, ExprArg lhsval,
+ SourceLocation DotDotDotLoc, ExprArg rhsval,
+ SourceLocation ColonLoc, StmtArg subStmt) {
+ Stmt *SubStmt = static_cast<Stmt*>(subStmt.release());
+ assert((lhsval.get() != 0) && "missing expression in case statement");
+
// C99 6.8.4.2p3: The expression shall be an integer constant.
// However, GCC allows any evaluatable integer expression.
+ Expr *LHSVal = static_cast<Expr*>(lhsval.get());
if (VerifyIntegerConstantExpression(LHSVal))
- return SubStmt;
+ return Owned(SubStmt);
// GCC extension: The expression shall be an integer constant.
-
- if (RHSVal && VerifyIntegerConstantExpression(RHSVal))
+
+ Expr *RHSVal = static_cast<Expr*>(rhsval.get());
+ if (RHSVal && VerifyIntegerConstantExpression(RHSVal)) {
RHSVal = 0; // Recover by just forgetting about it.
-
+ rhsval = 0;
+ }
+
if (SwitchStack.empty()) {
Diag(CaseLoc, diag::err_case_not_in_switch);
- return SubStmt;
+ return Owned(SubStmt);
}
+ // Only now release the smart pointers.
+ lhsval.release();
+ rhsval.release();
CaseStmt *CS = new CaseStmt(LHSVal, RHSVal, SubStmt, CaseLoc);
SwitchStack.back()->addSwitchCase(CS);
- return CS;
+ return Owned(CS);
}
-Action::StmtResult
+Action::OwningStmtResult
Sema::ActOnDefaultStmt(SourceLocation DefaultLoc, SourceLocation ColonLoc,
- StmtTy *subStmt, Scope *CurScope) {
- Stmt *SubStmt = static_cast<Stmt*>(subStmt);
-
+ StmtArg subStmt, Scope *CurScope) {
+ Stmt *SubStmt = static_cast<Stmt*>(subStmt.release());
+
if (SwitchStack.empty()) {
Diag(DefaultLoc, diag::err_default_not_in_switch);
- return SubStmt;
+ return Owned(SubStmt);
}
-
+
DefaultStmt *DS = new DefaultStmt(DefaultLoc, SubStmt);
SwitchStack.back()->addSwitchCase(DS);
-
- return DS;
+ return Owned(DS);
}
Action::StmtResult
OpenPOWER on IntegriCloud