]> granicus.if.org Git - clang/commitdiff
Add serialization support in several missing places.
authorDaniel Dunbar <daniel@zuster.org>
Tue, 14 Oct 2008 16:57:09 +0000 (16:57 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Tue, 14 Oct 2008 16:57:09 +0000 (16:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57502 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/Expr.h
include/clang/AST/ExprObjC.h
lib/AST/StmtSerialization.cpp

index 7fe172afc4d11bb1b79f9f982638cadec4167f9c..c2ba3f9ee42c6a9b348ed899f83bf97fee9167d6 100644 (file)
@@ -1150,6 +1150,9 @@ public:
   // Iterators
   virtual child_iterator child_begin();
   virtual child_iterator child_end();
+
+  virtual void EmitImpl(llvm::Serializer& S) const;
+  static TypesCompatibleExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C);
 };
 
 /// ShuffleVectorExpr - clang-specific builtin-in function
@@ -1215,6 +1218,9 @@ public:
   // Iterators
   virtual child_iterator child_begin();
   virtual child_iterator child_end();
+
+  virtual void EmitImpl(llvm::Serializer& S) const;
+  static ShuffleVectorExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C);
 };
 
 /// ChooseExpr - GNU builtin-in function __builtin_choose_expr.
@@ -1256,6 +1262,9 @@ public:
   // Iterators
   virtual child_iterator child_begin();
   virtual child_iterator child_end();
+
+  virtual void EmitImpl(llvm::Serializer& S) const;
+  static ChooseExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C);
 };
 
 /// OverloadExpr - Clang builtin function __builtin_overload.
@@ -1370,6 +1379,9 @@ public:
   // Iterators
   virtual child_iterator child_begin();
   virtual child_iterator child_end();  
+
+  virtual void EmitImpl(llvm::Serializer& S) const;
+  static VAArgExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C);
 };
   
 /// InitListExpr - used for struct and array initializers, such as:
@@ -1496,6 +1508,9 @@ public:
   // Iterators
   virtual child_iterator child_begin();
   virtual child_iterator child_end();
+
+  virtual void EmitImpl(llvm::Serializer& S) const;
+  static ExtVectorElementExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C);
 };
 
 
index 32c7996733977ce7ffc22768242197430cabe04e..3b19fe95273fc726080305322c6e907ae570d22b 100644 (file)
@@ -148,6 +148,9 @@ public:
   // Iterators
   virtual child_iterator child_begin();
   virtual child_iterator child_end();
+
+  virtual void EmitImpl(llvm::Serializer& S) const;
+  static ObjCProtocolExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C);
 };
 
 /// ObjCIvarRefExpr - A reference to an ObjC instance variable.
index a4fd8c35673f00900d3b60aac27c7175fe838999..a6bcf7e8b5ea228139ddeb3463262329beadc255 100644 (file)
@@ -804,6 +804,80 @@ StmtExpr* StmtExpr::CreateImpl(Deserializer& D, ASTContext& C) {
   return new StmtExpr(SubStmt,t,L,R);
 }
 
+void TypesCompatibleExpr::EmitImpl(llvm::Serializer& S) const {
+  S.Emit(getType());
+  S.Emit(BuiltinLoc);
+  S.Emit(RParenLoc);
+  S.Emit(Type1);
+  S.Emit(Type2);
+}
+
+TypesCompatibleExpr* TypesCompatibleExpr::CreateImpl(llvm::Deserializer& D, 
+                                                     ASTContext& C) {
+  QualType RT = QualType::ReadVal(D);
+  SourceLocation BL = SourceLocation::ReadVal(D);
+  SourceLocation RP = SourceLocation::ReadVal(D);
+  QualType T1 = QualType::ReadVal(D);
+  QualType T2 = QualType::ReadVal(D);
+  return new TypesCompatibleExpr(RT, BL, T1, T2, RP);
+}
+
+void ShuffleVectorExpr::EmitImpl(llvm::Serializer& S) const {
+  S.Emit(getType());
+  S.Emit(BuiltinLoc);
+  S.Emit(RParenLoc);
+  S.EmitInt(NumExprs);
+  for (unsigned i = 0; i < NumExprs; ++i)
+    S.EmitOwnedPtr(getExpr(i));
+}
+
+ShuffleVectorExpr* ShuffleVectorExpr::CreateImpl(llvm::Deserializer& D, 
+                                                 ASTContext& C) {
+  QualType T = QualType::ReadVal(D);
+  SourceLocation BL = SourceLocation::ReadVal(D);
+  SourceLocation RP = SourceLocation::ReadVal(D);
+  unsigned NumExprs = D.ReadInt();
+  llvm::SmallVector<Expr*, 4> Exprs(NumExprs);
+  for (unsigned i = 0; i < NumExprs; ++i)
+    Exprs[i] = D.ReadOwnedPtr<Expr>(C);
+
+  return new ShuffleVectorExpr(Exprs.begin(), NumExprs, T, BL, RP);
+}
+
+void ChooseExpr::EmitImpl(llvm::Serializer& S) const {
+  S.Emit(getType());
+  S.Emit(BuiltinLoc);
+  S.Emit(RParenLoc);
+  S.EmitOwnedPtr(getCond());
+  S.EmitOwnedPtr(getLHS());
+  S.EmitOwnedPtr(getRHS());
+}
+
+ChooseExpr* ChooseExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) {
+  QualType T = QualType::ReadVal(D);
+  SourceLocation BL = SourceLocation::ReadVal(D);
+  SourceLocation RP = SourceLocation::ReadVal(D);
+  Expr *Cond = D.ReadOwnedPtr<Expr>(C);
+  Expr *LHS = D.ReadOwnedPtr<Expr>(C);
+  Expr *RHS = D.ReadOwnedPtr<Expr>(C);
+  return new ChooseExpr(BL, Cond, LHS, RHS, T, RP);
+}
+
+void VAArgExpr::EmitImpl(llvm::Serializer& S) const {
+  S.Emit(getType());
+  S.Emit(BuiltinLoc);
+  S.Emit(RParenLoc);
+  S.EmitOwnedPtr(getSubExpr());
+}
+
+VAArgExpr* VAArgExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) {
+  QualType T = QualType::ReadVal(D);
+  SourceLocation BL = SourceLocation::ReadVal(D);
+  SourceLocation RP = SourceLocation::ReadVal(D);
+  Expr *E = D.ReadOwnedPtr<Expr>(C);
+  return new VAArgExpr(BL, E, T, RP);
+}
+
 void StringLiteral::EmitImpl(Serializer& S) const {
   S.Emit(getType());
   S.Emit(firstTokLoc);
@@ -981,6 +1055,22 @@ ObjCForCollectionStmt* ObjCForCollectionStmt::CreateImpl(Deserializer& D, ASTCon
   return new ObjCForCollectionStmt(Element,Collection,Body,ForLoc, RParenLoc);
 }
 
+void ObjCProtocolExpr::EmitImpl(llvm::Serializer& S) const {
+  S.Emit(getType());
+  S.EmitPtr(Protocol);
+  S.Emit(AtLoc);
+  S.Emit(RParenLoc);
+}
+
+ObjCProtocolExpr* ObjCProtocolExpr::CreateImpl(llvm::Deserializer& D, 
+                                               ASTContext& C) {
+  QualType T = QualType::ReadVal(D);
+  ObjCProtocolDecl *PD = D.ReadPtr<ObjCProtocolDecl>();
+  SourceLocation AL = SourceLocation::ReadVal(D);
+  SourceLocation RP = SourceLocation::ReadVal(D);
+  return new ObjCProtocolExpr(T, PD, AL, RP);
+}
+
 void ObjCIvarRefExpr::EmitImpl(Serializer& S) const {
   S.Emit(Loc);
   S.Emit(getType());
@@ -1112,6 +1202,21 @@ ObjCStringLiteral* ObjCStringLiteral::CreateImpl(Deserializer& D, ASTContext& C)
 //   Serialization for Clang Extensions.
 //===----------------------------------------------------------------------===//
 
+void ExtVectorElementExpr::EmitImpl(llvm::Serializer& S) const {
+  S.Emit(getType());
+  S.EmitOwnedPtr(getBase());
+  S.EmitPtr(&Accessor);
+  S.Emit(AccessorLoc);
+}
+
+ExtVectorElementExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C) {
+  QualType T = QualType::ReadVal(D);
+  Expr *B = D.ReadOwnedPtr<Expr>(C);
+  IdentifierInfo *A = D.ReadPtr<IdentifierInfo>();
+  SourceLocation AL = SourceLocation::ReadVal(D);
+  return new ExtVectorElementExpr(T, B, *A, AL);
+}
+
 void BlockExpr::EmitImpl(Serializer& S) const {
   S.Emit(getType());
   S.EmitOwnedPtr(TheBlock);