aboutsummaryrefslogtreecommitdiff
path: root/lib/Frontend/PCHReader.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-04-15 22:19:53 +0000
committerDouglas Gregor <dgregor@apple.com>2009-04-15 22:19:53 +0000
commitcb2ca73c1d7e76cc1358ce51457d2d5837d84f9b (patch)
tree2171f3f1ebd67f9ef9965ae508c935221b5f5887 /lib/Frontend/PCHReader.cpp
parentc2f4c34ed8f79b4136f2c03e41ce3ea0c781bc9a (diff)
PCH support for ImaginaryLiteral and ArraySubscriptExpr
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69233 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/PCHReader.cpp')
-rw-r--r--lib/Frontend/PCHReader.cpp27
1 files changed, 25 insertions, 2 deletions
diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp
index 0bd254f1ca..042e56626e 100644
--- a/lib/Frontend/PCHReader.cpp
+++ b/lib/Frontend/PCHReader.cpp
@@ -179,7 +179,7 @@ void PCHDeclReader::VisitVarDecl(VarDecl *VD) {
void PCHDeclReader::VisitParmVarDecl(ParmVarDecl *PD) {
VisitVarDecl(PD);
PD->setObjCDeclQualifier((Decl::ObjCDeclQualifier)Record[Idx++]);
- // FIXME: default argument
+ // FIXME: default argument (C++ only)
}
void PCHDeclReader::VisitOriginalParmVarDecl(OriginalParmVarDecl *PD) {
@@ -241,11 +241,13 @@ namespace {
unsigned VisitDeclRefExpr(DeclRefExpr *E);
unsigned VisitIntegerLiteral(IntegerLiteral *E);
unsigned VisitFloatingLiteral(FloatingLiteral *E);
+ unsigned VisitImaginaryLiteral(ImaginaryLiteral *E);
unsigned VisitStringLiteral(StringLiteral *E);
unsigned VisitCharacterLiteral(CharacterLiteral *E);
unsigned VisitParenExpr(ParenExpr *E);
unsigned VisitUnaryOperator(UnaryOperator *E);
unsigned VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E);
+ unsigned VisitArraySubscriptExpr(ArraySubscriptExpr *E);
unsigned VisitCallExpr(CallExpr *E);
unsigned VisitMemberExpr(MemberExpr *E);
unsigned VisitCastExpr(CastExpr *E);
@@ -293,6 +295,12 @@ unsigned PCHStmtReader::VisitFloatingLiteral(FloatingLiteral *E) {
return 0;
}
+unsigned PCHStmtReader::VisitImaginaryLiteral(ImaginaryLiteral *E) {
+ VisitExpr(E);
+ E->setSubExpr(ExprStack.back());
+ return 1;
+}
+
unsigned PCHStmtReader::VisitStringLiteral(StringLiteral *E) {
VisitExpr(E);
unsigned Len = Record[Idx++];
@@ -351,6 +359,14 @@ unsigned PCHStmtReader::VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E) {
return E->isArgumentType()? 0 : 1;
}
+unsigned PCHStmtReader::VisitArraySubscriptExpr(ArraySubscriptExpr *E) {
+ VisitExpr(E);
+ E->setLHS(ExprStack[ExprStack.size() - 2]);
+ E->setRHS(ExprStack[ExprStack.size() - 2]);
+ E->setRBracketLoc(SourceLocation::getFromRawEncoding(Record[Idx++]));
+ return 2;
+}
+
unsigned PCHStmtReader::VisitCallExpr(CallExpr *E) {
VisitExpr(E);
E->setNumArgs(Reader.getContext(), Record[Idx++]);
@@ -1648,7 +1664,6 @@ llvm::APSInt PCHReader::ReadAPSInt(const RecordData &Record, unsigned &Idx) {
/// \brief Read a floating-point value
llvm::APFloat PCHReader::ReadAPFloat(const RecordData &Record, unsigned &Idx) {
- // FIXME: is this really correct?
return llvm::APFloat(ReadAPInt(Record, Idx));
}
@@ -1861,6 +1876,10 @@ Expr *PCHReader::ReadExpr() {
E = new (Context) FloatingLiteral(Empty);
break;
+ case pch::EXPR_IMAGINARY_LITERAL:
+ E = new (Context) ImaginaryLiteral(Empty);
+ break;
+
case pch::EXPR_STRING_LITERAL:
E = StringLiteral::CreateEmpty(Context,
Record[PCHStmtReader::NumExprFields + 1]);
@@ -1882,6 +1901,10 @@ Expr *PCHReader::ReadExpr() {
E = new (Context) SizeOfAlignOfExpr(Empty);
break;
+ case pch::EXPR_ARRAY_SUBSCRIPT:
+ E = new (Context) ArraySubscriptExpr(Empty);
+ break;
+
case pch::EXPR_CALL:
E = new (Context) CallExpr(Context, Empty);
break;