From 0de9d8857b715c2f45c987651f4ce06d73330d93 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Fri, 17 Apr 2009 16:34:57 +0000 Subject: PCH support for return statements. Optimize PCH encoding for switch-case statements slightly, by making the switch-case numbering local to a particular statement. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69355 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Frontend/PCHReader.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'lib/Frontend/PCHReader.cpp') diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp index d2fb8ab3cb..0dcdf8d3fd 100644 --- a/lib/Frontend/PCHReader.cpp +++ b/lib/Frontend/PCHReader.cpp @@ -256,6 +256,7 @@ namespace { unsigned VisitForStmt(ForStmt *S); unsigned VisitContinueStmt(ContinueStmt *S); unsigned VisitBreakStmt(BreakStmt *S); + unsigned VisitReturnStmt(ReturnStmt *S); unsigned VisitExpr(Expr *E); unsigned VisitPredefinedExpr(PredefinedExpr *E); unsigned VisitDeclRefExpr(DeclRefExpr *E); @@ -398,6 +399,13 @@ unsigned PCHStmtReader::VisitBreakStmt(BreakStmt *S) { return 0; } +unsigned PCHStmtReader::VisitReturnStmt(ReturnStmt *S) { + VisitStmt(S); + S->setRetValue(cast_or_null(StmtStack.back())); + S->setReturnLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); + return 1; +} + unsigned PCHStmtReader::VisitExpr(Expr *E) { VisitStmt(E); E->setType(Reader.GetType(Record[Idx++])); @@ -2172,6 +2180,10 @@ Stmt *PCHReader::ReadStmt() { S = new (Context) BreakStmt(Empty); break; + case pch::STMT_RETURN: + S = new (Context) ReturnStmt(Empty); + break; + case pch::EXPR_PREDEFINED: // FIXME: untested (until we can serialize function bodies). S = new (Context) PredefinedExpr(Empty); @@ -2311,6 +2323,7 @@ Stmt *PCHReader::ReadStmt() { StmtStack.push_back(S); } assert(StmtStack.size() == 1 && "Extra expressions on stack!"); + SwitchCaseStmts.clear(); return StmtStack.back(); } -- cgit v1.2.3-18-g5258