diff options
-rw-r--r-- | AST/StmtSerialization.cpp | 15 | ||||
-rw-r--r-- | include/clang/AST/Expr.h | 3 |
2 files changed, 18 insertions, 0 deletions
diff --git a/AST/StmtSerialization.cpp b/AST/StmtSerialization.cpp index 4e13b98a69..ffe4312e63 100644 --- a/AST/StmtSerialization.cpp +++ b/AST/StmtSerialization.cpp @@ -72,6 +72,9 @@ Stmt* Stmt::Materialize(llvm::Deserializer& D) { case IfStmtClass: return IfStmt::directMaterialize(D); + + case ImaginaryLiteralClass: + return ImaginaryLiteral::directMaterialize(D); case IndirectGotoStmtClass: return IndirectGotoStmt::directMaterialize(D); @@ -307,6 +310,18 @@ IfStmt* IfStmt::directMaterialize(llvm::Deserializer& D) { return new IfStmt(L,Cond,Then,Else); } +void ImaginaryLiteral::directEmit(llvm::Serializer& S) const { + S.Emit(getType()); + S.EmitOwnedPtr(Val); +} + +ImaginaryLiteral* ImaginaryLiteral::directMaterialize(llvm::Deserializer& D) { + QualType t = QualType::ReadVal(D); + Expr* expr = D.ReadOwnedPtr<Expr>(); + assert (isa<FloatingLiteral>(expr) || isa<IntegerLiteral>(expr)); + return new ImaginaryLiteral(expr,t); +} + void IndirectGotoStmt::directEmit(llvm::Serializer& S) const { S.EmitPtr(Target); } diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h index 9c0f076b8c..c5f477747f 100644 --- a/include/clang/AST/Expr.h +++ b/include/clang/AST/Expr.h @@ -291,6 +291,9 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); + + virtual void directEmit(llvm::Serializer& S) const; + static ImaginaryLiteral* directMaterialize(llvm::Deserializer& D); }; /// StringLiteral - This represents a string literal expression, e.g. "foo" |