diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-04-15 17:43:59 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-04-15 17:43:59 +0000 |
commit | e20a2e5fa34259cf545ea8830d1f93a889953dd6 (patch) | |
tree | 538b74764452e7562af6bc52f04aca8055f3a814 /clang/lib/Frontend/PCHReader.cpp | |
parent | bb99c5c933abad6a7e2b8a3c1807c9e3d151e68c (diff) | |
download | bcm5719-llvm-e20a2e5fa34259cf545ea8830d1f93a889953dd6.tar.gz bcm5719-llvm-e20a2e5fa34259cf545ea8830d1f93a889953dd6.zip |
PCH support for MemberExpr and CallExpr.
llvm-svn: 69186
Diffstat (limited to 'clang/lib/Frontend/PCHReader.cpp')
-rw-r--r-- | clang/lib/Frontend/PCHReader.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/clang/lib/Frontend/PCHReader.cpp b/clang/lib/Frontend/PCHReader.cpp index 2da21023c77..083d0d6082d 100644 --- a/clang/lib/Frontend/PCHReader.cpp +++ b/clang/lib/Frontend/PCHReader.cpp @@ -245,6 +245,8 @@ namespace { unsigned VisitParenExpr(ParenExpr *E); unsigned VisitUnaryOperator(UnaryOperator *E); unsigned VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E); + unsigned VisitCallExpr(CallExpr *E); + unsigned VisitMemberExpr(MemberExpr *E); unsigned VisitCastExpr(CastExpr *E); unsigned VisitBinaryOperator(BinaryOperator *E); unsigned VisitImplicitCastExpr(ImplicitCastExpr *E); @@ -348,6 +350,25 @@ unsigned PCHStmtReader::VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E) { return E->isArgumentType()? 0 : 1; } +unsigned PCHStmtReader::VisitCallExpr(CallExpr *E) { + VisitExpr(E); + E->setNumArgs(Reader.getContext(), Record[Idx++]); + E->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); + E->setCallee(ExprStack[ExprStack.size() - E->getNumArgs() - 1]); + for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) + E->setArg(I, ExprStack[ExprStack.size() - N + I]); + return E->getNumArgs() + 1; +} + +unsigned PCHStmtReader::VisitMemberExpr(MemberExpr *E) { + VisitExpr(E); + E->setBase(ExprStack.back()); + E->setMemberDecl(cast<NamedDecl>(Reader.GetDecl(Record[Idx++]))); + E->setMemberLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); + E->setArrow(Record[Idx++]); + return 1; +} + unsigned PCHStmtReader::VisitCastExpr(CastExpr *E) { VisitExpr(E); E->setSubExpr(ExprStack.back()); @@ -1703,6 +1724,14 @@ Expr *PCHReader::ReadExpr() { E = new (Context) SizeOfAlignOfExpr(Empty); break; + case pch::EXPR_CALL: + E = new (Context) CallExpr(Context, Empty); + break; + + case pch::EXPR_MEMBER: + E = new (Context) MemberExpr(Empty); + break; + case pch::EXPR_BINARY_OPERATOR: E = new (Context) BinaryOperator(Empty); break; |