summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplateInstantiateStmt.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-05-18 19:08:47 +0000
committerDouglas Gregor <dgregor@apple.com>2009-05-18 19:08:47 +0000
commit2f547c7e3e8a8ff274adfe708be69a526d9de4bf (patch)
treef4e0e9cad4443d2c051abfb7ed435a2aae953285 /clang/lib/Sema/SemaTemplateInstantiateStmt.cpp
parentcf47d0134fd4fe743bd19a7a9cc36aefede84b9d (diff)
downloadbcm5719-llvm-2f547c7e3e8a8ff274adfe708be69a526d9de4bf.tar.gz
bcm5719-llvm-2f547c7e3e8a8ff274adfe708be69a526d9de4bf.zip
Include StmtNodes.def to declare Visit methods for all of the known
kinds of statements (in the instantiation logic). No functionality change, but now we'll get linker errors if we add a statement but forget to introduce its instantiation logic. llvm-svn: 72031
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiateStmt.cpp')
-rw-r--r--clang/lib/Sema/SemaTemplateInstantiateStmt.cpp106
1 files changed, 87 insertions, 19 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateStmt.cpp b/clang/lib/Sema/SemaTemplateInstantiateStmt.cpp
index 938e58b8fdd..a8dd6c194c5 100644
--- a/clang/lib/Sema/SemaTemplateInstantiateStmt.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiateStmt.cpp
@@ -38,26 +38,14 @@ namespace {
const TemplateArgumentList &TemplateArgs)
: SemaRef(SemaRef), TemplateArgs(TemplateArgs) { }
- // FIXME: Once we get closer to completion, replace these manually-written
- // declarations with automatically-generated ones from
- // clang/AST/StmtNodes.def.
- OwningStmtResult VisitDeclStmt(DeclStmt *S);
- OwningStmtResult VisitNullStmt(NullStmt *S);
- OwningStmtResult VisitCompoundStmt(CompoundStmt *S);
- OwningStmtResult VisitCaseStmt(CaseStmt *S);
- OwningStmtResult VisitDefaultStmt(DefaultStmt *S);
- OwningStmtResult VisitIfStmt(IfStmt *S);
- OwningStmtResult VisitSwitchStmt(SwitchStmt *S);
- OwningStmtResult VisitWhileStmt(WhileStmt *S);
- OwningStmtResult VisitDoStmt(DoStmt *S);
- OwningStmtResult VisitForStmt(ForStmt *S);
+ // Declare VisitXXXStmt nodes for all of the statement kinds.
+#define STMT(Type, Base) OwningStmtResult Visit##Type(Type *S);
+#define EXPR(Type, Base)
+#include "clang/AST/StmtNodes.def"
+
+ // Visit an expression (which will use the expression
+ // instantiator).
OwningStmtResult VisitExpr(Expr *E);
- OwningStmtResult VisitLabelStmt(LabelStmt *S);
- OwningStmtResult VisitGotoStmt(GotoStmt *S);
- OwningStmtResult VisitIndirectGotoStmt(IndirectGotoStmt *S);
- OwningStmtResult VisitBreakStmt(BreakStmt *S);
- OwningStmtResult VisitContinueStmt(ContinueStmt *S);
- OwningStmtResult VisitReturnStmt(ReturnStmt *S);
// Base case. I'm supposed to ignore this.
OwningStmtResult VisitStmt(Stmt *S) {
@@ -68,6 +56,9 @@ namespace {
};
}
+//===----------------------------------------------------------------------===/
+// Common/C statements
+//===----------------------------------------------------------------------===/
Sema::OwningStmtResult TemplateStmtInstantiator::VisitDeclStmt(DeclStmt *S) {
llvm::SmallVector<Decl *, 8> Decls;
for (DeclStmt::decl_iterator D = S->decl_begin(), DEnd = S->decl_end();
@@ -170,6 +161,12 @@ TemplateStmtInstantiator::VisitCompoundStmt(CompoundStmt *S) {
S->getRBracLoc()));
}
+Sema::OwningStmtResult
+TemplateStmtInstantiator::VisitSwitchCase(SwitchCase *S) {
+ assert(false && "SwitchCase statements are never directly instantiated");
+ return SemaRef.StmtError();
+}
+
Sema::OwningStmtResult TemplateStmtInstantiator::VisitCaseStmt(CaseStmt *S) {
// Instantiate left-hand case value.
OwningExprResult LHS = SemaRef.InstantiateExpr(S->getLHS(), TemplateArgs);
@@ -311,6 +308,77 @@ Sema::OwningStmtResult TemplateStmtInstantiator::VisitForStmt(ForStmt *S) {
S->getRParenLoc(), move(Body));
}
+Sema::OwningStmtResult
+TemplateStmtInstantiator::VisitAsmStmt(AsmStmt *S) {
+ // FIXME: Implement this
+ assert(false && "Cannot instantiate an 'asm' statement");
+ return SemaRef.StmtError();
+}
+
+//===----------------------------------------------------------------------===/
+// C++ statements
+//===----------------------------------------------------------------------===/
+Sema::OwningStmtResult
+TemplateStmtInstantiator::VisitCXXTryStmt(CXXTryStmt *S) {
+ // FIXME: Implement this
+ assert(false && "Cannot instantiate a C++ try statement");
+ return SemaRef.StmtError();
+}
+
+Sema::OwningStmtResult
+TemplateStmtInstantiator::VisitCXXCatchStmt(CXXCatchStmt *S) {
+ // FIXME: Implement this
+ assert(false && "Cannot instantiate a C++ catch statement");
+ return SemaRef.StmtError();
+}
+
+//===----------------------------------------------------------------------===/
+// Objective-C statements
+//===----------------------------------------------------------------------===/
+Sema::OwningStmtResult
+TemplateStmtInstantiator::VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *S) {
+ // FIXME: Implement this
+ assert(false && "Cannot instantiate an Objective-C @finally statement");
+ return SemaRef.StmtError();
+}
+
+Sema::OwningStmtResult
+TemplateStmtInstantiator::VisitObjCAtSynchronizedStmt(
+ ObjCAtSynchronizedStmt *S) {
+ // FIXME: Implement this
+ assert(false && "Cannot instantiate an Objective-C @synchronized statement");
+ return SemaRef.StmtError();
+}
+
+Sema::OwningStmtResult
+TemplateStmtInstantiator::VisitObjCAtTryStmt(ObjCAtTryStmt *S) {
+ // FIXME: Implement this
+ assert(false && "Cannot instantiate an Objective-C @try statement");
+ return SemaRef.StmtError();
+}
+
+Sema::OwningStmtResult
+TemplateStmtInstantiator::VisitObjCForCollectionStmt(
+ ObjCForCollectionStmt *S) {
+ // FIXME: Implement this
+ assert(false && "Cannot instantiate an Objective-C \"for\" statement");
+ return SemaRef.StmtError();
+}
+
+Sema::OwningStmtResult
+TemplateStmtInstantiator::VisitObjCAtThrowStmt(ObjCAtThrowStmt *S) {
+ // FIXME: Implement this
+ assert(false && "Cannot instantiate an Objective-C @throw statement");
+ return SemaRef.StmtError();
+}
+
+Sema::OwningStmtResult
+TemplateStmtInstantiator::VisitObjCAtCatchStmt(ObjCAtCatchStmt *S) {
+ // FIXME: Implement this
+ assert(false && "Cannot instantiate an Objective-C @catch statement");
+ return SemaRef.StmtError();
+}
+
Sema::OwningStmtResult TemplateStmtInstantiator::VisitExpr(Expr *E) {
Sema::OwningExprResult Result = SemaRef.InstantiateExpr(E, TemplateArgs);
if (Result.isInvalid())
OpenPOWER on IntegriCloud