diff options
Diffstat (limited to 'lib/Frontend/PCHReader.cpp')
-rw-r--r-- | lib/Frontend/PCHReader.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp index 909ecdb100..bc754cb845 100644 --- a/lib/Frontend/PCHReader.cpp +++ b/lib/Frontend/PCHReader.cpp @@ -226,8 +226,10 @@ namespace { : Reader(Reader), Record(Record), Idx(Idx) { } void VisitExpr(Expr *E); + void VisitPredefinedExpr(PredefinedExpr *E); void VisitDeclRefExpr(DeclRefExpr *E); void VisitIntegerLiteral(IntegerLiteral *E); + void VisitFloatingLiteral(FloatingLiteral *E); void VisitCharacterLiteral(CharacterLiteral *E); }; } @@ -238,6 +240,12 @@ void PCHStmtReader::VisitExpr(Expr *E) { E->setValueDependent(Record[Idx++]); } +void PCHStmtReader::VisitPredefinedExpr(PredefinedExpr *E) { + VisitExpr(E); + E->setLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); + E->setIdentType((PredefinedExpr::IdentType)Record[Idx++]); +} + void PCHStmtReader::VisitDeclRefExpr(DeclRefExpr *E) { VisitExpr(E); E->setDecl(cast<NamedDecl>(Reader.GetDecl(Record[Idx++]))); @@ -250,6 +258,13 @@ void PCHStmtReader::VisitIntegerLiteral(IntegerLiteral *E) { E->setValue(Reader.ReadAPInt(Record, Idx)); } +void PCHStmtReader::VisitFloatingLiteral(FloatingLiteral *E) { + VisitExpr(E); + E->setValue(Reader.ReadAPFloat(Record, Idx)); + E->setExact(Record[Idx++]); + E->setLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); +} + void PCHStmtReader::VisitCharacterLiteral(CharacterLiteral *E) { VisitExpr(E); E->setValue(Record[Idx++]); @@ -1484,6 +1499,12 @@ llvm::APSInt PCHReader::ReadAPSInt(const RecordData &Record, unsigned &Idx) { return llvm::APSInt(ReadAPInt(Record, Idx), isUnsigned); } +/// \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)); +} + Expr *PCHReader::ReadExpr() { RecordData Record; unsigned Code = Stream.ReadCode(); @@ -1497,6 +1518,11 @@ Expr *PCHReader::ReadExpr() { E = 0; break; + case pch::EXPR_PREDEFINED: + // FIXME: untested (until we can serialize function bodies). + E = new (Context) PredefinedExpr(Empty); + break; + case pch::EXPR_DECL_REF: E = new (Context) DeclRefExpr(Empty); break; @@ -1505,12 +1531,12 @@ Expr *PCHReader::ReadExpr() { E = new (Context) IntegerLiteral(Empty); break; - case pch::EXPR_CHARACTER_LITERAL: - E = new (Context) CharacterLiteral(Empty); + case pch::EXPR_FLOATING_LITERAL: + E = new (Context) FloatingLiteral(Empty); break; - default: - assert(false && "Unhandled expression kind"); + case pch::EXPR_CHARACTER_LITERAL: + E = new (Context) CharacterLiteral(Empty); break; } |