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 | 7cb45e37b6f924d9ddbc53ac023bbaadb4ca3534 (patch) | |
tree | fa8ee7fe1994683ff56e5ecf71421c6b5c07278c /lib/Frontend/PCHWriterStmt.cpp | |
parent | 47dc37f1efa6942366dd61c4acb0c874049dd1e0 (diff) |
Support C++ try/catch statements for PCH.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109112 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/PCHWriterStmt.cpp')
-rw-r--r-- | lib/Frontend/PCHWriterStmt.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/Frontend/PCHWriterStmt.cpp b/lib/Frontend/PCHWriterStmt.cpp index 90e48c457f..e807ddff09 100644 --- a/lib/Frontend/PCHWriterStmt.cpp +++ b/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()); |