summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/StmtSerialization.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/AST/StmtSerialization.cpp')
-rw-r--r--clang/lib/AST/StmtSerialization.cpp1602
1 files changed, 0 insertions, 1602 deletions
diff --git a/clang/lib/AST/StmtSerialization.cpp b/clang/lib/AST/StmtSerialization.cpp
deleted file mode 100644
index 7a37a16550d..00000000000
--- a/clang/lib/AST/StmtSerialization.cpp
+++ /dev/null
@@ -1,1602 +0,0 @@
-//===--- StmtSerialization.cpp - Serialization of Statements --------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the type-specific methods for serializing statements
-// and expressions.
-//
-//===----------------------------------------------------------------------===//
-
-#include "clang/Basic/TypeTraits.h"
-#include "clang/AST/DeclCXX.h"
-#include "clang/AST/Expr.h"
-#include "clang/AST/ExprCXX.h"
-#include "clang/AST/ExprObjC.h"
-#include "clang/AST/ASTContext.h"
-#include "llvm/Bitcode/Serialize.h"
-#include "llvm/Bitcode/Deserialize.h"
-
-using namespace clang;
-using llvm::Serializer;
-using llvm::Deserializer;
-
-void Stmt::Emit(Serializer& S) const {
- S.FlushRecord();
- S.EmitInt(getStmtClass());
- EmitImpl(S);
- S.FlushRecord();
-}
-
-Stmt* Stmt::Create(Deserializer& D, ASTContext& C) {
- StmtClass SC = static_cast<StmtClass>(D.ReadInt());
-
- switch (SC) {
- default:
- assert (false && "Not implemented.");
- return NULL;
-
- case AddrLabelExprClass:
- return AddrLabelExpr::CreateImpl(D, C);
-
- case ArraySubscriptExprClass:
- return ArraySubscriptExpr::CreateImpl(D, C);
-
- case AsmStmtClass:
- return AsmStmt::CreateImpl(D, C);
-
- case BinaryOperatorClass:
- return BinaryOperator::CreateImpl(D, C);
-
- case BreakStmtClass:
- return BreakStmt::CreateImpl(D, C);
-
- case CallExprClass:
- return CallExpr::CreateImpl(D, C, CallExprClass);
-
- case CaseStmtClass:
- return CaseStmt::CreateImpl(D, C);
-
- case CharacterLiteralClass:
- return CharacterLiteral::CreateImpl(D, C);
-
- case ChooseExprClass:
- return ChooseExpr::CreateImpl(D, C);
-
- case CompoundAssignOperatorClass:
- return CompoundAssignOperator::CreateImpl(D, C);
-
- case CompoundLiteralExprClass:
- return CompoundLiteralExpr::CreateImpl(D, C);
-
- case CompoundStmtClass:
- return CompoundStmt::CreateImpl(D, C);
-
- case ConditionalOperatorClass:
- return ConditionalOperator::CreateImpl(D, C);
-
- case ContinueStmtClass:
- return ContinueStmt::CreateImpl(D, C);
-
- case DeclRefExprClass:
- return DeclRefExpr::CreateImpl(D, C);
-
- case DeclStmtClass:
- return DeclStmt::CreateImpl(D, C);
-
- case DefaultStmtClass:
- return DefaultStmt::CreateImpl(D, C);
-
- case DoStmtClass:
- return DoStmt::CreateImpl(D, C);
-
- case FloatingLiteralClass:
- return FloatingLiteral::CreateImpl(D, C);
-
- case ForStmtClass:
- return ForStmt::CreateImpl(D, C);
-
- case GNUNullExprClass:
- return GNUNullExpr::CreateImpl(D, C);
-
- case GotoStmtClass:
- return GotoStmt::CreateImpl(D, C);
-
- case IfStmtClass:
- return IfStmt::CreateImpl(D, C);
-
- case ImaginaryLiteralClass:
- return ImaginaryLiteral::CreateImpl(D, C);
-
- case ImplicitCastExprClass:
- return ImplicitCastExpr::CreateImpl(D, C);
-
- case CStyleCastExprClass:
- return CStyleCastExpr::CreateImpl(D, C);
-
- case IndirectGotoStmtClass:
- return IndirectGotoStmt::CreateImpl(D, C);
-
- case InitListExprClass:
- return InitListExpr::CreateImpl(D, C);
-
- case IntegerLiteralClass:
- return IntegerLiteral::CreateImpl(D, C);
-
- case LabelStmtClass:
- return LabelStmt::CreateImpl(D, C);
-
- case MemberExprClass:
- return MemberExpr::CreateImpl(D, C);
-
- case NullStmtClass:
- return NullStmt::CreateImpl(D, C);
-
- case ParenExprClass:
- return ParenExpr::CreateImpl(D, C);
-
- case PredefinedExprClass:
- return PredefinedExpr::CreateImpl(D, C);
-
- case ReturnStmtClass:
- return ReturnStmt::CreateImpl(D, C);
-
- case SizeOfAlignOfExprClass:
- return SizeOfAlignOfExpr::CreateImpl(D, C);
-
- case StmtExprClass:
- return StmtExpr::CreateImpl(D, C);
-
- case StringLiteralClass:
- return StringLiteral::CreateImpl(D, C);
-
- case SwitchStmtClass:
- return SwitchStmt::CreateImpl(D, C);
-
- case UnaryOperatorClass:
- return UnaryOperator::CreateImpl(D, C);
-
- case WhileStmtClass:
- return WhileStmt::CreateImpl(D, C);
-
- //==--------------------------------------==//
- // Objective C
- //==--------------------------------------==//
-
- case ObjCAtCatchStmtClass:
- return ObjCAtCatchStmt::CreateImpl(D, C);
-
- case ObjCAtFinallyStmtClass:
- return ObjCAtFinallyStmt::CreateImpl(D, C);
-
- case ObjCAtSynchronizedStmtClass:
- return ObjCAtSynchronizedStmt::CreateImpl(D, C);
-
- case ObjCAtThrowStmtClass:
- return ObjCAtThrowStmt::CreateImpl(D, C);
-
- case ObjCAtTryStmtClass:
- return ObjCAtTryStmt::CreateImpl(D, C);
-
- case ObjCEncodeExprClass:
- return ObjCEncodeExpr::CreateImpl(D, C);
-
- case ObjCForCollectionStmtClass:
- return ObjCForCollectionStmt::CreateImpl(D, C);
-
- case ObjCIvarRefExprClass:
- return ObjCIvarRefExpr::CreateImpl(D, C);
-
- case ObjCMessageExprClass:
- return ObjCMessageExpr::CreateImpl(D, C);
-
- case ObjCSelectorExprClass:
- return ObjCSelectorExpr::CreateImpl(D, C);
-
- case ObjCStringLiteralClass:
- return ObjCStringLiteral::CreateImpl(D, C);
-
- case ObjCSuperExprClass:
- return ObjCSuperExpr::CreateImpl(D, C);
-
- //==--------------------------------------==//
- // C++
- //==--------------------------------------==//
-
- case CXXOperatorCallExprClass:
- return CXXOperatorCallExpr::CreateImpl(D, C, CXXOperatorCallExprClass);
-
- case CXXDefaultArgExprClass:
- return CXXDefaultArgExpr::CreateImpl(D, C);
-
- case CXXFunctionalCastExprClass:
- return CXXFunctionalCastExpr::CreateImpl(D, C);
-
- case CXXStaticCastExprClass:
- return CXXStaticCastExpr::CreateImpl(D, C, SC);
-
- case CXXDynamicCastExprClass:
- return CXXDynamicCastExpr::CreateImpl(D, C, SC);
-
- case CXXReinterpretCastExprClass:
- return CXXReinterpretCastExpr::CreateImpl(D, C, SC);
-
- case CXXConstCastExprClass:
- return CXXConstCastExpr::CreateImpl(D, C, SC);
-
- case CXXTypeidExprClass:
- return CXXTypeidExpr::CreateImpl(D, C);
-
- case CXXThisExprClass:
- return CXXThisExpr::CreateImpl(D, C);
-
- case CXXTemporaryObjectExprClass:
- return CXXTemporaryObjectExpr::CreateImpl(D, C);
-
- case CXXZeroInitValueExprClass:
- return CXXZeroInitValueExpr::CreateImpl(D, C);
-
- case CXXNewExprClass:
- return CXXNewExpr::CreateImpl(D, C);
-
- case CXXDeleteExprClass:
- return CXXDeleteExpr::CreateImpl(D, C);
-
- case UnresolvedFunctionNameExprClass:
- return UnresolvedFunctionNameExpr::CreateImpl(D, C);
-
- case CXXCatchStmtClass:
- return CXXCatchStmt::CreateImpl(D, C);
-
- case CXXTryStmtClass:
- return CXXTryStmt::CreateImpl(D, C);
-
- case QualifiedDeclRefExprClass:
- return QualifiedDeclRefExpr::CreateImpl(D, C);
- }
-}
-
-//===----------------------------------------------------------------------===//
-// C Serialization
-//===----------------------------------------------------------------------===//
-
-void AddrLabelExpr::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.Emit(AmpAmpLoc);
- S.Emit(LabelLoc);
- S.EmitPtr(Label);
-}
-
-AddrLabelExpr* AddrLabelExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- QualType t = QualType::ReadVal(D);
- SourceLocation AALoc = SourceLocation::ReadVal(D);
- SourceLocation LLoc = SourceLocation::ReadVal(D);
- AddrLabelExpr* expr = new (C, llvm::alignof<AddrLabelExpr>())
- AddrLabelExpr(AALoc,LLoc,NULL,t);
- D.ReadPtr(expr->Label); // Pointer may be backpatched.
- return expr;
-}
-
-void ArraySubscriptExpr::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.Emit(RBracketLoc);
- S.BatchEmitOwnedPtrs(getLHS(),getRHS());
-}
-
-ArraySubscriptExpr* ArraySubscriptExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- QualType t = QualType::ReadVal(D);
- SourceLocation L = SourceLocation::ReadVal(D);
- Expr *LHS, *RHS;
- D.BatchReadOwnedPtrs(LHS, RHS, C);
- return new (C, llvm::alignof<ArraySubscriptExpr>())
- ArraySubscriptExpr(LHS,RHS,t,L);
-}
-
-void AsmStmt::EmitImpl(Serializer& S) const {
- S.Emit(AsmLoc);
-
- getAsmString()->EmitImpl(S);
- S.Emit(RParenLoc);
-
- S.EmitBool(IsVolatile);
- S.EmitBool(IsSimple);
- S.EmitInt(NumOutputs);
- S.EmitInt(NumInputs);
-
- unsigned size = NumOutputs + NumInputs;
-
- for (unsigned i = 0; i < size; ++i)
- S.EmitCStr(Names[i].c_str());
-
- for (unsigned i = 0; i < size; ++i)
- Constraints[i]->EmitImpl(S);
-
- for (unsigned i = 0; i < size; ++i)
- S.EmitOwnedPtr(Exprs[i]);
-
- S.EmitInt(Clobbers.size());
- for (unsigned i = 0, e = Clobbers.size(); i != e; ++i)
- Clobbers[i]->EmitImpl(S);
-}
-
-AsmStmt* AsmStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation ALoc = SourceLocation::ReadVal(D);
- StringLiteral *AsmStr = StringLiteral::CreateImpl(D, C);
- SourceLocation PLoc = SourceLocation::ReadVal(D);
-
- bool IsVolatile = D.ReadBool();
- bool IsSimple = D.ReadBool();
- AsmStmt *Stmt = new (C, llvm::alignof<AsmStmt>())
- AsmStmt(ALoc, IsSimple, IsVolatile, 0, 0, 0, 0, 0, AsmStr, 0, 0, PLoc);
-
- Stmt->NumOutputs = D.ReadInt();
- Stmt->NumInputs = D.ReadInt();
-
- unsigned size = Stmt->NumOutputs + Stmt->NumInputs;
-
- Stmt->Names.reserve(size);
- for (unsigned i = 0; i < size; ++i) {
- std::vector<char> data;
- D.ReadCStr(data, false);
-
- Stmt->Names.push_back(std::string(data.begin(), data.end()));
- }
-
- Stmt->Constraints.reserve(size);
- for (unsigned i = 0; i < size; ++i)
- Stmt->Constraints.push_back(StringLiteral::CreateImpl(D, C));
-
- Stmt->Exprs.reserve(size);
- for (unsigned i = 0; i < size; ++i)
- Stmt->Exprs.push_back(D.ReadOwnedPtr<Expr>(C));
-
- unsigned NumClobbers = D.ReadInt();
- Stmt->Clobbers.reserve(NumClobbers);
- for (unsigned i = 0; i < NumClobbers; ++i)
- Stmt->Clobbers.push_back(StringLiteral::CreateImpl(D, C));
-
- return Stmt;
-}
-
-void BinaryOperator::EmitImpl(Serializer& S) const {
- S.EmitInt(Opc);
- S.Emit(OpLoc);;
- S.Emit(getType());
- S.BatchEmitOwnedPtrs(getLHS(),getRHS());
-}
-
-BinaryOperator* BinaryOperator::CreateImpl(Deserializer& D, ASTContext& C) {
- Opcode Opc = static_cast<Opcode>(D.ReadInt());
- SourceLocation OpLoc = SourceLocation::ReadVal(D);
- QualType Result = QualType::ReadVal(D);
- Expr *LHS, *RHS;
- D.BatchReadOwnedPtrs(LHS, RHS, C);
-
- return new (C, llvm::alignof<BinaryOperator>())
- BinaryOperator(LHS,RHS,Opc,Result,OpLoc);
-}
-
-void BreakStmt::EmitImpl(Serializer& S) const {
- S.Emit(BreakLoc);
-}
-
-BreakStmt* BreakStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation Loc = SourceLocation::ReadVal(D);
- return new (C, llvm::alignof<BreakStmt>()) BreakStmt(Loc);
-}
-
-void CallExpr::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.Emit(RParenLoc);
- S.EmitInt(NumArgs);
- S.BatchEmitOwnedPtrs(NumArgs+1, SubExprs);
-}
-
-CallExpr* CallExpr::CreateImpl(Deserializer& D, ASTContext& C, StmtClass SC) {
- QualType t = QualType::ReadVal(D);
- SourceLocation L = SourceLocation::ReadVal(D);
- unsigned NumArgs = D.ReadInt();
- Stmt** SubExprs = new (C, llvm::alignof<Stmt*>()) Stmt*[NumArgs+1];
- D.BatchReadOwnedPtrs(NumArgs+1, SubExprs, C);
- return new (C, llvm::alignof<CallExpr>()) CallExpr(SC, SubExprs,NumArgs,t,L);
-}
-
-void CaseStmt::EmitImpl(Serializer& S) const {
- S.Emit(CaseLoc);
- S.EmitPtr(getNextSwitchCase());
- S.BatchEmitOwnedPtrs((unsigned) END_EXPR,&SubExprs[0]);
-}
-
-CaseStmt* CaseStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation CaseLoc = SourceLocation::ReadVal(D);
- CaseStmt* stmt = new (C, llvm::alignof<CaseStmt>())
- CaseStmt(NULL,NULL,CaseLoc);
- D.ReadPtr(stmt->NextSwitchCase);
- D.BatchReadOwnedPtrs((unsigned) END_EXPR, &stmt->SubExprs[0], C);
- return stmt;
-}
-
-void CStyleCastExpr::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.Emit(getTypeAsWritten());
- S.Emit(LPLoc);
- S.Emit(RPLoc);
- S.EmitOwnedPtr(getSubExpr());
-}
-
-CStyleCastExpr* CStyleCastExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- QualType t = QualType::ReadVal(D);
- QualType writtenTy = QualType::ReadVal(D);
- SourceLocation LPLoc = SourceLocation::ReadVal(D);
- SourceLocation RPLoc = SourceLocation::ReadVal(D);
- Expr* Op = D.ReadOwnedPtr<Expr>(C);
- return new (C, llvm::alignof<CStyleCastExpr>())
- CStyleCastExpr(t,Op,writtenTy,LPLoc,RPLoc);
-}
-
-void CharacterLiteral::EmitImpl(Serializer& S) const {
- S.Emit(Value);
- S.Emit(Loc);
- S.EmitBool(IsWide);
- S.Emit(getType());
-}
-
-CharacterLiteral* CharacterLiteral::CreateImpl(Deserializer& D, ASTContext& C) {
- unsigned value = D.ReadInt();
- SourceLocation Loc = SourceLocation::ReadVal(D);
- bool iswide = D.ReadBool();
- QualType T = QualType::ReadVal(D);
- return new (C, llvm::alignof<CharacterLiteral>())
- CharacterLiteral(value,iswide,T,Loc);
-}
-
-void CompoundAssignOperator::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.Emit(ComputationLHSType);
- S.Emit(ComputationResultType);
- S.Emit(getOperatorLoc());
- S.EmitInt(getOpcode());
- S.BatchEmitOwnedPtrs(getLHS(),getRHS());
-}
-
-CompoundAssignOperator*
-CompoundAssignOperator::CreateImpl(Deserializer& D, ASTContext& C) {
- QualType t = QualType::ReadVal(D);
- QualType cl = QualType::ReadVal(D);
- QualType cr = QualType::ReadVal(D);
- SourceLocation L = SourceLocation::ReadVal(D);
- Opcode Opc = static_cast<Opcode>(D.ReadInt());
- Expr* LHS, *RHS;
- D.BatchReadOwnedPtrs(LHS, RHS, C);
-
- return new (C, llvm::alignof<CompoundAssignOperator>())
- CompoundAssignOperator(LHS,RHS,Opc,t,cl,cr,L);
-}
-
-void CompoundLiteralExpr::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.Emit(getLParenLoc());
- S.EmitBool(isFileScope());
- S.EmitOwnedPtr(Init);
-}
-
-CompoundLiteralExpr* CompoundLiteralExpr::CreateImpl(Deserializer& D,
- ASTContext& C) {
- QualType Q = QualType::ReadVal(D);
- SourceLocation L = SourceLocation::ReadVal(D);
- bool fileScope = D.ReadBool();
- Expr* Init = D.ReadOwnedPtr<Expr>(C);
- return new (C, llvm::alignof<CompoundLiteralExpr>())
- CompoundLiteralExpr(L, Q, Init, fileScope);
-}
-
-void CompoundStmt::EmitImpl(Serializer& S) const {
- S.Emit(LBracLoc);
- S.Emit(RBracLoc);
- S.Emit(NumStmts);
- if (NumStmts) S.BatchEmitOwnedPtrs(NumStmts, &Body[0]);
-}
-
-CompoundStmt* CompoundStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation LB = SourceLocation::ReadVal(D);
- SourceLocation RB = SourceLocation::ReadVal(D);
- unsigned size = D.ReadInt();
-
- CompoundStmt* stmt = new (C, llvm::alignof<CompoundStmt>())
- CompoundStmt(C, NULL, 0, LB, RB);
-
- stmt->NumStmts = size;
-
- if (size) {
- stmt->Body = new (C) Stmt*[size];
- D.BatchReadOwnedPtrs(size, &stmt->Body[0], C);
- }
-
- return stmt;
-}
-
-void ConditionalOperator::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.BatchEmitOwnedPtrs((unsigned) END_EXPR, SubExprs);
-}
-
-ConditionalOperator* ConditionalOperator::CreateImpl(Deserializer& D,
- ASTContext& C) {
-
- QualType t = QualType::ReadVal(D);
- ConditionalOperator* c = new (C, llvm::alignof<ConditionalOperator>())
- ConditionalOperator(NULL,NULL,NULL,t);
- D.BatchReadOwnedPtrs((unsigned) END_EXPR, c->SubExprs, C);
- return c;
-}
-
-void ContinueStmt::EmitImpl(Serializer& S) const {
- S.Emit(ContinueLoc);
-}
-
-ContinueStmt* ContinueStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation Loc = SourceLocation::ReadVal(D);
- return new ContinueStmt(Loc);
-}
-
-void DeclStmt::EmitImpl(Serializer& S) const {
- S.Emit(StartLoc);
- S.Emit(EndLoc);
- S.Emit(DG);
-}
-
-DeclStmt* DeclStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation StartLoc = SourceLocation::ReadVal(D);
- SourceLocation EndLoc = SourceLocation::ReadVal(D);
- return new DeclStmt(DeclGroupRef::ReadVal(D), StartLoc, EndLoc);
-}
-
-void DeclRefExpr::EmitImpl(Serializer& S) const {
- S.Emit(Loc);
- S.Emit(getType());
- S.EmitPtr(getDecl());
-}
-
-DeclRefExpr* DeclRefExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation Loc = SourceLocation::ReadVal(D);
- QualType T = QualType::ReadVal(D);
- DeclRefExpr *DRE = new DeclRefExpr(0, T, Loc);
- D.ReadPtr(DRE->D);
- return DRE;
-}
-
-void DefaultStmt::EmitImpl(Serializer& S) const {
- S.Emit(DefaultLoc);
- S.EmitOwnedPtr(getSubStmt());
- S.EmitPtr(getNextSwitchCase());
-}
-
-DefaultStmt* DefaultStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation Loc = SourceLocation::ReadVal(D);
- Stmt* SubStmt = D.ReadOwnedPtr<Stmt>(C);
-
- DefaultStmt* stmt = new DefaultStmt(Loc,SubStmt);
- stmt->setNextSwitchCase(D.ReadPtr<SwitchCase>());
-
- return stmt;
-}
-
-void DoStmt::EmitImpl(Serializer& S) const {
- S.Emit(DoLoc);
- S.EmitOwnedPtr(getCond());
- S.EmitOwnedPtr(getBody());
-}
-
-DoStmt* DoStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation DoLoc = SourceLocation::ReadVal(D);
- Expr* Cond = D.ReadOwnedPtr<Expr>(C);
- Stmt* Body = D.ReadOwnedPtr<Stmt>(C);
- return new DoStmt(Body,Cond,DoLoc);
-}
-
-void FloatingLiteral::EmitImpl(Serializer& S) const {
- S.Emit(Loc);
- S.Emit(getType());
- S.EmitBool(isExact());
- S.Emit(Value);
-}
-
-FloatingLiteral* FloatingLiteral::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation Loc = SourceLocation::ReadVal(D);
- QualType t = QualType::ReadVal(D);
- bool isExact = D.ReadBool();
- llvm::APFloat Val = llvm::APFloat::ReadVal(D);
- FloatingLiteral* expr = new FloatingLiteral(Val,&isExact,t,Loc);
- return expr;
-}
-
-void ForStmt::EmitImpl(Serializer& S) const {
- S.Emit(ForLoc);
- S.EmitOwnedPtr(getInit());
- S.EmitOwnedPtr(getCond());
- S.EmitOwnedPtr(getInc());
- S.EmitOwnedPtr(getBody());
-}
-
-ForStmt* ForStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation ForLoc = SourceLocation::ReadVal(D);
- Stmt* Init = D.ReadOwnedPtr<Stmt>(C);
- Expr* Cond = D.ReadOwnedPtr<Expr>(C);
- Expr* Inc = D.ReadOwnedPtr<Expr>(C);
- Stmt* Body = D.ReadOwnedPtr<Stmt>(C);
- return new ForStmt(Init,Cond,Inc,Body,ForLoc);
-}
-
-void GotoStmt::EmitImpl(Serializer& S) const {
- S.Emit(GotoLoc);
- S.Emit(LabelLoc);
- S.EmitPtr(Label);
-}
-
-GotoStmt* GotoStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation GotoLoc = SourceLocation::ReadVal(D);
- SourceLocation LabelLoc = SourceLocation::ReadVal(D);
- GotoStmt* stmt = new GotoStmt(NULL,GotoLoc,LabelLoc);
- D.ReadPtr(stmt->Label); // This pointer may be backpatched later.
- return stmt;
-}
-
-void IfStmt::EmitImpl(Serializer& S) const {
- S.Emit(IfLoc);
- S.EmitOwnedPtr(getCond());
- S.EmitOwnedPtr(getThen());
- S.EmitOwnedPtr(getElse());
-}
-
-IfStmt* IfStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation L = SourceLocation::ReadVal(D);
- Expr* Cond = D.ReadOwnedPtr<Expr>(C);
- Stmt* Then = D.ReadOwnedPtr<Stmt>(C);
- Stmt* Else = D.ReadOwnedPtr<Stmt>(C);
- return new IfStmt(L,Cond,Then,Else);
-}
-
-void ImaginaryLiteral::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.EmitOwnedPtr(Val);
-}
-
-ImaginaryLiteral* ImaginaryLiteral::CreateImpl(Deserializer& D, ASTContext& C) {
- QualType t = QualType::ReadVal(D);
- Expr* expr = D.ReadOwnedPtr<Expr>(C);
- assert (isa<FloatingLiteral>(expr) || isa<IntegerLiteral>(expr));
- return new ImaginaryLiteral(expr,t);
-}
-
-void ImplicitCastExpr::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.EmitOwnedPtr(getSubExpr());
- S.Emit(LvalueCast);
-}
-
-ImplicitCastExpr* ImplicitCastExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- QualType t = QualType::ReadVal(D);
- Expr* Op = D.ReadOwnedPtr<Expr>(C);
- bool isLvalue = D.ReadBool();
- return new ImplicitCastExpr(t,Op,isLvalue);
-}
-
-void IndirectGotoStmt::EmitImpl(Serializer& S) const {
- S.EmitOwnedPtr(Target);
-}
-
-IndirectGotoStmt* IndirectGotoStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- Expr* Target = D.ReadOwnedPtr<Expr>(C);
- return new IndirectGotoStmt(SourceLocation(), Target);
-}
-
-void InitListExpr::EmitImpl(Serializer& S) const {
- S.Emit(LBraceLoc);
- S.Emit(RBraceLoc);
- S.EmitInt(InitExprs.size());
- if (!InitExprs.empty()) S.BatchEmitOwnedPtrs(InitExprs.size(), &InitExprs[0]);
-}
-
-InitListExpr* InitListExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- InitListExpr* expr = new InitListExpr();
- expr->LBraceLoc = SourceLocation::ReadVal(D);
- expr->RBraceLoc = SourceLocation::ReadVal(D);
- unsigned size = D.ReadInt();
- assert(size);
- expr->InitExprs.reserve(size);
- for (unsigned i = 0 ; i < size; ++i) expr->InitExprs.push_back(0);
-
- D.BatchReadOwnedPtrs(size, &expr->InitExprs[0], C);
- return expr;
-}
-
-void IntegerLiteral::EmitImpl(Serializer& S) const {
- S.Emit(Loc);
- S.Emit(getType());
- S.Emit(getValue());
-}
-
-IntegerLiteral* IntegerLiteral::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation Loc = SourceLocation::ReadVal(D);
- QualType T = QualType::ReadVal(D);
-
- // Create a dummy APInt because it is more efficient to deserialize
- // it in place with the deserialized IntegerLiteral. (fewer copies)
- llvm::APInt temp;
- IntegerLiteral* expr = new IntegerLiteral(temp,T,Loc);
- D.Read(expr->Value);
-
- return expr;
-}
-
-void LabelStmt::EmitImpl(Serializer& S) const {
- S.EmitPtr(Label);
- S.Emit(IdentLoc);
- S.EmitOwnedPtr(SubStmt);
-}
-
-LabelStmt* LabelStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- IdentifierInfo* Label = D.ReadPtr<IdentifierInfo>();
- SourceLocation IdentLoc = SourceLocation::ReadVal(D);
- Stmt* SubStmt = D.ReadOwnedPtr<Stmt>(C);
- return new LabelStmt(IdentLoc,Label,SubStmt);
-}
-
-void MemberExpr::EmitImpl(Serializer& S) const {
- S.Emit(MemberLoc);
- S.EmitPtr(MemberDecl);
- S.EmitBool(IsArrow);
- S.Emit(getType());
- S.EmitOwnedPtr(Base);
-}
-
-MemberExpr* MemberExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation L = SourceLocation::ReadVal(D);
- NamedDecl* MemberDecl = cast<NamedDecl>(D.ReadPtr<Decl>());
- bool IsArrow = D.ReadBool();
- QualType T = QualType::ReadVal(D);
- Expr* base = D.ReadOwnedPtr<Expr>(C);
-
- return new MemberExpr(base,IsArrow,MemberDecl,L,T);
-}
-
-void NullStmt::EmitImpl(Serializer& S) const {
- S.Emit(SemiLoc);
-}
-
-NullStmt* NullStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation SemiLoc = SourceLocation::ReadVal(D);
- return new NullStmt(SemiLoc);
-}
-
-void ParenExpr::EmitImpl(Serializer& S) const {
- S.Emit(L);
- S.Emit(R);
- S.EmitOwnedPtr(Val);
-}
-
-ParenExpr* ParenExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation L = SourceLocation::ReadVal(D);
- SourceLocation R = SourceLocation::ReadVal(D);
- Expr* val = D.ReadOwnedPtr<Expr>(C);
- return new ParenExpr(L,R,val);
-}
-
-void PredefinedExpr::EmitImpl(Serializer& S) const {
- S.Emit(Loc);
- S.EmitInt(getIdentType());
- S.Emit(getType());
-}
-
-PredefinedExpr* PredefinedExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation Loc = SourceLocation::ReadVal(D);
- IdentType it = static_cast<IdentType>(D.ReadInt());
- QualType Q = QualType::ReadVal(D);
- return new PredefinedExpr(Loc,Q,it);
-}
-
-void ReturnStmt::EmitImpl(Serializer& S) const {
- S.Emit(RetLoc);
- S.EmitOwnedPtr(RetExpr);
-}
-
-ReturnStmt* ReturnStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation RetLoc = SourceLocation::ReadVal(D);
- Expr* RetExpr = D.ReadOwnedPtr<Expr>(C);
- return new ReturnStmt(RetLoc,RetExpr);
-}
-
-void SizeOfAlignOfExpr::EmitImpl(Serializer& S) const {
- S.EmitBool(isSizeof);
- S.EmitBool(isType);
- if (isType)
- S.Emit(getArgumentType());
- else
- S.EmitOwnedPtr(getArgumentExpr());
- S.Emit(getType());
- S.Emit(OpLoc);
- S.Emit(RParenLoc);
-}
-
-SizeOfAlignOfExpr*
-SizeOfAlignOfExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- bool isSizeof = D.ReadBool();
- bool isType = D.ReadBool();
- void *Argument;
- if (isType)
- Argument = QualType::ReadVal(D).getAsOpaquePtr();
- else
- Argument = D.ReadOwnedPtr<Expr>(C);
- QualType Res = QualType::ReadVal(D);
- SourceLocation OpLoc = SourceLocation::ReadVal(D);
- SourceLocation RParenLoc = SourceLocation::ReadVal(D);
-
- if (isType)
- return new (C) SizeOfAlignOfExpr(isSizeof,
- QualType::getFromOpaquePtr(Argument),
- Res, OpLoc, RParenLoc);
-
- return new (C) SizeOfAlignOfExpr(isSizeof, (Expr *)Argument,
- Res, OpLoc, RParenLoc);
-}
-
-void StmtExpr::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.Emit(LParenLoc);
- S.Emit(RParenLoc);
- S.EmitOwnedPtr(SubStmt);
-}
-
-StmtExpr* StmtExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- QualType t = QualType::ReadVal(D);
- SourceLocation L = SourceLocation::ReadVal(D);
- SourceLocation R = SourceLocation::ReadVal(D);
- CompoundStmt* SubStmt = cast<CompoundStmt>(D.ReadOwnedPtr<Stmt>(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);
- S.BatchEmitOwnedPtrs(NumExprs, &SubExprs[0]);
-}
-
-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();
- // FIXME: Avoid extra allocation.
- llvm::SmallVector<Expr*, 4> Exprs(NumExprs);
- D.BatchReadOwnedPtrs(NumExprs, Exprs.begin(), 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.BatchEmitOwnedPtrs((unsigned) END_EXPR, &SubExprs[0]);
-}
-
-ChooseExpr* ChooseExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) {
- QualType T = QualType::ReadVal(D);
- SourceLocation BL = SourceLocation::ReadVal(D);
- SourceLocation RP = SourceLocation::ReadVal(D);
- ChooseExpr *CE = new ChooseExpr(BL, 0, 0, 0, T, RP);
- D.BatchReadOwnedPtrs((unsigned) END_EXPR, &CE->SubExprs[0], C);
- return CE;
-}
-
-void GNUNullExpr::EmitImpl(llvm::Serializer &S) const {
- S.Emit(getType());
- S.Emit(TokenLoc);
-}
-
-GNUNullExpr *GNUNullExpr::CreateImpl(llvm::Deserializer &D, ASTContext &C) {
- QualType T = QualType::ReadVal(D);
- SourceLocation TL = SourceLocation::ReadVal(D);
- return new GNUNullExpr(T, TL);
-}
-
-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());
- assert(0 && "Unimpl loc serialization");
- S.EmitBool(isWide());
- S.Emit(getByteLength());
-
- for (unsigned i = 0 ; i < ByteLength; ++i)
- S.EmitInt(StrData[i]);
-}
-
-StringLiteral* StringLiteral::CreateImpl(Deserializer& D, ASTContext& C) {
- QualType t = QualType::ReadVal(D);
- assert(0 && "Unimpl loc serialization");
- //SourceLocation firstTokLoc = SourceLocation::ReadVal(D);
- //SourceLocation lastTokLoc = SourceLocation::ReadVal(D);
- bool isWide = D.ReadBool();
- unsigned ByteLength = D.ReadInt();
-
- StringLiteral* sl = StringLiteral::Create(C, NULL, 0, isWide, t,
- SourceLocation());
-
- char* StrData = new (C, llvm::alignof<char>()) char[ByteLength];
- for (unsigned i = 0; i < ByteLength; ++i)
- StrData[i] = (char) D.ReadInt();
-
- sl->ByteLength = ByteLength;
- sl->StrData = StrData;
-
- return sl;
-}
-
-void SwitchStmt::EmitImpl(Serializer& S) const {
- S.Emit(SwitchLoc);
- S.EmitOwnedPtr(getCond());
- S.EmitOwnedPtr(getBody());
- S.EmitPtr(FirstCase);
-}
-
-SwitchStmt* SwitchStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation Loc = SourceLocation::ReadVal(D);
- Stmt* Cond = D.ReadOwnedPtr<Stmt>(C);
- Stmt* Body = D.ReadOwnedPtr<Stmt>(C);
- SwitchCase* FirstCase = cast<SwitchCase>(D.ReadPtr<Stmt>());
-
- SwitchStmt* stmt = new SwitchStmt(cast<Expr>(Cond));
- stmt->setBody(Body,Loc);
- stmt->FirstCase = FirstCase;
-
- return stmt;
-}
-
-void UnaryOperator::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.Emit(Loc);
- S.EmitInt(Opc);
- S.EmitOwnedPtr(Val);
-}
-
-UnaryOperator* UnaryOperator::CreateImpl(Deserializer& D, ASTContext& C) {
- QualType t = QualType::ReadVal(D);
- SourceLocation L = SourceLocation::ReadVal(D);
- Opcode Opc = static_cast<Opcode>(D.ReadInt());
- Expr* Val = D.ReadOwnedPtr<Expr>(C);
- return new UnaryOperator(Val,Opc,t,L);
-}
-
-void WhileStmt::EmitImpl(Serializer& S) const {
- S.Emit(WhileLoc);
- S.EmitOwnedPtr(getCond());
- S.EmitOwnedPtr(getBody());
-}
-
-WhileStmt* WhileStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation WhileLoc = SourceLocation::ReadVal(D);
- Expr* Cond = D.ReadOwnedPtr<Expr>(C);
- Stmt* Body = D.ReadOwnedPtr<Stmt>(C);
- return new WhileStmt(Cond,Body,WhileLoc);
-}
-
-//===----------------------------------------------------------------------===//
-// Objective C Serialization
-//===----------------------------------------------------------------------===//
-
-void ObjCAtCatchStmt::EmitImpl(Serializer& S) const {
- S.Emit(AtCatchLoc);
- S.Emit(RParenLoc);
- S.BatchEmitOwnedPtrs((unsigned) END_EXPR, &SubExprs[0]);
-}
-
-ObjCAtCatchStmt* ObjCAtCatchStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation AtCatchLoc = SourceLocation::ReadVal(D);
- SourceLocation RParenLoc = SourceLocation::ReadVal(D);
-
- ObjCAtCatchStmt* stmt = new ObjCAtCatchStmt(AtCatchLoc,RParenLoc);
- D.BatchReadOwnedPtrs((unsigned) END_EXPR, &stmt->SubExprs[0], C);
-
- return stmt;
-}
-
-void ObjCAtFinallyStmt::EmitImpl(Serializer& S) const {
- S.Emit(AtFinallyLoc);
- S.EmitOwnedPtr(AtFinallyStmt);
-}
-
-ObjCAtFinallyStmt* ObjCAtFinallyStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation Loc = SourceLocation::ReadVal(D);
- Stmt* AtFinallyStmt = D.ReadOwnedPtr<Stmt>(C);
- return new ObjCAtFinallyStmt(Loc,AtFinallyStmt);
-}
-
-void ObjCAtSynchronizedStmt::EmitImpl(Serializer& S) const {
- S.Emit(AtSynchronizedLoc);
- S.BatchEmitOwnedPtrs((unsigned) END_EXPR,&SubStmts[0]);
- }
-
-ObjCAtSynchronizedStmt* ObjCAtSynchronizedStmt::CreateImpl(Deserializer& D,
- ASTContext& C) {
-
- SourceLocation L = SourceLocation::ReadVal(D);
- ObjCAtSynchronizedStmt* stmt = new ObjCAtSynchronizedStmt(L,0,0);
- D.BatchReadOwnedPtrs((unsigned) END_EXPR, &stmt->SubStmts[0], C);
- return stmt;
-}
-
-void ObjCAtThrowStmt::EmitImpl(Serializer& S) const {
- S.Emit(AtThrowLoc);
- S.EmitOwnedPtr(Throw);
-}
-
-ObjCAtThrowStmt* ObjCAtThrowStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation L = SourceLocation::ReadVal(D);
- Stmt* Throw = D.ReadOwnedPtr<Stmt>(C);
- return new ObjCAtThrowStmt(L,Throw);
-}
-
-void ObjCAtTryStmt::EmitImpl(Serializer& S) const {
- S.Emit(AtTryLoc);
- S.BatchEmitOwnedPtrs((unsigned) END_EXPR, &SubStmts[0]);
-}
-
-ObjCAtTryStmt* ObjCAtTryStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation L = SourceLocation::ReadVal(D);
- ObjCAtTryStmt* stmt = new ObjCAtTryStmt(L,NULL,NULL,NULL);
- D.BatchReadOwnedPtrs((unsigned) END_EXPR, &stmt->SubStmts[0], C);
- return stmt;
-}
-
-void ObjCEncodeExpr::EmitImpl(Serializer& S) const {
- S.Emit(AtLoc);
- S.Emit(RParenLoc);
- S.Emit(getType());
- S.Emit(EncType);
-}
-
-ObjCEncodeExpr* ObjCEncodeExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation AtLoc = SourceLocation::ReadVal(D);
- SourceLocation RParenLoc = SourceLocation::ReadVal(D);
- QualType T = QualType::ReadVal(D);
- QualType ET = QualType::ReadVal(D);
- return new ObjCEncodeExpr(T,ET,AtLoc,RParenLoc);
-}
-
-void ObjCForCollectionStmt::EmitImpl(Serializer& S) const {
- S.Emit(ForLoc);
- S.Emit(RParenLoc);
- S.BatchEmitOwnedPtrs(getElement(),getCollection(),getBody());
-}
-
-ObjCForCollectionStmt* ObjCForCollectionStmt::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation ForLoc = SourceLocation::ReadVal(D);
- SourceLocation RParenLoc = SourceLocation::ReadVal(D);
- Stmt* Element;
- Expr* Collection;
- Stmt* Body;
- D.BatchReadOwnedPtrs(Element, Collection, Body, C);
- 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());
- S.EmitPtr(getDecl());
-}
-
-ObjCIvarRefExpr* ObjCIvarRefExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation Loc = SourceLocation::ReadVal(D);
- QualType T = QualType::ReadVal(D);
- ObjCIvarRefExpr* dr = new ObjCIvarRefExpr(NULL,T,Loc);
- D.ReadPtr(dr->D,false);
- return dr;
-}
-
-void ObjCPropertyRefExpr::EmitImpl(Serializer& S) const {
- S.Emit(IdLoc);
- S.Emit(getType());
- S.EmitPtr(getProperty());
-}
-
-void ObjCKVCRefExpr::EmitImpl(Serializer& S) const {
- S.Emit(Loc);
- S.Emit(getType());
- S.EmitPtr(getGetterMethod());
- S.EmitPtr(getSetterMethod());
-}
-
-ObjCPropertyRefExpr* ObjCPropertyRefExpr::CreateImpl(Deserializer& D,
- ASTContext& C) {
- SourceLocation Loc = SourceLocation::ReadVal(D);
- QualType T = QualType::ReadVal(D);
- ObjCPropertyRefExpr* dr = new ObjCPropertyRefExpr(NULL,T,Loc,0);
- D.ReadPtr(dr->AsProperty,false);
- return dr;
-}
-
-ObjCKVCRefExpr* ObjCKVCRefExpr::CreateImpl(Deserializer& D,
- ASTContext& C) {
- SourceLocation Loc = SourceLocation::ReadVal(D);
- QualType T = QualType::ReadVal(D);
- ObjCKVCRefExpr* dr = new ObjCKVCRefExpr(NULL,T,NULL,Loc,0);
- D.ReadPtr(dr->Setter,false);
- D.ReadPtr(dr->Getter,false);
- return dr;
-}
-
-void ObjCMessageExpr::EmitImpl(Serializer& S) const {
- S.EmitInt(getFlag());
- S.Emit(getType());
- S.Emit(SelName);
- S.Emit(LBracloc);
- S.Emit(RBracloc);
- S.EmitInt(NumArgs);
- S.EmitPtr(MethodProto);
-
- if (getReceiver())
- S.BatchEmitOwnedPtrs(NumArgs+1, SubExprs);
- else {
- ClassInfo Info = getClassInfo();
-
- if (Info.first) S.EmitPtr(Info.first);
- else S.EmitPtr(Info.second);
-
- S.BatchEmitOwnedPtrs(NumArgs, &SubExprs[ARGS_START]);
- }
-}
-
-ObjCMessageExpr* ObjCMessageExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- unsigned flags = D.ReadInt();
- QualType t = QualType::ReadVal(D);
- Selector S = Selector::ReadVal(D);
- SourceLocation L = SourceLocation::ReadVal(D);
- SourceLocation R = SourceLocation::ReadVal(D);
-
- // Construct an array for the subexpressions.
- unsigned NumArgs = D.ReadInt();
- Stmt** SubExprs = new Stmt*[NumArgs+1];
-
- // Construct the ObjCMessageExpr object using the special ctor.
- ObjCMessageExpr* ME = new ObjCMessageExpr(S, t, L, R, SubExprs, NumArgs);
-
- // Read in the MethodProto. Read the instance variable directly
- // allows it to be backpatched.
- D.ReadPtr(ME->MethodProto);
-
- // Now read in the arguments.
-
- if ((flags & Flags) == IsInstMeth)
- D.BatchReadOwnedPtrs(NumArgs+1, SubExprs, C);
- else {
- // Read the pointer for Cls/ClassName. The Deserializer will handle the
- // bit-mangling automatically.
- SubExprs[RECEIVER] = (Stmt*) ((uintptr_t) flags);
- D.ReadUIntPtr((uintptr_t&) SubExprs[RECEIVER]);
-
- // Read the arguments.
- D.BatchReadOwnedPtrs(NumArgs, &SubExprs[ARGS_START], C);
- }
-
- return ME;
-}
-
-void ObjCSelectorExpr::EmitImpl(Serializer& S) const {
- S.Emit(AtLoc);
- S.Emit(RParenLoc);
- S.Emit(getType());
- S.Emit(SelName);
-}
-
-ObjCSelectorExpr* ObjCSelectorExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation AtLoc = SourceLocation::ReadVal(D);
- SourceLocation RParenLoc = SourceLocation::ReadVal(D);
- QualType T = QualType::ReadVal(D);
- Selector SelName = Selector::ReadVal(D);
-
- return new ObjCSelectorExpr(T,SelName,AtLoc,RParenLoc);
-}
-
-void ObjCStringLiteral::EmitImpl(Serializer& S) const {
- S.Emit(AtLoc);
- S.Emit(getType());
- S.EmitOwnedPtr(String);
-}
-
-ObjCStringLiteral* ObjCStringLiteral::CreateImpl(Deserializer& D, ASTContext& C) {
- SourceLocation L = SourceLocation::ReadVal(D);
- QualType T = QualType::ReadVal(D);
- StringLiteral* String = cast<StringLiteral>(D.ReadOwnedPtr<Stmt>(C));
- return new ObjCStringLiteral(String,T,L);
-}
-
-void ObjCSuperExpr::EmitImpl(llvm::Serializer& S) const {
- S.Emit(getType());
- S.Emit(Loc);
-}
-
-ObjCSuperExpr* ObjCSuperExpr::CreateImpl(llvm::Deserializer& D, ASTContext&) {
- QualType Ty = QualType::ReadVal(D);
- SourceLocation Loc = SourceLocation::ReadVal(D);
- return new ObjCSuperExpr(Loc, Ty);
-}
-
-//===----------------------------------------------------------------------===//
-// 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 (C) ExtVectorElementExpr(T, B, *A, AL);
-}
-
-void BlockExpr::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.EmitOwnedPtr(TheBlock);
- S.EmitBool(HasBlockDeclRefExprs);
-}
-
-BlockExpr* BlockExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- QualType T = QualType::ReadVal(D);
- BlockDecl *B = cast<BlockDecl>(D.ReadOwnedPtr<Decl>(C));
- bool H = D.ReadBool();
- return new BlockExpr(B,T,H);
-}
-
-void BlockDeclRefExpr::EmitImpl(Serializer& S) const {
- S.Emit(Loc);
- S.Emit(getType());
- S.EmitBool(false);
- S.EmitPtr(getDecl());
-}
-
-BlockDeclRefExpr* BlockDeclRefExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- assert(0 && "Cannot deserialize BlockDeclRefExpr yet");
- return 0;
-}
-
-//===----------------------------------------------------------------------===//
-// C++ Serialization
-//===----------------------------------------------------------------------===//
-void CXXDefaultArgExpr::EmitImpl(Serializer& S) const {
- S.EmitPtr(Param);
-}
-
-CXXDefaultArgExpr *CXXDefaultArgExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- ParmVarDecl* Param = 0;
- D.ReadPtr(Param, false);
- return new CXXDefaultArgExpr(Param);
-}
-
-void CXXFunctionalCastExpr::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.Emit(getTypeAsWritten());
- S.Emit(TyBeginLoc);
- S.Emit(RParenLoc);
- S.EmitOwnedPtr(getSubExpr());
-}
-
-CXXFunctionalCastExpr *
-CXXFunctionalCastExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- QualType Ty = QualType::ReadVal(D);
- QualType WrittenTy = QualType::ReadVal(D);
- SourceLocation TyBeginLoc = SourceLocation::ReadVal(D);
- SourceLocation RParenLoc = SourceLocation::ReadVal(D);
- Expr* SubExpr = D.ReadOwnedPtr<Expr>(C);
- return new CXXFunctionalCastExpr(Ty, WrittenTy, TyBeginLoc, SubExpr, RParenLoc);
-}
-
-void CXXNamedCastExpr::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.Emit(getTypeAsWritten());
- S.Emit(Loc);
- S.EmitOwnedPtr(getSubExpr());
-}
-
-CXXNamedCastExpr *
-CXXNamedCastExpr::CreateImpl(Deserializer& D, ASTContext& C, StmtClass SC) {
- QualType Ty = QualType::ReadVal(D);
- QualType WrittenTy = QualType::ReadVal(D);
- SourceLocation Loc = SourceLocation::ReadVal(D);
- Expr* SubExpr = D.ReadOwnedPtr<Expr>(C);
- switch (SC) {
- case CXXStaticCastExprClass:
- return new CXXStaticCastExpr(Ty, SubExpr, WrittenTy, Loc);
- case CXXDynamicCastExprClass:
- return new CXXDynamicCastExpr(Ty, SubExpr, WrittenTy, Loc);
- case CXXReinterpretCastExprClass:
- return new CXXReinterpretCastExpr(Ty, SubExpr, WrittenTy, Loc);
- case CXXConstCastExprClass:
- return new CXXConstCastExpr(Ty, SubExpr, WrittenTy, Loc);
- default:
- assert(false && "Unknown cast type!");
- return 0;
- }
-}
-
-void CXXTypeidExpr::EmitImpl(llvm::Serializer& S) const {
- S.Emit(getType());
- S.EmitBool(isTypeOperand());
- if (isTypeOperand()) {
- S.Emit(getTypeOperand());
- } else {
- S.EmitOwnedPtr(getExprOperand());
- }
- S.Emit(Range);
-}
-
-CXXTypeidExpr*
-CXXTypeidExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) {
- QualType Ty = QualType::ReadVal(D);
- bool isTypeOp = D.ReadBool();
- void *Operand;
- if (isTypeOp) {
- Operand = QualType::ReadVal(D).getAsOpaquePtr();
- } else {
- Operand = D.ReadOwnedPtr<Expr>(C);
- }
- SourceRange Range = SourceRange::ReadVal(D);
- return new CXXTypeidExpr(isTypeOp, Operand, Ty, Range);
-}
-
-void CXXThisExpr::EmitImpl(llvm::Serializer& S) const {
- S.Emit(getType());
- S.Emit(Loc);
-}
-
-CXXThisExpr* CXXThisExpr::CreateImpl(llvm::Deserializer& D, ASTContext&) {
- QualType Ty = QualType::ReadVal(D);
- SourceLocation Loc = SourceLocation::ReadVal(D);
- return new CXXThisExpr(Loc, Ty);
-}
-
-void CXXTemporaryObjectExpr::EmitImpl(llvm::Serializer& S) const {
- S.Emit(getType());
- S.Emit(TyBeginLoc);
- S.Emit(RParenLoc);
- S.EmitPtr(cast<Decl>(Constructor));
- S.EmitInt(NumArgs);
- if (NumArgs > 0)
- S.BatchEmitOwnedPtrs(NumArgs, Args);
-}
-
-CXXTemporaryObjectExpr *
-CXXTemporaryObjectExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) {
- QualType writtenTy = QualType::ReadVal(D);
- SourceLocation tyBeginLoc = SourceLocation::ReadVal(D);
- SourceLocation rParenLoc = SourceLocation::ReadVal(D);
- CXXConstructorDecl * Cons = cast_or_null<CXXConstructorDecl>(D.ReadPtr<Decl>());
- unsigned NumArgs = D.ReadInt();
- Stmt** Args = 0;
- if (NumArgs > 0) {
- Args = new Stmt*[NumArgs];
- D.BatchReadOwnedPtrs(NumArgs, Args, C);
- }
-
- CXXTemporaryObjectExpr * Result
- = new CXXTemporaryObjectExpr(Cons, writtenTy, tyBeginLoc,
- (Expr**)Args, NumArgs, rParenLoc);
-
- if (NumArgs > 0)
- delete [] Args;
-
- return Result;
-}
-
-
-void CXXZeroInitValueExpr::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.Emit(TyBeginLoc);
- S.Emit(RParenLoc);
-}
-
-CXXZeroInitValueExpr *
-CXXZeroInitValueExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- QualType Ty = QualType::ReadVal(D);
- SourceLocation TyBeginLoc = SourceLocation::ReadVal(D);
- SourceLocation RParenLoc = SourceLocation::ReadVal(D);
- return new CXXZeroInitValueExpr(Ty, TyBeginLoc, RParenLoc);
-}
-
-void CXXNewExpr::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.EmitBool(GlobalNew);
- S.EmitBool(ParenTypeId);
- S.EmitBool(Initializer);
- S.EmitBool(Array);
- S.EmitInt(NumPlacementArgs);
- S.EmitInt(NumConstructorArgs);
- S.BatchEmitOwnedPtrs(NumPlacementArgs + NumConstructorArgs, SubExprs);
- assert((OperatorNew == 0 || S.isRegistered(OperatorNew)) &&
- (OperatorDelete == 0 || S.isRegistered(OperatorDelete)) &&
- (Constructor == 0 || S.isRegistered(Constructor)) &&
- "CXXNewExpr cannot own declarations");
- S.EmitPtr(OperatorNew);
- S.EmitPtr(OperatorDelete);
- S.EmitPtr(Constructor);
- S.Emit(StartLoc);
- S.Emit(EndLoc);
-}
-
-CXXNewExpr *
-CXXNewExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- QualType T = QualType::ReadVal(D);
- bool GlobalNew = D.ReadBool();
- bool ParenTypeId = D.ReadBool();
- bool Initializer = D.ReadBool();
- bool Array = D.ReadBool();
- unsigned NumPlacementArgs = D.ReadInt();
- unsigned NumConstructorArgs = D.ReadInt();
- unsigned TotalExprs = Array + NumPlacementArgs + NumConstructorArgs;
- Stmt** SubExprs = new Stmt*[TotalExprs];
- D.BatchReadOwnedPtrs(TotalExprs, SubExprs, C);
- FunctionDecl *OperatorNew = D.ReadPtr<FunctionDecl>();
- FunctionDecl *OperatorDelete = D.ReadPtr<FunctionDecl>();
- CXXConstructorDecl *Constructor = D.ReadPtr<CXXConstructorDecl>();
- SourceLocation StartLoc = SourceLocation::ReadVal(D);
- SourceLocation EndLoc = SourceLocation::ReadVal(D);
-
- return new CXXNewExpr(T, GlobalNew, ParenTypeId, Initializer, Array,
- NumPlacementArgs, NumConstructorArgs, SubExprs,
- OperatorNew, OperatorDelete, Constructor, StartLoc,
- EndLoc);
-}
-
-void CXXDeleteExpr::EmitImpl(Serializer& S) const {
- S.Emit(getType());
- S.EmitBool(GlobalDelete);
- S.EmitBool(ArrayForm);
- S.EmitPtr(OperatorDelete);
- S.EmitOwnedPtr(Argument);
- S.Emit(Loc);
-}
-
-CXXDeleteExpr *
-CXXDeleteExpr::CreateImpl(Deserializer& D, ASTContext& C) {
- QualType Ty = QualType::ReadVal(D);
- bool GlobalDelete = D.ReadBool();
- bool ArrayForm = D.ReadBool();
- FunctionDecl *OperatorDelete = D.ReadPtr<FunctionDecl>();
- Stmt *Argument = D.ReadOwnedPtr<Stmt>(C);
- SourceLocation Loc = SourceLocation::ReadVal(D);
- return new CXXDeleteExpr(Ty, GlobalDelete, ArrayForm, OperatorDelete,
- cast<Expr>(Argument), Loc);
-}
-
-void UnresolvedFunctionNameExpr::EmitImpl(llvm::Serializer& S) const {
- S.Emit(getType());
- S.EmitPtr(Name.getAsIdentifierInfo()); // FIXME: WRONG!
- S.Emit(Loc);
-}
-
-UnresolvedFunctionNameExpr *
-UnresolvedFunctionNameExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) {
- QualType Ty = QualType::ReadVal(D);
- IdentifierInfo *N = D.ReadPtr<IdentifierInfo>();
- SourceLocation L = SourceLocation::ReadVal(D);
- return new UnresolvedFunctionNameExpr(N, Ty, L);
-}
-
-void UnaryTypeTraitExpr::EmitImpl(llvm::Serializer& S) const {
- S.EmitInt(UTT);
- S.Emit(Loc);
- S.Emit(RParen);
- S.Emit(QueriedType);
- S.Emit(getType());
-}
-
-UnaryTypeTraitExpr *
-UnaryTypeTraitExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) {
- UnaryTypeTrait UTT = static_cast<UnaryTypeTrait>(D.ReadInt());
- SourceLocation Loc = SourceLocation::ReadVal(D);
- SourceLocation RParen = SourceLocation::ReadVal(D);
- QualType QueriedType = QualType::ReadVal(D);
- QualType Ty = QualType::ReadVal(D);
- return new UnaryTypeTraitExpr(Loc, UTT, QueriedType, RParen, Ty);
-}
-
-void CXXCatchStmt::EmitImpl(llvm::Serializer& S) const {
- S.Emit(CatchLoc);
- S.EmitOwnedPtr(ExceptionDecl);
- S.EmitOwnedPtr(HandlerBlock);
-}
-
-CXXCatchStmt *
-CXXCatchStmt::CreateImpl(llvm::Deserializer& D, ASTContext& C) {
- SourceLocation CatchLoc = SourceLocation::ReadVal(D);
- Decl *ExDecl = D.ReadOwnedPtr<Decl>(C);
- Stmt *HandlerBlock = D.ReadOwnedPtr<Stmt>(C);
- return new CXXCatchStmt(CatchLoc, ExDecl, HandlerBlock);
-}
-
-void CXXTryStmt::EmitImpl(llvm::Serializer& S) const {
- S.Emit(TryLoc);
- S.EmitInt(Stmts.size());
- S.BatchEmitOwnedPtrs(Stmts.size(), &Stmts[0]);
-}
-
-CXXTryStmt *
-CXXTryStmt::CreateImpl(llvm::Deserializer& D, ASTContext& C) {
- SourceLocation TryLoc = SourceLocation::ReadVal(D);
- unsigned size = D.ReadInt();
- llvm::SmallVector<Stmt*, 4> Stmts(size);
- D.BatchReadOwnedPtrs<Stmt>(size, &Stmts[0], C);
-
- return new CXXTryStmt(TryLoc, Stmts[0], &Stmts[1], size - 1);
-}
-
-void QualifiedDeclRefExpr::EmitImpl(llvm::Serializer& S) const {
- DeclRefExpr::EmitImpl(S);
- S.Emit(QualifierRange);
- // FIXME: Serialize nested-name-specifiers
-}
-
-QualifiedDeclRefExpr*
-QualifiedDeclRefExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) {
- assert(false && "Cannot deserialize qualified decl references");
- return 0;
-}
OpenPOWER on IntegriCloud