diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-07-22 16:03:56 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-07-22 16:03:56 +0000 |
| commit | 47cd7a91f47e8687a801e926293afcb8ef93ffd8 (patch) | |
| tree | 70362e6f9c7ff8e9912bd72c82a86921e43c9c8f /clang/lib/Frontend/PCHWriterStmt.cpp | |
| parent | fd23a97d9c6d15125bda67a00fe12b820cd452f3 (diff) | |
| download | bcm5719-llvm-47cd7a91f47e8687a801e926293afcb8ef93ffd8.tar.gz bcm5719-llvm-47cd7a91f47e8687a801e926293afcb8ef93ffd8.zip | |
Support C++ try/catch statements for PCH.
llvm-svn: 109112
Diffstat (limited to 'clang/lib/Frontend/PCHWriterStmt.cpp')
| -rw-r--r-- | clang/lib/Frontend/PCHWriterStmt.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/clang/lib/Frontend/PCHWriterStmt.cpp b/clang/lib/Frontend/PCHWriterStmt.cpp index 90e48c457f9..e807ddff098 100644 --- a/clang/lib/Frontend/PCHWriterStmt.cpp +++ b/clang/lib/Frontend/PCHWriterStmt.cpp @@ -115,6 +115,9 @@ namespace clang { void VisitObjCAtThrowStmt(ObjCAtThrowStmt *); // C++ Statements + void VisitCXXCatchStmt(CXXCatchStmt *S); + void VisitCXXTryStmt(CXXTryStmt *S); + void VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E); void VisitCXXMemberCallExpr(CXXMemberCallExpr *E); void VisitCXXConstructExpr(CXXConstructExpr *E); @@ -929,6 +932,24 @@ void PCHStmtWriter::VisitObjCAtThrowStmt(ObjCAtThrowStmt *S) { // C++ Expressions and Statements. //===----------------------------------------------------------------------===// +void PCHStmtWriter::VisitCXXCatchStmt(CXXCatchStmt *S) { + VisitStmt(S); + Writer.AddSourceLocation(S->getCatchLoc(), Record); + Writer.AddDeclRef(S->getExceptionDecl(), Record); + Writer.AddStmt(S->getHandlerBlock()); + Code = pch::STMT_CXX_CATCH; +} + +void PCHStmtWriter::VisitCXXTryStmt(CXXTryStmt *S) { + VisitStmt(S); + Record.push_back(S->getNumHandlers()); + Writer.AddSourceLocation(S->getTryLoc(), Record); + Writer.AddStmt(S->getTryBlock()); + for (unsigned i = 0, e = S->getNumHandlers(); i != e; ++i) + Writer.AddStmt(S->getHandler(i)); + Code = pch::STMT_CXX_TRY; +} + void PCHStmtWriter::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) { VisitCallExpr(E); Record.push_back(E->getOperator()); |

