diff options
Diffstat (limited to 'clang/lib/Frontend')
| -rw-r--r-- | clang/lib/Frontend/PCHReader.cpp | 27 | ||||
| -rw-r--r-- | clang/lib/Frontend/PCHWriter.cpp | 16 |
2 files changed, 41 insertions, 2 deletions
diff --git a/clang/lib/Frontend/PCHReader.cpp b/clang/lib/Frontend/PCHReader.cpp index 0bd254f1ca8..042e56626e0 100644 --- a/clang/lib/Frontend/PCHReader.cpp +++ b/clang/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; diff --git a/clang/lib/Frontend/PCHWriter.cpp b/clang/lib/Frontend/PCHWriter.cpp index 3fb7a1b3aa3..a5eba4e67ca 100644 --- a/clang/lib/Frontend/PCHWriter.cpp +++ b/clang/lib/Frontend/PCHWriter.cpp @@ -448,11 +448,13 @@ namespace { void VisitDeclRefExpr(DeclRefExpr *E); void VisitIntegerLiteral(IntegerLiteral *E); void VisitFloatingLiteral(FloatingLiteral *E); + void VisitImaginaryLiteral(ImaginaryLiteral *E); void VisitStringLiteral(StringLiteral *E); void VisitCharacterLiteral(CharacterLiteral *E); void VisitParenExpr(ParenExpr *E); void VisitUnaryOperator(UnaryOperator *E); void VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E); + void VisitArraySubscriptExpr(ArraySubscriptExpr *E); void VisitCallExpr(CallExpr *E); void VisitMemberExpr(MemberExpr *E); void VisitCastExpr(CastExpr *E); @@ -498,6 +500,12 @@ void PCHStmtWriter::VisitFloatingLiteral(FloatingLiteral *E) { Code = pch::EXPR_FLOATING_LITERAL; } +void PCHStmtWriter::VisitImaginaryLiteral(ImaginaryLiteral *E) { + VisitExpr(E); + Writer.WriteSubExpr(E->getSubExpr()); + Code = pch::EXPR_IMAGINARY_LITERAL; +} + void PCHStmtWriter::VisitStringLiteral(StringLiteral *E) { VisitExpr(E); Record.push_back(E->getByteLength()); @@ -552,6 +560,14 @@ void PCHStmtWriter::VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E) { Code = pch::EXPR_SIZEOF_ALIGN_OF; } +void PCHStmtWriter::VisitArraySubscriptExpr(ArraySubscriptExpr *E) { + VisitExpr(E); + Writer.WriteSubExpr(E->getLHS()); + Writer.WriteSubExpr(E->getRHS()); + Writer.AddSourceLocation(E->getRBracketLoc(), Record); + Code = pch::EXPR_ARRAY_SUBSCRIPT; +} + void PCHStmtWriter::VisitCallExpr(CallExpr *E) { VisitExpr(E); Record.push_back(E->getNumArgs()); |

