diff options
-rw-r--r-- | AST/StmtSerialization.cpp | 17 | ||||
-rw-r--r-- | include/clang/AST/Expr.h | 3 |
2 files changed, 20 insertions, 0 deletions
diff --git a/AST/StmtSerialization.cpp b/AST/StmtSerialization.cpp index 0cff7c5e67..4e13b98a69 100644 --- a/AST/StmtSerialization.cpp +++ b/AST/StmtSerialization.cpp @@ -60,6 +60,9 @@ Stmt* Stmt::Materialize(llvm::Deserializer& D) { case DoStmtClass: return DoStmt::directMaterialize(D); + + case FloatingLiteralClass: + return FloatingLiteral::directMaterialize(D); case ForStmtClass: return ForStmt::directMaterialize(D); @@ -244,6 +247,20 @@ DoStmt* DoStmt::directMaterialize(llvm::Deserializer& D) { return new DoStmt(Body,Cond,DoLoc); } +void FloatingLiteral::directEmit(llvm::Serializer& S) const { + S.Emit(Loc); + S.Emit(getType()); + S.Emit(Value); +} + +FloatingLiteral* FloatingLiteral::directMaterialize(llvm::Deserializer& D) { + SourceLocation Loc = SourceLocation::ReadVal(D); + QualType t = QualType::ReadVal(D); + llvm::APFloat Val = llvm::APFloat::ReadVal(D); + FloatingLiteral* expr = new FloatingLiteral(Val,t,Loc); + return expr; +} + void ForStmt::directEmit(llvm::Serializer& S) const { S.Emit(ForLoc); S.EmitOwnedPtr(getInit()); diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h index 7d3827871e..9c0f076b8c 100644 --- a/include/clang/AST/Expr.h +++ b/include/clang/AST/Expr.h @@ -263,6 +263,9 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); + + virtual void directEmit(llvm::Serializer& S) const; + static FloatingLiteral* directMaterialize(llvm::Deserializer& D); }; /// ImaginaryLiteral - We support imaginary integer and floating point literals, |