diff options
-rw-r--r-- | AST/StmtSerialization.cpp | 16 | ||||
-rw-r--r-- | include/clang/AST/Stmt.h | 3 |
2 files changed, 19 insertions, 0 deletions
diff --git a/AST/StmtSerialization.cpp b/AST/StmtSerialization.cpp index e27c703eb4..9f2a7cb84d 100644 --- a/AST/StmtSerialization.cpp +++ b/AST/StmtSerialization.cpp @@ -46,6 +46,9 @@ Stmt* Stmt::Materialize(llvm::Deserializer& D) { case IntegerLiteralClass: return IntegerLiteral::directMaterialize(D); + case LabelStmtClass: + return LabelStmt::directMaterialize(D); + case NullStmtClass: return NullStmt::directMaterialize(D); @@ -140,6 +143,19 @@ IntegerLiteral* IntegerLiteral::directMaterialize(llvm::Deserializer& D) { return expr; } +void LabelStmt::directEmit(llvm::Serializer& S) const { + S.EmitPtr(Label); + S.Emit(IdentLoc); + S.EmitOwnedPtr(SubStmt); +} + +LabelStmt* LabelStmt::directMaterialize(llvm::Deserializer& D) { + IdentifierInfo* Label = D.ReadPtr<IdentifierInfo>(); + SourceLocation IdentLoc = SourceLocation::ReadVal(D); + Stmt* SubStmt = D.ReadOwnedPtr<Stmt>(); + return new LabelStmt(IdentLoc,Label,SubStmt); +} + void NullStmt::directEmit(llvm::Serializer& S) const { S.Emit(SemiLoc); } diff --git a/include/clang/AST/Stmt.h b/include/clang/AST/Stmt.h index 102b3f82f6..67cf0c0891 100644 --- a/include/clang/AST/Stmt.h +++ b/include/clang/AST/Stmt.h @@ -349,6 +349,9 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); + + virtual void directEmit(llvm::Serializer& S) const; + static LabelStmt* directMaterialize(llvm::Deserializer& D); }; |