ASTReaderStmt.cpp revision f3db29fff6a583ecda823cf909ab7737d8d30129
1904c9c8389b65ee93a706ede911accd11e0b9d8eSebastian Redl//===--- ASTReaderStmt.cpp - Stmt/Expr Deserialization ----------*- C++ -*-===// 24c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// 34c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// The LLVM Compiler Infrastructure 44c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// 54c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// This file is distributed under the University of Illinois Open Source 64c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// License. See LICENSE.TXT for details. 74c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// 84c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner//===----------------------------------------------------------------------===// 94c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// 104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// Statement/expression deserialization. This implements the 11c43b54cbc10654ed59de797898042e1a05265246Sebastian Redl// ASTReader::ReadStmt method. 124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// 134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner//===----------------------------------------------------------------------===// 144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 156ab7cd853e9c15cf986a8a7c3db1f8d20e275409Sebastian Redl#include "clang/Serialization/ASTReader.h" 1639da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor#include "clang/AST/DeclCXX.h" 17c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor#include "clang/AST/DeclTemplate.h" 184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner#include "clang/AST/StmtVisitor.h" 194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattnerusing namespace clang; 208538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redlusing namespace clang::serialization; 214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 2237bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidisnamespace clang { 2317cfdeda476aa8899f0ccedd9cb9cdb76e89b6b4Argyrios Kyrtzidis 2460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl class ASTStmtReader : public StmtVisitor<ASTStmtReader> { 25c43b54cbc10654ed59de797898042e1a05265246Sebastian Redl ASTReader &Reader; 26c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ASTReader::PerFileData &F; 27577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl llvm::BitstreamCursor &DeclsCursor; 28c43b54cbc10654ed59de797898042e1a05265246Sebastian Redl const ASTReader::RecordData &Record; 294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned &Idx; 304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 31c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation ReadSourceLocation(const ASTReader::RecordData &R, 32c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl unsigned &I) { 33c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return Reader.ReadSourceLocation(F, R, I); 34c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl } 35c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceRange ReadSourceRange(const ASTReader::RecordData &R, unsigned &I) { 36c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return Reader.ReadSourceRange(F, R, I); 37c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl } 38c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl TypeSourceInfo *GetTypeSourceInfo(const ASTReader::RecordData &R, 39c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl unsigned &I) { 40c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return Reader.GetTypeSourceInfo(F, R, I); 41c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl } 424045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis void ReadDeclarationNameLoc(DeclarationNameLoc &DNLoc, DeclarationName Name, 434045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis const ASTReader::RecordData &R, unsigned &I) { 444045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis Reader.ReadDeclarationNameLoc(F, DNLoc, Name, R, I); 454045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis } 464045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis void ReadDeclarationNameInfo(DeclarationNameInfo &NameInfo, 474045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis const ASTReader::RecordData &R, unsigned &I) { 484045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis Reader.ReadDeclarationNameInfo(F, NameInfo, R, I); 494045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis } 50c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl 514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner public: 52c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ASTStmtReader(ASTReader &Reader, ASTReader::PerFileData &F, 53c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl llvm::BitstreamCursor &Cursor, 54c43b54cbc10654ed59de797898042e1a05265246Sebastian Redl const ASTReader::RecordData &Record, unsigned &Idx) 55c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl : Reader(Reader), F(F), DeclsCursor(Cursor), Record(Record), Idx(Idx) { } 564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// \brief The number of record fields required for the Stmt class 584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// itself. 594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner static const unsigned NumStmtFields = 0; 604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// \brief The number of record fields required for the Expr class 624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// itself. 63d0937224f383c7cc72c947119380f9713a070c73Douglas Gregor static const unsigned NumExprFields = NumStmtFields + 6; 6436c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis 6536c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis /// \brief Read and initialize a ExplicitTemplateArgumentList structure. 66919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void ReadExplicitTemplateArgumentList(ExplicitTemplateArgumentList &ArgList, 67919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis unsigned NumTemplateArgs); 68919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 69919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitStmt(Stmt *S); 70919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitNullStmt(NullStmt *S); 71919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCompoundStmt(CompoundStmt *S); 72919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitSwitchCase(SwitchCase *S); 73919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCaseStmt(CaseStmt *S); 74919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDefaultStmt(DefaultStmt *S); 75919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitLabelStmt(LabelStmt *S); 76919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitIfStmt(IfStmt *S); 77919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitSwitchStmt(SwitchStmt *S); 78919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitWhileStmt(WhileStmt *S); 79919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDoStmt(DoStmt *S); 80919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitForStmt(ForStmt *S); 81919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitGotoStmt(GotoStmt *S); 82919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitIndirectGotoStmt(IndirectGotoStmt *S); 83919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitContinueStmt(ContinueStmt *S); 84919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitBreakStmt(BreakStmt *S); 85919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitReturnStmt(ReturnStmt *S); 86919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDeclStmt(DeclStmt *S); 87919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitAsmStmt(AsmStmt *S); 88919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitExpr(Expr *E); 89919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitPredefinedExpr(PredefinedExpr *E); 90919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDeclRefExpr(DeclRefExpr *E); 91919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitIntegerLiteral(IntegerLiteral *E); 92919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitFloatingLiteral(FloatingLiteral *E); 93919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitImaginaryLiteral(ImaginaryLiteral *E); 94919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitStringLiteral(StringLiteral *E); 95919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCharacterLiteral(CharacterLiteral *E); 96919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitParenExpr(ParenExpr *E); 9737bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis void VisitParenListExpr(ParenListExpr *E); 98919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitUnaryOperator(UnaryOperator *E); 99919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitOffsetOfExpr(OffsetOfExpr *E); 100919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E); 101919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitArraySubscriptExpr(ArraySubscriptExpr *E); 102919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCallExpr(CallExpr *E); 103919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitMemberExpr(MemberExpr *E); 104919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCastExpr(CastExpr *E); 105919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitBinaryOperator(BinaryOperator *E); 106919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCompoundAssignOperator(CompoundAssignOperator *E); 107919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitConditionalOperator(ConditionalOperator *E); 10856ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall void VisitBinaryConditionalOperator(BinaryConditionalOperator *E); 109919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitImplicitCastExpr(ImplicitCastExpr *E); 110919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitExplicitCastExpr(ExplicitCastExpr *E); 111919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCStyleCastExpr(CStyleCastExpr *E); 112919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCompoundLiteralExpr(CompoundLiteralExpr *E); 113919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitExtVectorElementExpr(ExtVectorElementExpr *E); 114919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitInitListExpr(InitListExpr *E); 115919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDesignatedInitExpr(DesignatedInitExpr *E); 116919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitImplicitValueInitExpr(ImplicitValueInitExpr *E); 117919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitVAArgExpr(VAArgExpr *E); 118919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitAddrLabelExpr(AddrLabelExpr *E); 119919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitStmtExpr(StmtExpr *E); 120919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitChooseExpr(ChooseExpr *E); 121919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitGNUNullExpr(GNUNullExpr *E); 122919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitShuffleVectorExpr(ShuffleVectorExpr *E); 123919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitBlockExpr(BlockExpr *E); 124919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitBlockDeclRefExpr(BlockDeclRefExpr *E); 125919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCStringLiteral(ObjCStringLiteral *E); 126919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCEncodeExpr(ObjCEncodeExpr *E); 127919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCSelectorExpr(ObjCSelectorExpr *E); 128919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCProtocolExpr(ObjCProtocolExpr *E); 129919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCIvarRefExpr(ObjCIvarRefExpr *E); 130919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E); 131919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCMessageExpr(ObjCMessageExpr *E); 132919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCIsaExpr(ObjCIsaExpr *E); 133919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 134919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCForCollectionStmt(ObjCForCollectionStmt *); 135919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCAtCatchStmt(ObjCAtCatchStmt *); 136919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *); 137919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCAtTryStmt(ObjCAtTryStmt *); 138919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *); 139919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCAtThrowStmt(ObjCAtThrowStmt *); 140919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1417cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis // C++ Statements 1427cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis void VisitCXXCatchStmt(CXXCatchStmt *S); 1437cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis void VisitCXXTryStmt(CXXTryStmt *S); 1447cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 145919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E); 146919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXConstructExpr(CXXConstructExpr *E); 1476d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis void VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E); 148919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXNamedCastExpr(CXXNamedCastExpr *E); 149919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXStaticCastExpr(CXXStaticCastExpr *E); 150919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXDynamicCastExpr(CXXDynamicCastExpr *E); 151919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXReinterpretCastExpr(CXXReinterpretCastExpr *E); 152919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXConstCastExpr(CXXConstCastExpr *E); 153919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *E); 154919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E); 155919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E); 156919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXTypeidExpr(CXXTypeidExpr *E); 15701b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet void VisitCXXUuidofExpr(CXXUuidofExpr *E); 158919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXThisExpr(CXXThisExpr *E); 159919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXThrowExpr(CXXThrowExpr *E); 160919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E); 161919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E); 162d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 163ed8abf18329df67b0abcbb3a10458bd8c1d2a595Douglas Gregor void VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E); 164919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXNewExpr(CXXNewExpr *E); 165919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXDeleteExpr(CXXDeleteExpr *E); 166919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E); 1675921863d8f24084797863b5df37842113bac4352Chris Lattner 1684765fa05b5652fcc4356371c2f481d0ea9a1b007John McCall void VisitExprWithCleanups(ExprWithCleanups *E); 1698dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 170919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E); 171919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E); 172919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E); 173a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 174919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitOverloadExpr(OverloadExpr *E); 175919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitUnresolvedMemberExpr(UnresolvedMemberExpr *E); 176919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E); 1776d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 1786d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis void VisitUnaryTypeTraitExpr(UnaryTypeTraitExpr *E); 1796ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet void VisitBinaryTypeTraitExpr(BinaryTypeTraitExpr *E); 1806b219d082434394c1ac401390ec1d1967727815aSebastian Redl void VisitCXXNoexceptExpr(CXXNoexceptExpr *E); 181be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor void VisitPackExpansionExpr(PackExpansionExpr *E); 182ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor void VisitSizeOfPackExpr(SizeOfPackExpr *E); 183c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor void VisitSubstNonTypeTemplateParmPackExpr( 184c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor SubstNonTypeTemplateParmPackExpr *E); 1857cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall void VisitOpaqueValueExpr(OpaqueValueExpr *E); 186e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne 187e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne // CUDA Expressions 188e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne void VisitCUDAKernelCallExpr(CUDAKernelCallExpr *E); 1894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner }; 1904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 19260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader:: 19336c76f0bea0d3595a25a5362225c642019cc3176Argyrios KyrtzidisReadExplicitTemplateArgumentList(ExplicitTemplateArgumentList &ArgList, 194919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis unsigned NumTemplateArgs) { 19536c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis TemplateArgumentListInfo ArgInfo; 196c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.setLAngleLoc(ReadSourceLocation(Record, Idx)); 197c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.setRAngleLoc(ReadSourceLocation(Record, Idx)); 19836c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis for (unsigned i = 0; i != NumTemplateArgs; ++i) 199577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl ArgInfo.addArgument( 200c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl Reader.ReadTemplateArgumentLoc(F, Record, Idx)); 20136c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis ArgList.initializeFrom(ArgInfo); 20236c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis} 20336c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis 20460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitStmt(Stmt *S) { 2054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(Idx == NumStmtFields && "Incorrect statement field count"); 2064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 20860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitNullStmt(NullStmt *S) { 2094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 210c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setSemiLoc(ReadSourceLocation(Record, Idx)); 21144aa1f397855f130e88e62ffc1029f7f83bb5d2eArgyrios Kyrtzidis S->LeadingEmptyMacro = Record[Idx++]; 2124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 21460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCompoundStmt(CompoundStmt *S) { 2154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 216919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis llvm::SmallVector<Stmt *, 16> Stmts; 2174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumStmts = Record[Idx++]; 218919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis while (NumStmts--) 219d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Stmts.push_back(Reader.ReadSubStmt()); 220919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis S->setStmts(*Reader.getContext(), Stmts.data(), Stmts.size()); 221c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setLBracLoc(ReadSourceLocation(Record, Idx)); 222c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRBracLoc(ReadSourceLocation(Record, Idx)); 2234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 22560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitSwitchCase(SwitchCase *S) { 2264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 2274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Reader.RecordSwitchCaseID(S, Record[Idx++]); 2284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 23060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCaseStmt(CaseStmt *S) { 2314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitSwitchCase(S); 232d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setLHS(Reader.ReadSubExpr()); 233d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setRHS(Reader.ReadSubExpr()); 234d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSubStmt(Reader.ReadSubStmt()); 235c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setCaseLoc(ReadSourceLocation(Record, Idx)); 236c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setEllipsisLoc(ReadSourceLocation(Record, Idx)); 237c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setColonLoc(ReadSourceLocation(Record, Idx)); 2384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 24060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDefaultStmt(DefaultStmt *S) { 2414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitSwitchCase(S); 242d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSubStmt(Reader.ReadSubStmt()); 243c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setDefaultLoc(ReadSourceLocation(Record, Idx)); 244c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setColonLoc(ReadSourceLocation(Record, Idx)); 2454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 24760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitLabelStmt(LabelStmt *S) { 2484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 249ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner LabelDecl *LD = cast<LabelDecl>(Reader.GetDecl(Record[Idx++])); 250ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner LD->setStmt(S); 251ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner S->setDecl(LD); 252d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSubStmt(Reader.ReadSubStmt()); 253c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setIdentLoc(ReadSourceLocation(Record, Idx)); 2544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 25660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitIfStmt(IfStmt *S) { 2574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 25843dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor S->setConditionVariable(*Reader.getContext(), 25943dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 260d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 261d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setThen(Reader.ReadSubStmt()); 262d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setElse(Reader.ReadSubStmt()); 263c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setIfLoc(ReadSourceLocation(Record, Idx)); 264c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setElseLoc(ReadSourceLocation(Record, Idx)); 2654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 26760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitSwitchStmt(SwitchStmt *S) { 2684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 26943dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor S->setConditionVariable(*Reader.getContext(), 27043dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 271d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 272d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 273c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setSwitchLoc(ReadSourceLocation(Record, Idx)); 274559fb554602bedb57dbbf3cc14ac8a38264b4547Ted Kremenek if (Record[Idx++]) 275559fb554602bedb57dbbf3cc14ac8a38264b4547Ted Kremenek S->setAllEnumCasesCovered(); 276559fb554602bedb57dbbf3cc14ac8a38264b4547Ted Kremenek 2774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SwitchCase *PrevSC = 0; 2784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned N = Record.size(); Idx != N; ++Idx) { 2794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SwitchCase *SC = Reader.getSwitchCaseWithID(Record[Idx]); 2804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (PrevSC) 2814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner PrevSC->setNextSwitchCase(SC); 2824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner else 2834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setSwitchCaseList(SC); 2841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 2854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner PrevSC = SC; 2864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 2874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 28960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitWhileStmt(WhileStmt *S) { 2904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 29143dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor S->setConditionVariable(*Reader.getContext(), 29243dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 293d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 294d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 295c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setWhileLoc(ReadSourceLocation(Record, Idx)); 2964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 29860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDoStmt(DoStmt *S) { 2994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 300d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 301d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 302c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setDoLoc(ReadSourceLocation(Record, Idx)); 303c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setWhileLoc(ReadSourceLocation(Record, Idx)); 304c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 3054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 30760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitForStmt(ForStmt *S) { 3084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 309d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setInit(Reader.ReadSubStmt()); 310d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 31143dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor S->setConditionVariable(*Reader.getContext(), 31243dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 313d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setInc(Reader.ReadSubExpr()); 314d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 315c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setForLoc(ReadSourceLocation(Record, Idx)); 316c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setLParenLoc(ReadSourceLocation(Record, Idx)); 317c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 3184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 32060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitGotoStmt(GotoStmt *S) { 3214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 322ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner S->setLabel(cast<LabelDecl>(Reader.GetDecl(Record[Idx++]))); 323c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setGotoLoc(ReadSourceLocation(Record, Idx)); 324c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setLabelLoc(ReadSourceLocation(Record, Idx)); 3254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 32760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitIndirectGotoStmt(IndirectGotoStmt *S) { 3284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 329c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setGotoLoc(ReadSourceLocation(Record, Idx)); 330c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setStarLoc(ReadSourceLocation(Record, Idx)); 331d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setTarget(Reader.ReadSubExpr()); 3324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 33460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitContinueStmt(ContinueStmt *S) { 3354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 336c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setContinueLoc(ReadSourceLocation(Record, Idx)); 3374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 33960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBreakStmt(BreakStmt *S) { 3404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 341c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setBreakLoc(ReadSourceLocation(Record, Idx)); 3424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 34460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitReturnStmt(ReturnStmt *S) { 3454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 346d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setRetValue(Reader.ReadSubExpr()); 347c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setReturnLoc(ReadSourceLocation(Record, Idx)); 3485077c3876beeaed32280af88244e8050078619a8Douglas Gregor S->setNRVOCandidate(cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 3494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 35160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDeclStmt(DeclStmt *S) { 3524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 353c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setStartLoc(ReadSourceLocation(Record, Idx)); 354c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setEndLoc(ReadSourceLocation(Record, Idx)); 3554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 3564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Idx + 1 == Record.size()) { 3574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Single declaration 3584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setDeclGroup(DeclGroupRef(Reader.GetDecl(Record[Idx++]))); 3594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } else { 3604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner llvm::SmallVector<Decl *, 16> Decls; 3614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Decls.reserve(Record.size() - Idx); 3624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned N = Record.size(); Idx != N; ++Idx) 3634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Decls.push_back(Reader.GetDecl(Record[Idx])); 364d1d64a027554b635d644957ef071ec04ea1f7063Chris Lattner S->setDeclGroup(DeclGroupRef(DeclGroup::Create(*Reader.getContext(), 36575fdb2377604e53678102076991bea345ace4692Douglas Gregor Decls.data(), 36675fdb2377604e53678102076991bea345ace4692Douglas Gregor Decls.size()))); 3674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 3684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 37060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitAsmStmt(AsmStmt *S) { 3714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 3724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumOutputs = Record[Idx++]; 3734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumInputs = Record[Idx++]; 3744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumClobbers = Record[Idx++]; 375c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAsmLoc(ReadSourceLocation(Record, Idx)); 376c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 3774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setVolatile(Record[Idx++]); 3784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setSimple(Record[Idx++]); 3793b11fd3b52e7b88233c602407c151d07cb093e75Mike Stump S->setMSAsm(Record[Idx++]); 3801eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 381d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setAsmString(cast_or_null<StringLiteral>(Reader.ReadSubStmt())); 3824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 3834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Outputs and inputs 384ff93dbd887e40588ed55d135037bb9287488b285Anders Carlsson llvm::SmallVector<IdentifierInfo *, 16> Names; 3854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner llvm::SmallVector<StringLiteral*, 16> Constraints; 3864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner llvm::SmallVector<Stmt*, 16> Exprs; 3874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = NumOutputs + NumInputs; I != N; ++I) { 388ff93dbd887e40588ed55d135037bb9287488b285Anders Carlsson Names.push_back(Reader.GetIdentifierInfo(Record, Idx)); 389d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Constraints.push_back(cast_or_null<StringLiteral>(Reader.ReadSubStmt())); 390d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Exprs.push_back(Reader.ReadSubStmt()); 3914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 3924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 3934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Constraints 3944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner llvm::SmallVector<StringLiteral*, 16> Clobbers; 3954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0; I != NumClobbers; ++I) 396d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Clobbers.push_back(cast_or_null<StringLiteral>(Reader.ReadSubStmt())); 397fdba9c069023f686e2608affde02c82131ee1cf8Anders Carlsson 398acb6bcb442936f3c14126fdd473307c17647cb84Anders Carlsson S->setOutputsAndInputsAndClobbers(*Reader.getContext(), 399acb6bcb442936f3c14126fdd473307c17647cb84Anders Carlsson Names.data(), Constraints.data(), 400fdba9c069023f686e2608affde02c82131ee1cf8Anders Carlsson Exprs.data(), NumOutputs, NumInputs, 401fdba9c069023f686e2608affde02c82131ee1cf8Anders Carlsson Clobbers.data(), NumClobbers); 4024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 40460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitExpr(Expr *E) { 4054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(E); 4064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setType(Reader.GetType(Record[Idx++])); 4074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setTypeDependent(Record[Idx++]); 4084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setValueDependent(Record[Idx++]); 409d0937224f383c7cc72c947119380f9713a070c73Douglas Gregor E->ExprBits.ContainsUnexpandedParameterPack = Record[Idx++]; 410f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall E->setValueKind(static_cast<ExprValueKind>(Record[Idx++])); 411f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall E->setObjectKind(static_cast<ExprObjectKind>(Record[Idx++])); 4124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(Idx == NumExprFields && "Incorrect expression field count"); 4134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 41560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitPredefinedExpr(PredefinedExpr *E) { 4164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 417c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 4184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setIdentType((PredefinedExpr::IdentType)Record[Idx++]); 4194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 42160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDeclRefExpr(DeclRefExpr *E) { 4224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 423663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 424663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis bool HasQualifier = Record[Idx++]; 425def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor bool HasExplicitTemplateArgs = Record[Idx++]; 426663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 427663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis E->DecoratedD.setInt((HasQualifier? DeclRefExpr::HasQualifierFlag : 0) | 428def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor (HasExplicitTemplateArgs 429def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ? DeclRefExpr::HasExplicitTemplateArgumentListFlag : 0)); 430663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 431663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis if (HasQualifier) { 432663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis E->getNameQualifier()->NNS = Reader.ReadNestedNameSpecifier(Record, Idx); 433c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->getNameQualifier()->Range = ReadSourceRange(Record, Idx); 434663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 435663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 436def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor if (HasExplicitTemplateArgs) { 437def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor unsigned NumTemplateArgs = Record[Idx++]; 438096832c5ed5b9106fa177ebc148489760c3bc496John McCall ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 439663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis NumTemplateArgs); 440def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor } 441663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 442dbd872f273a8dbf22e089b3def6c09f0a460965dJohn McCall E->setDecl(cast<ValueDecl>(Reader.GetDecl(Record[Idx++]))); 443c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 4444045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameLoc(E->DNLoc, E->getDecl()->getDeclName(), Record, Idx); 4454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 44760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitIntegerLiteral(IntegerLiteral *E) { 4484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 449c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 4509996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis E->setValue(*Reader.getContext(), Reader.ReadAPInt(Record, Idx)); 4514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 45360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitFloatingLiteral(FloatingLiteral *E) { 4544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 4559996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis E->setValue(*Reader.getContext(), Reader.ReadAPFloat(Record, Idx)); 4564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setExact(Record[Idx++]); 457c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 4584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 46060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitImaginaryLiteral(ImaginaryLiteral *E) { 4614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 462d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 4634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 46560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitStringLiteral(StringLiteral *E) { 4664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 4674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Len = Record[Idx++]; 4681eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump assert(Record[Idx] == E->getNumConcatenated() && 4694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner "Wrong number of concatenated tokens!"); 4704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner ++Idx; 4714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setWide(Record[Idx++]); 4724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 4731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // Read string data 474b648023da23e8b227cdda57a241db4c6f368726bDaniel Dunbar llvm::SmallString<16> Str(&Record[Idx], &Record[Idx] + Len); 475b648023da23e8b227cdda57a241db4c6f368726bDaniel Dunbar E->setString(*Reader.getContext(), Str.str()); 4764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Idx += Len; 4774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 4784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Read source locations 4794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = E->getNumConcatenated(); I != N; ++I) 480c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setStrTokenLoc(I, ReadSourceLocation(Record, Idx)); 4814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 48360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCharacterLiteral(CharacterLiteral *E) { 4844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 4854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setValue(Record[Idx++]); 486c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 4874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setWide(Record[Idx++]); 4884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 49060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitParenExpr(ParenExpr *E) { 4914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 492c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParen(ReadSourceLocation(Record, Idx)); 493c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParen(ReadSourceLocation(Record, Idx)); 494d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 4954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 49760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitParenListExpr(ParenListExpr *E) { 49837bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis VisitExpr(E); 49937bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis unsigned NumExprs = Record[Idx++]; 50037bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->Exprs = new (*Reader.getContext()) Stmt*[NumExprs]; 50137bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis for (unsigned i = 0; i != NumExprs; ++i) 50237bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->Exprs[i] = Reader.ReadSubStmt(); 50337bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->NumExprs = NumExprs; 504c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->LParenLoc = ReadSourceLocation(Record, Idx); 505c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->RParenLoc = ReadSourceLocation(Record, Idx); 50637bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis} 50737bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis 50860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnaryOperator(UnaryOperator *E) { 5094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 510d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 5114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setOpcode((UnaryOperator::Opcode)Record[Idx++]); 512c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 5134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 51560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitOffsetOfExpr(OffsetOfExpr *E) { 5168ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor typedef OffsetOfExpr::OffsetOfNode Node; 5178ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor VisitExpr(E); 5188ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor assert(E->getNumComponents() == Record[Idx]); 5198ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor ++Idx; 5208ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor assert(E->getNumExpressions() == Record[Idx]); 5218ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor ++Idx; 522c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 523c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 524c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeSourceInfo(GetTypeSourceInfo(Record, Idx)); 5258ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor for (unsigned I = 0, N = E->getNumComponents(); I != N; ++I) { 5268ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Node::Kind Kind = static_cast<Node::Kind>(Record[Idx++]); 527c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation Start = ReadSourceLocation(Record, Idx); 528c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation End = ReadSourceLocation(Record, Idx); 5298ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor switch (Kind) { 5308ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case Node::Array: 5318ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor E->setComponent(I, Node(Start, Record[Idx++], End)); 5328ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 5338ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 5348ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case Node::Field: 5358ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor E->setComponent(I, 5368ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Node(Start, 5378ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor dyn_cast_or_null<FieldDecl>(Reader.GetDecl(Record[Idx++])), 5388ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor End)); 5398ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 5408ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 5418ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case Node::Identifier: 5428ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor E->setComponent(I, Node(Start, Reader.GetIdentifier(Record[Idx++]), End)); 5438ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 544cc8a5d5f90bbbbcb46f342117b851b7e07ec34f1Douglas Gregor 545afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis case Node::Base: { 546afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis CXXBaseSpecifier *Base = new (*Reader.getContext()) CXXBaseSpecifier(); 547c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl *Base = Reader.ReadCXXBaseSpecifier(F, Record, Idx); 548afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis E->setComponent(I, Node(Base)); 549cc8a5d5f90bbbbcb46f342117b851b7e07ec34f1Douglas Gregor break; 5508ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor } 551afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis } 5528ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor } 5538ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 5548ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor for (unsigned I = 0, N = E->getNumExpressions(); I != N; ++I) 555d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setIndexExpr(I, Reader.ReadSubExpr()); 5568ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor} 5578ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 55860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E) { 5594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 5604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setSizeof(Record[Idx++]); 5614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Record[Idx] == 0) { 562d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArgument(Reader.ReadSubExpr()); 5634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner ++Idx; 5644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } else { 565c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setArgument(GetTypeSourceInfo(Record, Idx)); 5664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 567c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 568c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 5694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 57160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitArraySubscriptExpr(ArraySubscriptExpr *E) { 5724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 573d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 574d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 575c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRBracketLoc(ReadSourceLocation(Record, Idx)); 5764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 57860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCallExpr(CallExpr *E) { 5794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 580d1d64a027554b635d644957ef071ec04ea1f7063Chris Lattner E->setNumArgs(*Reader.getContext(), Record[Idx++]); 581c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 582d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setCallee(Reader.ReadSubExpr()); 5834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 584d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 5854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 58760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitMemberExpr(MemberExpr *E) { 588663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // Don't call VisitExpr, this is fully initialized at creation. 589663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis assert(E->getStmtClass() == Stmt::MemberExprClass && 590663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis "It's a subclass, we must advance Idx!"); 5914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 59360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCIsaExpr(ObjCIsaExpr *E) { 594f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff VisitExpr(E); 595d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 596c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setIsaMemberLoc(ReadSourceLocation(Record, Idx)); 597f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff E->setArrow(Record[Idx++]); 598f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff} 599f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff 60060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCastExpr(CastExpr *E) { 6014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 602f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall unsigned NumBaseSpecs = Record[Idx++]; 603f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall assert(NumBaseSpecs == E->path_size()); 604d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 605cdef2b75aa60cde1ca00e0aa3f89139ac89c6ae4Anders Carlsson E->setCastKind((CastExpr::CastKind)Record[Idx++]); 606f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall CastExpr::path_iterator BaseI = E->path_begin(); 6070745d0a648b75bd304045309276c70a755adaafbArgyrios Kyrtzidis while (NumBaseSpecs--) { 6080745d0a648b75bd304045309276c70a755adaafbArgyrios Kyrtzidis CXXBaseSpecifier *BaseSpec = new (*Reader.getContext()) CXXBaseSpecifier; 609c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl *BaseSpec = Reader.ReadCXXBaseSpecifier(F, Record, Idx); 610f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall *BaseI++ = BaseSpec; 6110745d0a648b75bd304045309276c70a755adaafbArgyrios Kyrtzidis } 6124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 61460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBinaryOperator(BinaryOperator *E) { 6154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 616d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 617d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 6184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setOpcode((BinaryOperator::Opcode)Record[Idx++]); 619c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 6204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 62260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCompoundAssignOperator(CompoundAssignOperator *E) { 6234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitBinaryOperator(E); 6244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setComputationLHSType(Reader.GetType(Record[Idx++])); 6254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setComputationResultType(Reader.GetType(Record[Idx++])); 6264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 62860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitConditionalOperator(ConditionalOperator *E) { 6294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 63056ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[ConditionalOperator::COND] = Reader.ReadSubExpr(); 63156ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[ConditionalOperator::LHS] = Reader.ReadSubExpr(); 63256ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[ConditionalOperator::RHS] = Reader.ReadSubExpr(); 63356ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->QuestionLoc = ReadSourceLocation(Record, Idx); 63456ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->ColonLoc = ReadSourceLocation(Record, Idx); 63556ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall} 63656ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 63756ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCallvoid 63856ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCallASTStmtReader::VisitBinaryConditionalOperator(BinaryConditionalOperator *E) { 63956ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall VisitExpr(E); 64056ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->OpaqueValue = cast<OpaqueValueExpr>(Reader.ReadSubExpr()); 64156ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[BinaryConditionalOperator::COMMON] = Reader.ReadSubExpr(); 64256ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[BinaryConditionalOperator::COND] = Reader.ReadSubExpr(); 64356ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[BinaryConditionalOperator::LHS] = Reader.ReadSubExpr(); 64456ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[BinaryConditionalOperator::RHS] = Reader.ReadSubExpr(); 64556ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->QuestionLoc = ReadSourceLocation(Record, Idx); 64656ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->ColonLoc = ReadSourceLocation(Record, Idx); 64756ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 64856ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->getOpaqueValue()->setSourceExpr(E->getCommon()); 6494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 65160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitImplicitCastExpr(ImplicitCastExpr *E) { 6524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitCastExpr(E); 6534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 65560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitExplicitCastExpr(ExplicitCastExpr *E) { 6564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitCastExpr(E); 657c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeInfoAsWritten(GetTypeSourceInfo(Record, Idx)); 6584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 66060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCStyleCastExpr(CStyleCastExpr *E) { 6614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExplicitCastExpr(E); 662c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 663c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 6644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 66660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) { 6674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 668c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 669c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeSourceInfo(GetTypeSourceInfo(Record, Idx)); 670d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setInitializer(Reader.ReadSubExpr()); 6714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setFileScope(Record[Idx++]); 6724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 67460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitExtVectorElementExpr(ExtVectorElementExpr *E) { 6754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 676d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 6774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setAccessor(Reader.GetIdentifierInfo(Record, Idx)); 678c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAccessorLoc(ReadSourceLocation(Record, Idx)); 6794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 68160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitInitListExpr(InitListExpr *E) { 6824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 6834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumInits = Record[Idx++]; 684709210feee317b8d6690dd1d15c2b74cfe55e261Ted Kremenek E->reserveInits(*Reader.getContext(), NumInits); 6854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0; I != NumInits; ++I) 686d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->updateInit(*Reader.getContext(), I, Reader.ReadSubExpr()); 687d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSyntacticForm(cast_or_null<InitListExpr>(Reader.ReadSubStmt())); 688c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLBraceLoc(ReadSourceLocation(Record, Idx)); 689c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRBraceLoc(ReadSourceLocation(Record, Idx)); 6904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setInitializedFieldInUnion( 6914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner cast_or_null<FieldDecl>(Reader.GetDecl(Record[Idx++]))); 6924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->sawArrayRangeDesignator(Record[Idx++]); 6934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 69560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDesignatedInitExpr(DesignatedInitExpr *E) { 6964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner typedef DesignatedInitExpr::Designator Designator; 6974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 6994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumSubExprs = Record[Idx++]; 7004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(NumSubExprs == E->getNumSubExprs() && "Wrong number of subexprs"); 7014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0; I != NumSubExprs; ++I) 702d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(I, Reader.ReadSubExpr()); 703c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setEqualOrColonLoc(ReadSourceLocation(Record, Idx)); 7044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setGNUSyntax(Record[Idx++]); 7054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 7064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner llvm::SmallVector<Designator, 4> Designators; 7074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner while (Idx < Record.size()) { 7088538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl switch ((DesignatorTypes)Record[Idx++]) { 7098538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_FIELD_DECL: { 7104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner FieldDecl *Field = cast<FieldDecl>(Reader.GetDecl(Record[Idx++])); 7111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation DotLoc 712c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7131eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation FieldLoc 714c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump Designators.push_back(Designator(Field->getIdentifier(), DotLoc, 7164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner FieldLoc)); 7174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.back().setField(Field); 7184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 7194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 7204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 7218538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_FIELD_NAME: { 7224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner const IdentifierInfo *Name = Reader.GetIdentifierInfo(Record, Idx); 7231eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation DotLoc 724c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7251eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation FieldLoc 726c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.push_back(Designator(Name, DotLoc, FieldLoc)); 7284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 7294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 7301eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 7318538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_ARRAY: { 7324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Index = Record[Idx++]; 7334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation LBracketLoc 734c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation RBracketLoc 736c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.push_back(Designator(Index, LBracketLoc, RBracketLoc)); 7384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 7394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 7404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 7418538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_ARRAY_RANGE: { 7424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Index = Record[Idx++]; 7434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation LBracketLoc 744c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation EllipsisLoc 746c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation RBracketLoc 748c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.push_back(Designator(Index, LBracketLoc, EllipsisLoc, 7504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner RBracketLoc)); 7514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 7524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 7534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 7544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 755319d57f21600dd2c4d52ccc27bd12ce260b174e7Douglas Gregor E->setDesignators(*Reader.getContext(), 756319d57f21600dd2c4d52ccc27bd12ce260b174e7Douglas Gregor Designators.data(), Designators.size()); 7574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 75960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitImplicitValueInitExpr(ImplicitValueInitExpr *E) { 7604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 7614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 76360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitVAArgExpr(VAArgExpr *E) { 7644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 765d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 766c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setWrittenTypeInfo(GetTypeSourceInfo(Record, Idx)); 767c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setBuiltinLoc(ReadSourceLocation(Record, Idx)); 768c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 7694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 77160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitAddrLabelExpr(AddrLabelExpr *E) { 7724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 773c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAmpAmpLoc(ReadSourceLocation(Record, Idx)); 774c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLabelLoc(ReadSourceLocation(Record, Idx)); 775ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner E->setLabel(cast<LabelDecl>(Reader.GetDecl(Record[Idx++]))); 7764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 77860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitStmtExpr(StmtExpr *E) { 7794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 780c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 781c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 782d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubStmt(cast_or_null<CompoundStmt>(Reader.ReadSubStmt())); 7834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 78560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitChooseExpr(ChooseExpr *E) { 7864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 787d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setCond(Reader.ReadSubExpr()); 788d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 789d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 790c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setBuiltinLoc(ReadSourceLocation(Record, Idx)); 791c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 7924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 79460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitGNUNullExpr(GNUNullExpr *E) { 7954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 796c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTokenLocation(ReadSourceLocation(Record, Idx)); 7974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 79960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitShuffleVectorExpr(ShuffleVectorExpr *E) { 8004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 801919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis llvm::SmallVector<Expr *, 16> Exprs; 8024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumExprs = Record[Idx++]; 803919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis while (NumExprs--) 804d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Exprs.push_back(Reader.ReadSubExpr()); 805919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis E->setExprs(*Reader.getContext(), Exprs.data(), Exprs.size()); 806c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setBuiltinLoc(ReadSourceLocation(Record, Idx)); 807c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 8084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 81060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBlockExpr(BlockExpr *E) { 8114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 8124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setBlockDecl(cast_or_null<BlockDecl>(Reader.GetDecl(Record[Idx++]))); 8134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 81560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBlockDeclRefExpr(BlockDeclRefExpr *E) { 8164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 8176b5a61b6dc400027fd793dcadceeb9da944a37eaJohn McCall E->setDecl(cast<VarDecl>(Reader.GetDecl(Record[Idx++]))); 818c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 8194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setByRef(Record[Idx++]); 8209b0b57c6f9996bfdb67248f6942dd23acfa36167Fariborz Jahanian E->setConstQualAdded(Record[Idx++]); 8214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 8234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner//===----------------------------------------------------------------------===// 8244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// Objective-C Expressions and Statements 8254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 82660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCStringLiteral(ObjCStringLiteral *E) { 8274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 828d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setString(cast<StringLiteral>(Reader.ReadSubStmt())); 829c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 8304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 83260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCEncodeExpr(ObjCEncodeExpr *E) { 8334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 834c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setEncodedTypeSourceInfo(GetTypeSourceInfo(Record, Idx)); 835c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 836c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 8374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 83960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCSelectorExpr(ObjCSelectorExpr *E) { 8404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 8414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setSelector(Reader.GetSelector(Record, Idx)); 842c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 843c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 8444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 84660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCProtocolExpr(ObjCProtocolExpr *E) { 8474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 8484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setProtocol(cast<ObjCProtocolDecl>(Reader.GetDecl(Record[Idx++]))); 849c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 850c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 8514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 85360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) { 8544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 8554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setDecl(cast<ObjCIvarDecl>(Reader.GetDecl(Record[Idx++]))); 856c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 857d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 8584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setIsArrow(Record[Idx++]); 8594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setIsFreeIvar(Record[Idx++]); 8604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 86260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) { 8634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 86412f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall bool Implicit = Record[Idx++] != 0; 86512f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall if (Implicit) { 86612f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall ObjCMethodDecl *Getter = 86712f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall cast<ObjCMethodDecl>(Reader.GetDecl(Record[Idx++])); 86812f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall ObjCMethodDecl *Setter = 86912f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall cast<ObjCMethodDecl>(Reader.GetDecl(Record[Idx++])); 87012f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setImplicitProperty(Getter, Setter); 87112f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall } else { 87212f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setExplicitProperty( 87312f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall cast<ObjCPropertyDecl>(Reader.GetDecl(Record[Idx++]))); 8748ac2d449820fd0df00fcbde5bf82165c1f49854dFariborz Jahanian } 875c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 87612f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setReceiverLocation(ReadSourceLocation(Record, Idx)); 87712f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall switch (Record[Idx++]) { 87812f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall case 0: 87912f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setBase(Reader.ReadSubExpr()); 88012f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall break; 88112f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall case 1: 88212f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setSuperReceiver(Reader.GetType(Record[Idx++])); 88312f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall break; 88412f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall case 2: 88512f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setClassReceiver( 88612f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall cast<ObjCInterfaceDecl>(Reader.GetDecl(Record[Idx++]))); 88712f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall break; 88812f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall } 8894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 89160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCMessageExpr(ObjCMessageExpr *E) { 8924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 89304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor assert(Record[Idx] == E->getNumArgs()); 89404badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor ++Idx; 89504badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor ObjCMessageExpr::ReceiverKind Kind 89604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor = static_cast<ObjCMessageExpr::ReceiverKind>(Record[Idx++]); 89704badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor switch (Kind) { 89804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::Instance: 899d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setInstanceReceiver(Reader.ReadSubExpr()); 90004badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 90104badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 90204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::Class: 903c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setClassReceiver(GetTypeSourceInfo(Record, Idx)); 90404badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 90504badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 90604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::SuperClass: 90704badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::SuperInstance: { 90804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor QualType T = Reader.GetType(Record[Idx++]); 909c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation SuperLoc = ReadSourceLocation(Record, Idx); 91004badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor E->setSuper(SuperLoc, T, Kind == ObjCMessageExpr::SuperInstance); 91104badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 91204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor } 9134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 9144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 91504badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor assert(Kind == E->getReceiverKind()); 91604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 91704badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor if (Record[Idx++]) 91804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor E->setMethodDecl(cast_or_null<ObjCMethodDecl>(Reader.GetDecl(Record[Idx++]))); 91904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor else 92004badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor E->setSelector(Reader.GetSelector(Record, Idx)); 92104badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 922f40f0d5a382395e0301d7dcbeaa2b8e90b8973b1Argyrios Kyrtzidis E->LBracLoc = ReadSourceLocation(Record, Idx); 923f40f0d5a382395e0301d7dcbeaa2b8e90b8973b1Argyrios Kyrtzidis E->RBracLoc = ReadSourceLocation(Record, Idx); 924f40f0d5a382395e0301d7dcbeaa2b8e90b8973b1Argyrios Kyrtzidis E->SelectorLoc = ReadSourceLocation(Record, Idx); 92504badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 9264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 927d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 9284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 93060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCForCollectionStmt(ObjCForCollectionStmt *S) { 9314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 932d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setElement(Reader.ReadSubStmt()); 933d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCollection(Reader.ReadSubExpr()); 934d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 935c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setForLoc(ReadSourceLocation(Record, Idx)); 936c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 9374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 93960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtCatchStmt(ObjCAtCatchStmt *S) { 9404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 941d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCatchBody(Reader.ReadSubStmt()); 942c00d8e18ad3d903acfeb5d05163ce90713066a3fDouglas Gregor S->setCatchParamDecl(cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 943c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtCatchLoc(ReadSourceLocation(Record, Idx)); 944c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 9454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 94760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *S) { 9484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 949d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setFinallyBody(Reader.ReadSubStmt()); 950c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtFinallyLoc(ReadSourceLocation(Record, Idx)); 9514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 95360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtTryStmt(ObjCAtTryStmt *S) { 9544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 9558f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor assert(Record[Idx] == S->getNumCatchStmts()); 9568f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor ++Idx; 9578f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor bool HasFinally = Record[Idx++]; 958d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setTryBody(Reader.ReadSubStmt()); 959919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis for (unsigned I = 0, N = S->getNumCatchStmts(); I != N; ++I) 960d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCatchStmt(I, cast_or_null<ObjCAtCatchStmt>(Reader.ReadSubStmt())); 9618f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor 9628f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor if (HasFinally) 963d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setFinallyStmt(Reader.ReadSubStmt()); 964c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtTryLoc(ReadSourceLocation(Record, Idx)); 9654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 96760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *S) { 9684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 969d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSynchExpr(Reader.ReadSubStmt()); 970d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSynchBody(Reader.ReadSubStmt()); 971c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtSynchronizedLoc(ReadSourceLocation(Record, Idx)); 9724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 97460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtThrowStmt(ObjCAtThrowStmt *S) { 9754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 976d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setThrowExpr(Reader.ReadSubStmt()); 977c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setThrowLoc(ReadSourceLocation(Record, Idx)); 9784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 980ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 981ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis// C++ Expressions and Statements 9827cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 9837cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 98460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXCatchStmt(CXXCatchStmt *S) { 9857cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis VisitStmt(S); 986c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->CatchLoc = ReadSourceLocation(Record, Idx); 9877cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->ExceptionDecl = cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++])); 9887cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->HandlerBlock = Reader.ReadSubStmt(); 9897cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis} 9907cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 99160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXTryStmt(CXXTryStmt *S) { 9927cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis VisitStmt(S); 9937cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis assert(Record[Idx] == S->getNumHandlers() && "NumStmtFields is wrong ?"); 9947cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis ++Idx; 995c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->TryLoc = ReadSourceLocation(Record, Idx); 9967cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->getStmts()[0] = Reader.ReadSubStmt(); 9977cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis for (unsigned i = 0, e = S->getNumHandlers(); i != e; ++i) 9987cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->getStmts()[i + 1] = Reader.ReadSubStmt(); 9997cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis} 1000ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis 100160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) { 1002919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitCallExpr(E); 1003ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis E->setOperator((OverloadedOperatorKind)Record[Idx++]); 1004ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis} 1005ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis 100660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXConstructExpr(CXXConstructExpr *E) { 100739da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor VisitExpr(E); 10086d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->NumArgs = Record[Idx++]; 10096d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis if (E->NumArgs) 10106d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->Args = new (*Reader.getContext()) Stmt*[E->NumArgs]; 10115e1b7c2f419544a88537f7ff4e32ed744ba7b44eArgyrios Kyrtzidis for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 1012d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 101339da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor E->setConstructor(cast<CXXConstructorDecl>(Reader.GetDecl(Record[Idx++]))); 1014c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 101539da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor E->setElidable(Record[Idx++]); 101616006c901315fa12a108b4e571f187f4b676e426Douglas Gregor E->setRequiresZeroInitialization(Record[Idx++]); 10173c9034cb7ff1d6c1e4ecd1b44c98f553df013c7cDouglas Gregor E->setConstructionKind((CXXConstructExpr::ConstructionKind)Record[Idx++]); 1018428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->ParenRange = ReadSourceRange(Record, Idx); 101939da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor} 10204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 102160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E) { 10226d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis VisitCXXConstructExpr(E); 1023c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Type = GetTypeSourceInfo(Record, Idx); 10246d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis} 10256d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 102660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXNamedCastExpr(CXXNamedCastExpr *E) { 1027919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitExplicitCastExpr(E); 10281d5d0b9df6d2a3df338bc3e63000536406e7666cDouglas Gregor SourceRange R = ReadSourceRange(Record, Idx); 10291d5d0b9df6d2a3df338bc3e63000536406e7666cDouglas Gregor E->Loc = R.getBegin(); 10301d5d0b9df6d2a3df338bc3e63000536406e7666cDouglas Gregor E->RParenLoc = R.getEnd(); 1031ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1032ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 103360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXStaticCastExpr(CXXStaticCastExpr *E) { 1034ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1035ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1036ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 103760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXDynamicCastExpr(CXXDynamicCastExpr *E) { 1038ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1039ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1040ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 104160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXReinterpretCastExpr(CXXReinterpretCastExpr *E) { 1042ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1043ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1044ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 104560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXConstCastExpr(CXXConstCastExpr *E) { 1046ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1047ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1048ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 104960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *E) { 1050919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitExplicitCastExpr(E); 1051c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeBeginLoc(ReadSourceLocation(Record, Idx)); 1052c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 1053ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1054ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 105560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E) { 1056eb7f96141f754150a92433286fa385910a22f494Sam Weinig VisitExpr(E); 1057eb7f96141f754150a92433286fa385910a22f494Sam Weinig E->setValue(Record[Idx++]); 1058c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 1059eb7f96141f754150a92433286fa385910a22f494Sam Weinig} 1060eb7f96141f754150a92433286fa385910a22f494Sam Weinig 106160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E) { 1062eb7f96141f754150a92433286fa385910a22f494Sam Weinig VisitExpr(E); 1063c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 1064eb7f96141f754150a92433286fa385910a22f494Sam Weinig} 1065eb7f96141f754150a92433286fa385910a22f494Sam Weinig 106660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXTypeidExpr(CXXTypeidExpr *E) { 106714ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner VisitExpr(E); 1068c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setSourceRange(ReadSourceRange(Record, Idx)); 106914ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner if (E->isTypeOperand()) { // typeid(int) 1070577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl E->setTypeOperandSourceInfo( 1071c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl GetTypeSourceInfo(Record, Idx)); 1072919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis return; 107314ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner } 107414ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 107514ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner // typeid(42+2) 1076d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setExprOperand(Reader.ReadSubExpr()); 107714ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner} 107801b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichetvoid ASTStmtReader::VisitCXXUuidofExpr(CXXUuidofExpr *E) { 107901b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet VisitExpr(E); 1080c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setSourceRange(ReadSourceRange(Record, Idx)); 108101b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet if (E->isTypeOperand()) { // __uuidof(ComType) 108201b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet E->setTypeOperandSourceInfo( 1083c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl GetTypeSourceInfo(Record, Idx)); 108401b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet return; 108501b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet } 108601b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet 108701b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet // __uuidof(expr) 108801b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet E->setExprOperand(Reader.ReadSubExpr()); 108901b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet} 109014ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 109160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXThisExpr(CXXThisExpr *E) { 10922fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner VisitExpr(E); 1093c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 10942fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner E->setImplicit(Record[Idx++]); 10952fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner} 10962fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner 109760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXThrowExpr(CXXThrowExpr *E) { 10982fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner VisitExpr(E); 1099c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setThrowLoc(ReadSourceLocation(Record, Idx)); 1100d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 11012fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner} 110214ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 110360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) { 1104030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner VisitExpr(E); 11058a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis 11068a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis assert(Record[Idx] == E->Param.getInt() && "We messed up at creation ?"); 11078a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis ++Idx; // HasOtherExprStored and SubExpr was handled during creation. 11088a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis E->Param.setPointer(cast<ParmVarDecl>(Reader.GetDecl(Record[Idx++]))); 1109c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Loc = ReadSourceLocation(Record, Idx); 1110d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner} 1111d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 111260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E) { 1113d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner VisitExpr(E); 1114d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner E->setTemporary(Reader.ReadCXXTemporary(Record, Idx)); 1115d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 1116d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner} 1117d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 111860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E) { 11195921863d8f24084797863b5df37842113bac4352Chris Lattner VisitExpr(E); 1120c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->TypeInfo = GetTypeSourceInfo(Record, Idx); 1121c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->RParenLoc = ReadSourceLocation(Record, Idx); 11225921863d8f24084797863b5df37842113bac4352Chris Lattner} 11235921863d8f24084797863b5df37842113bac4352Chris Lattner 112460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXNewExpr(CXXNewExpr *E) { 11255921863d8f24084797863b5df37842113bac4352Chris Lattner VisitExpr(E); 11266ec278d1a354517e20f13a877481453ee7940c78John McCall E->GlobalNew = Record[Idx++]; 11276ec278d1a354517e20f13a877481453ee7940c78John McCall E->Initializer = Record[Idx++]; 11286ec278d1a354517e20f13a877481453ee7940c78John McCall E->UsualArrayDeleteWantsSize = Record[Idx++]; 11295921863d8f24084797863b5df37842113bac4352Chris Lattner bool isArray = Record[Idx++]; 11305921863d8f24084797863b5df37842113bac4352Chris Lattner unsigned NumPlacementArgs = Record[Idx++]; 11315921863d8f24084797863b5df37842113bac4352Chris Lattner unsigned NumCtorArgs = Record[Idx++]; 11325921863d8f24084797863b5df37842113bac4352Chris Lattner E->setOperatorNew(cast_or_null<FunctionDecl>(Reader.GetDecl(Record[Idx++]))); 11335921863d8f24084797863b5df37842113bac4352Chris Lattner E->setOperatorDelete( 11345921863d8f24084797863b5df37842113bac4352Chris Lattner cast_or_null<FunctionDecl>(Reader.GetDecl(Record[Idx++]))); 11355921863d8f24084797863b5df37842113bac4352Chris Lattner E->setConstructor( 11365921863d8f24084797863b5df37842113bac4352Chris Lattner cast_or_null<CXXConstructorDecl>(Reader.GetDecl(Record[Idx++]))); 1137c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->AllocatedTypeInfo = GetTypeSourceInfo(Record, Idx); 11384bd40318cbea15310a37343db46de96c4fcc15e6Douglas Gregor SourceRange TypeIdParens; 1139c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl TypeIdParens.setBegin(ReadSourceLocation(Record, Idx)); 1140c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl TypeIdParens.setEnd(ReadSourceLocation(Record, Idx)); 11414bd40318cbea15310a37343db46de96c4fcc15e6Douglas Gregor E->TypeIdParens = TypeIdParens; 1142428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->StartLoc = ReadSourceLocation(Record, Idx); 1143428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->EndLoc = ReadSourceLocation(Record, Idx); 1144428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->ConstructorLParen = ReadSourceLocation(Record, Idx); 1145428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->ConstructorRParen = ReadSourceLocation(Record, Idx); 1146428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth 11475921863d8f24084797863b5df37842113bac4352Chris Lattner E->AllocateArgsArray(*Reader.getContext(), isArray, NumPlacementArgs, 11485921863d8f24084797863b5df37842113bac4352Chris Lattner NumCtorArgs); 11495921863d8f24084797863b5df37842113bac4352Chris Lattner 11505921863d8f24084797863b5df37842113bac4352Chris Lattner // Install all the subexpressions. 11515921863d8f24084797863b5df37842113bac4352Chris Lattner for (CXXNewExpr::raw_arg_iterator I = E->raw_arg_begin(),e = E->raw_arg_end(); 11525921863d8f24084797863b5df37842113bac4352Chris Lattner I != e; ++I) 1153d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis *I = Reader.ReadSubStmt(); 11545921863d8f24084797863b5df37842113bac4352Chris Lattner} 11555921863d8f24084797863b5df37842113bac4352Chris Lattner 115660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXDeleteExpr(CXXDeleteExpr *E) { 115795fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis VisitExpr(E); 1158f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->GlobalDelete = Record[Idx++]; 1159f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->ArrayForm = Record[Idx++]; 11604076dacf1497fb95cb298b9d964fbdbdaf9bde6cArgyrios Kyrtzidis E->ArrayFormAsWritten = Record[Idx++]; 11616ec278d1a354517e20f13a877481453ee7940c78John McCall E->UsualArrayDeleteWantsSize = Record[Idx++]; 1162f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->OperatorDelete = cast_or_null<FunctionDecl>(Reader.GetDecl(Record[Idx++])); 1163f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->Argument = Reader.ReadSubExpr(); 1164c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Loc = ReadSourceLocation(Record, Idx); 116595fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis} 1166d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 116760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E) { 1168de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis VisitExpr(E); 1169de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 1170f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->Base = Reader.ReadSubExpr(); 1171f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->IsArrow = Record[Idx++]; 1172f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->OperatorLoc = ReadSourceLocation(Record, Idx); 1173f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx); 1174f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->ScopeType = GetTypeSourceInfo(Record, Idx); 1175f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->ColonColonLoc = ReadSourceLocation(Record, Idx); 1176f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->TildeLoc = ReadSourceLocation(Record, Idx); 1177de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 1178de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis IdentifierInfo *II = Reader.GetIdentifierInfo(Record, Idx); 1179de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis if (II) 1180c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setDestroyedType(II, ReadSourceLocation(Record, Idx)); 1181de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis else 1182c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setDestroyedType(GetTypeSourceInfo(Record, Idx)); 1183de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis} 1184de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 11854765fa05b5652fcc4356371c2f481d0ea9a1b007John McCallvoid ASTStmtReader::VisitExprWithCleanups(ExprWithCleanups *E) { 1186d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner VisitExpr(E); 1187d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner unsigned NumTemps = Record[Idx++]; 1188d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner if (NumTemps) { 1189d04ed416be7c55bddddab1fa3fd38a0113a6b3daTed Kremenek E->setNumTemporaries(*Reader.getContext(), NumTemps); 1190d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner for (unsigned i = 0; i != NumTemps; ++i) 1191d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner E->setTemporary(i, Reader.ReadCXXTemporary(Record, Idx)); 1192d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner } 1193d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 1194030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner} 1195030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner 1196919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisvoid 119760adf4acf40b72227740bf966fb87eebddff3f37Sebastian RedlASTStmtReader::VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E){ 11988dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis VisitExpr(E); 11998dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 1200def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor if (Record[Idx++]) 1201096832c5ed5b9106fa177ebc148489760c3bc496John McCall ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 1202def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor Record[Idx++]); 12038dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 1204d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 12058dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setBaseType(Reader.GetType(Record[Idx++])); 12068dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setArrow(Record[Idx++]); 1207c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 12088dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setQualifier(Reader.ReadNestedNameSpecifier(Record, Idx)); 1209c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setQualifierRange(ReadSourceRange(Record, Idx)); 12108dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setFirstQualifierFoundInScope( 12118dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis cast_or_null<NamedDecl>(Reader.GetDecl(Record[Idx++]))); 12124045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameInfo(E->MemberNameInfo, Record, Idx); 12138dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis} 12148dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 1215919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisvoid 121660adf4acf40b72227740bf966fb87eebddff3f37Sebastian RedlASTStmtReader::VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) { 121712dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis VisitExpr(E); 121812dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 1219def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor if (Record[Idx++]) 1220def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 1221def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor Record[Idx++]); 1222def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor 12234045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameInfo(E->NameInfo, Record, Idx); 1224c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setQualifierRange(ReadSourceRange(Record, Idx)); 122512dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis E->setQualifier(Reader.ReadNestedNameSpecifier(Record, Idx)); 122612dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis} 122712dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 1228919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisvoid 122960adf4acf40b72227740bf966fb87eebddff3f37Sebastian RedlASTStmtReader::VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E) { 12308dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis VisitExpr(E); 12318dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis assert(Record[Idx] == E->arg_size() && "Read wrong record during creation ?"); 12328dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis ++Idx; // NumArgs; 12338dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis for (unsigned I = 0, N = E->arg_size(); I != N; ++I) 1234d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 1235c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Type = GetTypeSourceInfo(Record, Idx); 1236c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 1237c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 12388dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis} 12398dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 124060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitOverloadExpr(OverloadExpr *E) { 1241a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis VisitExpr(E); 1242a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 1243def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor // Read the explicit template argument list, if available. 1244def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor if (Record[Idx++]) 1245919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 1246def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor Record[Idx++]); 1247a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 1248a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis unsigned NumDecls = Record[Idx++]; 1249a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis UnresolvedSet<8> Decls; 1250a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis for (unsigned i = 0; i != NumDecls; ++i) { 1251a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis NamedDecl *D = cast<NamedDecl>(Reader.GetDecl(Record[Idx++])); 1252a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis AccessSpecifier AS = (AccessSpecifier)Record[Idx++]; 1253a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis Decls.addDecl(D, AS); 1254a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis } 1255a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->initializeResults(*Reader.getContext(), Decls.begin(), Decls.end()); 1256a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 12574045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameInfo(E->NameInfo, Record, Idx); 1258a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setQualifier(Reader.ReadNestedNameSpecifier(Record, Idx)); 1259c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setQualifierRange(ReadSourceRange(Record, Idx)); 1260a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis} 1261a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 126260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnresolvedMemberExpr(UnresolvedMemberExpr *E) { 1263919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitOverloadExpr(E); 1264a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setArrow(Record[Idx++]); 1265a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setHasUnresolvedUsing(Record[Idx++]); 1266d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 1267a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setBaseType(Reader.GetType(Record[Idx++])); 1268c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 1269a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis} 1270a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 127160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E) { 1272919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitOverloadExpr(E); 1273bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis E->setRequiresADL(Record[Idx++]); 1274bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis E->setOverloaded(Record[Idx++]); 1275bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis E->setNamingClass(cast_or_null<CXXRecordDecl>(Reader.GetDecl(Record[Idx++]))); 1276bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis} 1277bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis 127860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnaryTypeTraitExpr(UnaryTypeTraitExpr *E) { 12796d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis VisitExpr(E); 12806d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->UTT = (UnaryTypeTrait)Record[Idx++]; 12810dfd848fa4c9664852ba8c929a8bd3fce93ddca2Sebastian Redl E->Value = (bool)Record[Idx++]; 1282c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceRange Range = ReadSourceRange(Record, Idx); 12836d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->Loc = Range.getBegin(); 12846d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->RParen = Range.getEnd(); 1285c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->QueriedType = GetTypeSourceInfo(Record, Idx); 12866d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis} 12876d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 12886ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichetvoid ASTStmtReader::VisitBinaryTypeTraitExpr(BinaryTypeTraitExpr *E) { 12896ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet VisitExpr(E); 12906ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->BTT = (BinaryTypeTrait)Record[Idx++]; 12916ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->Value = (bool)Record[Idx++]; 12926ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet SourceRange Range = ReadSourceRange(Record, Idx); 12936ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->Loc = Range.getBegin(); 12946ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->RParen = Range.getEnd(); 12956ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->LhsType = GetTypeSourceInfo(Record, Idx); 12966ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->RhsType = GetTypeSourceInfo(Record, Idx); 12976ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet} 12986ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet 12996b219d082434394c1ac401390ec1d1967727815aSebastian Redlvoid ASTStmtReader::VisitCXXNoexceptExpr(CXXNoexceptExpr *E) { 13006b219d082434394c1ac401390ec1d1967727815aSebastian Redl VisitExpr(E); 13015221d8f2da008689f7ff9476e6522bb2b63ec1a3Sebastian Redl E->Value = (bool)Record[Idx++]; 1302c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Range = ReadSourceRange(Record, Idx); 13035221d8f2da008689f7ff9476e6522bb2b63ec1a3Sebastian Redl E->Operand = Reader.ReadSubExpr(); 13046b219d082434394c1ac401390ec1d1967727815aSebastian Redl} 13056b219d082434394c1ac401390ec1d1967727815aSebastian Redl 1306be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregorvoid ASTStmtReader::VisitPackExpansionExpr(PackExpansionExpr *E) { 1307be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor VisitExpr(E); 1308be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor E->EllipsisLoc = ReadSourceLocation(Record, Idx); 130967fd1251aad51bb80d050b7fa5e506fef0ec8e02Douglas Gregor E->NumExpansions = Record[Idx++]; 1310be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor E->Pattern = Reader.ReadSubExpr(); 1311be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor} 1312be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor 1313ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregorvoid ASTStmtReader::VisitSizeOfPackExpr(SizeOfPackExpr *E) { 1314ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor VisitExpr(E); 1315ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor E->OperatorLoc = ReadSourceLocation(Record, Idx); 1316ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor E->PackLoc = ReadSourceLocation(Record, Idx); 1317ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor E->RParenLoc = ReadSourceLocation(Record, Idx); 1318ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor E->Length = Record[Idx++]; 1319ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor E->Pack = cast_or_null<NamedDecl>(Reader.GetDecl(Record[Idx++])); 1320ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor} 1321ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor 1322c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregorvoid ASTStmtReader::VisitSubstNonTypeTemplateParmPackExpr( 1323c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor SubstNonTypeTemplateParmPackExpr *E) { 1324c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor VisitExpr(E); 1325c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor E->Param 1326c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor = cast_or_null<NonTypeTemplateParmDecl>(Reader.GetDecl(Record[Idx++])); 1327c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor TemplateArgument ArgPack = Reader.ReadTemplateArgument(F, Record, Idx); 1328c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor if (ArgPack.getKind() != TemplateArgument::Pack) 1329c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor return; 1330c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor 1331c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor E->Arguments = ArgPack.pack_begin(); 1332c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor E->NumArguments = ArgPack.pack_size(); 1333c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor E->NameLoc = ReadSourceLocation(Record, Idx); 1334c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor} 1335c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor 13367cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCallvoid ASTStmtReader::VisitOpaqueValueExpr(OpaqueValueExpr *E) { 13377cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall VisitExpr(E); 133856ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall Idx++; // skip ID 1339b608b987718c6d841115464f79ab2d1820a63e17Douglas Gregor E->Loc = ReadSourceLocation(Record, Idx); 13407cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall} 13417cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall 1342e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne//===----------------------------------------------------------------------===// 1343e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne// CUDA Expressions and Statements 1344e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne//===----------------------------------------------------------------------===// 1345e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne 1346e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbournevoid ASTStmtReader::VisitCUDAKernelCallExpr(CUDAKernelCallExpr *E) { 1347e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne VisitCallExpr(E); 1348e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne E->setConfig(cast<CallExpr>(Reader.ReadSubExpr())); 1349e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne} 1350e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne 1351c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian RedlStmt *ASTReader::ReadStmt(PerFileData &F) { 1352919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis switch (ReadingKind) { 1353919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis case Read_Decl: 1354919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis case Read_Type: 1355c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return ReadStmtFromStream(F); 1356919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis case Read_Stmt: 1357d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis return ReadSubStmt(); 1358919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis } 1359919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1360919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis llvm_unreachable("ReadingKind not set ?"); 1361919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis return 0; 1362919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis} 1363919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1364c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian RedlExpr *ASTReader::ReadExpr(PerFileData &F) { 1365c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return cast_or_null<Expr>(ReadStmt(F)); 1366919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis} 1367030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner 1368c43b54cbc10654ed59de797898042e1a05265246Sebastian RedlExpr *ASTReader::ReadSubExpr() { 1369d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis return cast_or_null<Expr>(ReadSubStmt()); 1370d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis} 1371d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis 137252e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// Within the bitstream, expressions are stored in Reverse Polish 137352e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// Notation, with each of the subexpressions preceding the 1374919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis// expression they are stored in. Subexpressions are stored from last to first. 1375919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis// To evaluate expressions, we continue reading expressions and placing them on 1376919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis// the stack, with expressions having operands removing those operands from the 137752e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// stack. Evaluation terminates when we see a STMT_STOP record, and 137852e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// the single remaining expression on the stack is our result. 1379c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian RedlStmt *ASTReader::ReadStmtFromStream(PerFileData &F) { 1380919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1381919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis ReadingKindTracker ReadingKind(Read_Stmt, *this); 1382c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl llvm::BitstreamCursor &Cursor = F.DeclsCursor; 1383c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl 1384919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#ifndef NDEBUG 1385919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis unsigned PrevNumStmts = StmtStack.size(); 1386919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#endif 1387919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 13884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner RecordData Record; 13894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Idx; 1390c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ASTStmtReader Reader(*this, F, Cursor, Record, Idx); 13914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Stmt::EmptyShell Empty; 13924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner while (true) { 139452e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner unsigned Code = Cursor.ReadCode(); 13954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Code == llvm::bitc::END_BLOCK) { 139652e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner if (Cursor.ReadBlockEnd()) { 13973c7f4134603d04b44f997b43c0a9def270f25386Sebastian Redl Error("error at end of block in AST file"); 13984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner return 0; 13994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 14004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 14024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Code == llvm::bitc::ENTER_SUBBLOCK) { 14044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // No known subblocks, always skip them. 140552e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner Cursor.ReadSubBlockID(); 140652e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner if (Cursor.SkipBlock()) { 14073c7f4134603d04b44f997b43c0a9def270f25386Sebastian Redl Error("malformed block record in AST file"); 14084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner return 0; 14094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 14104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner continue; 14114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 14124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Code == llvm::bitc::DEFINE_ABBREV) { 141452e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner Cursor.ReadAbbrevRecord(); 14154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner continue; 14164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 14174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Stmt *S = 0; 14194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Idx = 0; 14204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Record.clear(); 14214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner bool Finished = false; 14228538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl switch ((StmtCode)Cursor.ReadRecord(Code, Record)) { 14238538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_STOP: 14244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Finished = true; 14254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14278538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_NULL_PTR: 14281eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump S = 0; 14294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14318538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_NULL: 14324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) NullStmt(Empty); 14334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14358538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_COMPOUND: 14364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CompoundStmt(Empty); 14374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14398538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CASE: 14404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CaseStmt(Empty); 14414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14438538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_DEFAULT: 14444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) DefaultStmt(Empty); 14454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14478538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_LABEL: 14484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) LabelStmt(Empty); 14494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14518538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_IF: 14524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) IfStmt(Empty); 14534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14558538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_SWITCH: 14564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) SwitchStmt(Empty); 14574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14598538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_WHILE: 14604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) WhileStmt(Empty); 14614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14638538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_DO: 14644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) DoStmt(Empty); 14654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14661eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 14678538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_FOR: 14684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ForStmt(Empty); 14694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14718538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_GOTO: 14724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) GotoStmt(Empty); 14734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14741eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 14758538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_INDIRECT_GOTO: 14764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) IndirectGotoStmt(Empty); 14774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14798538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CONTINUE: 14804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ContinueStmt(Empty); 14814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14838538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_BREAK: 14844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BreakStmt(Empty); 14854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14878538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_RETURN: 14884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ReturnStmt(Empty); 14894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14918538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_DECL: 14924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) DeclStmt(Empty); 14934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14958538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_ASM: 14964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) AsmStmt(Empty); 14974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14998538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_PREDEFINED: 15004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) PredefinedExpr(Empty); 15014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15038538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_DECL_REF: 1504663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis S = DeclRefExpr::CreateEmpty(*Context, 150560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*HasQualifier=*/Record[ASTStmtReader::NumExprFields], 1506def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*HasExplicitTemplateArgs=*/Record[ASTStmtReader::NumExprFields + 1], 1507def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields + 1] 1508def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ? Record[ASTStmtReader::NumExprFields + 2] 1509def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor : 0); 15104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15128538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_INTEGER_LITERAL: 15139996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis S = IntegerLiteral::Create(*Context, Empty); 15144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15168538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_FLOATING_LITERAL: 15179996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis S = FloatingLiteral::Create(*Context, Empty); 15184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15208538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_IMAGINARY_LITERAL: 15214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ImaginaryLiteral(Empty); 15224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15248538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_STRING_LITERAL: 15251eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump S = StringLiteral::CreateEmpty(*Context, 152660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields + 1]); 15274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15298538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CHARACTER_LITERAL: 15304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CharacterLiteral(Empty); 15314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15338538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_PAREN: 15344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ParenExpr(Empty); 15354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15378538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_PAREN_LIST: 153837bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis S = new (Context) ParenListExpr(Empty); 153937bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis break; 154037bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis 15418538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_UNARY_OPERATOR: 15424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) UnaryOperator(Empty); 15434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15458538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OFFSETOF: 15468ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor S = OffsetOfExpr::CreateEmpty(*Context, 154760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields], 154860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields + 1]); 15498ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 15508ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 15518538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_SIZEOF_ALIGN_OF: 15524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) SizeOfAlignOfExpr(Empty); 15534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15558538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_ARRAY_SUBSCRIPT: 15564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ArraySubscriptExpr(Empty); 15574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15598538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CALL: 1560ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis S = new (Context) CallExpr(*Context, Stmt::CallExprClass, Empty); 15614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15638538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_MEMBER: { 1564663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // We load everything here and fully initialize it at creation. 1565663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // That way we can use MemberExpr::Create and don't have to duplicate its 1566663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // logic with a MemberExpr::CreateEmpty. 1567663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1568663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis assert(Idx == 0); 1569663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis NestedNameSpecifier *NNS = 0; 1570663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis SourceRange QualifierRange; 1571663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis if (Record[Idx++]) { // HasQualifier. 1572663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis NNS = ReadNestedNameSpecifier(Record, Idx); 1573c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl QualifierRange = ReadSourceRange(F, Record, Idx); 1574663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 1575663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1576663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis TemplateArgumentListInfo ArgInfo; 1577def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor bool HasExplicitTemplateArgs = Record[Idx++]; 1578def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor if (HasExplicitTemplateArgs) { 1579def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor unsigned NumTemplateArgs = Record[Idx++]; 1580c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.setLAngleLoc(ReadSourceLocation(F, Record, Idx)); 1581c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.setRAngleLoc(ReadSourceLocation(F, Record, Idx)); 1582663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis for (unsigned i = 0; i != NumTemplateArgs; ++i) 1583c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.addArgument(ReadTemplateArgumentLoc(F, Record, Idx)); 1584663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 1585663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1586663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis NamedDecl *FoundD = cast_or_null<NamedDecl>(GetDecl(Record[Idx++])); 1587663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis AccessSpecifier AS = (AccessSpecifier)Record[Idx++]; 1588663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis DeclAccessPair FoundDecl = DeclAccessPair::make(FoundD, AS); 1589663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1590663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis QualType T = GetType(Record[Idx++]); 1591f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall ExprValueKind VK = static_cast<ExprValueKind>(Record[Idx++]); 1592f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall ExprObjectKind OK = static_cast<ExprObjectKind>(Record[Idx++]); 1593663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis Expr *Base = ReadSubExpr(); 1594663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis ValueDecl *MemberD = cast<ValueDecl>(GetDecl(Record[Idx++])); 1595c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation MemberLoc = ReadSourceLocation(F, Record, Idx); 15962577743c5650c646fb705df01403707e94f2df04Abramo Bagnara DeclarationNameInfo MemberNameInfo(MemberD->getDeclName(), MemberLoc); 1597663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis bool IsArrow = Record[Idx++]; 1598663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1599663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis S = MemberExpr::Create(*Context, Base, IsArrow, NNS, QualifierRange, 16002577743c5650c646fb705df01403707e94f2df04Abramo Bagnara MemberD, FoundDecl, MemberNameInfo, 1601def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor HasExplicitTemplateArgs ? &ArgInfo : 0, T, VK, OK); 16024045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameLoc(F, cast<MemberExpr>(S)->MemberDNLoc, 16034045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis MemberD->getDeclName(), Record, Idx); 16044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 1605663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 16064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16078538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_BINARY_OPERATOR: 16084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BinaryOperator(Empty); 16094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16118538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_COMPOUND_ASSIGN_OPERATOR: 16124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CompoundAssignOperator(Empty); 16134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16158538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CONDITIONAL_OPERATOR: 16164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ConditionalOperator(Empty); 16174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 161956ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall case EXPR_BINARY_CONDITIONAL_OPERATOR: 162056ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall S = new (Context) BinaryConditionalOperator(Empty); 162156ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall break; 162256ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 16238538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_IMPLICIT_CAST: 1624f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = ImplicitCastExpr::CreateEmpty(*Context, 162560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 16264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16288538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CSTYLE_CAST: 1629f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CStyleCastExpr::CreateEmpty(*Context, 163060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 16314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16338538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_COMPOUND_LITERAL: 16344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CompoundLiteralExpr(Empty); 16354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16378538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_EXT_VECTOR_ELEMENT: 16384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ExtVectorElementExpr(Empty); 16394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16418538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_INIT_LIST: 1642709210feee317b8d6690dd1d15c2b74cfe55e261Ted Kremenek S = new (Context) InitListExpr(*getContext(), Empty); 16434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16458538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_DESIGNATED_INIT: 1646d1d64a027554b635d644957ef071ec04ea1f7063Chris Lattner S = DesignatedInitExpr::CreateEmpty(*Context, 164760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields] - 1); 16481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 16494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16518538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_IMPLICIT_VALUE_INIT: 16524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ImplicitValueInitExpr(Empty); 16534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16558538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_VA_ARG: 16564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) VAArgExpr(Empty); 16574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16598538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_ADDR_LABEL: 16604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) AddrLabelExpr(Empty); 16614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16638538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_STMT: 16644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) StmtExpr(Empty); 16654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16678538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CHOOSE: 16684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ChooseExpr(Empty); 16694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16718538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_GNU_NULL: 16724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) GNUNullExpr(Empty); 16734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16758538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_SHUFFLE_VECTOR: 16764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ShuffleVectorExpr(Empty); 16774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16781eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 16798538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_BLOCK: 16804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BlockExpr(Empty); 16814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16838538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_BLOCK_DECL_REF: 16844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BlockDeclRefExpr(Empty); 16854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 16878538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_STRING_LITERAL: 16884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCStringLiteral(Empty); 16894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16908538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_ENCODE: 16914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCEncodeExpr(Empty); 16924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16938538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_SELECTOR_EXPR: 16944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCSelectorExpr(Empty); 16954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16968538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_PROTOCOL_EXPR: 16974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCProtocolExpr(Empty); 16984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16998538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_IVAR_REF_EXPR: 17004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCIvarRefExpr(Empty); 17014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17028538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_PROPERTY_REF_EXPR: 17034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCPropertyRefExpr(Empty); 17044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17058538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_KVC_REF_EXPR: 170612f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall llvm_unreachable("mismatching AST file"); 17074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17088538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_MESSAGE_EXPR: 170904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor S = ObjCMessageExpr::CreateEmpty(*Context, 171060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields]); 17114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17128538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_ISA: 1713f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff S = new (Context) ObjCIsaExpr(Empty); 1714f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff break; 17158538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_FOR_COLLECTION: 17164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCForCollectionStmt(Empty); 17174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17188538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_CATCH: 17194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtCatchStmt(Empty); 17204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17218538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_FINALLY: 17224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtFinallyStmt(Empty); 17234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17248538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_AT_TRY: 17258f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor S = ObjCAtTryStmt::CreateEmpty(*Context, 172660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumStmtFields], 172760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumStmtFields + 1]); 17284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17298538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_AT_SYNCHRONIZED: 17304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtSynchronizedStmt(Empty); 17314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17328538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_AT_THROW: 17334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtThrowStmt(Empty); 17344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 17368538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CXX_CATCH: 17377cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S = new (Context) CXXCatchStmt(Empty); 17387cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis break; 17397cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 17408538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CXX_TRY: 17417cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S = CXXTryStmt::Create(*Context, Empty, 174260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumHandlers=*/Record[ASTStmtReader::NumStmtFields]); 17437cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis break; 17447cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 17458538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_OPERATOR_CALL: 1746ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis S = new (Context) CXXOperatorCallExpr(*Context, Empty); 1747ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis break; 17481817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner 17498538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_MEMBER_CALL: 17501817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner S = new (Context) CXXMemberCallExpr(*Context, Empty); 17511817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner break; 175239da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor 17538538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_CONSTRUCT: 17546d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis S = new (Context) CXXConstructExpr(Empty); 17556d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis break; 17566d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 17578538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_TEMPORARY_OBJECT: 17586d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis S = new (Context) CXXTemporaryObjectExpr(Empty); 175939da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor break; 1760ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 17618538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_STATIC_CAST: 1762f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXStaticCastExpr::CreateEmpty(*Context, 176360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1764ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1765ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 17668538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DYNAMIC_CAST: 1767f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXDynamicCastExpr::CreateEmpty(*Context, 176860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1769ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1770ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 17718538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_REINTERPRET_CAST: 1772f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXReinterpretCastExpr::CreateEmpty(*Context, 177360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1774ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1775ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 17768538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_CONST_CAST: 1777f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXConstCastExpr::CreateEmpty(*Context); 1778ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1779ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 17808538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_FUNCTIONAL_CAST: 1781f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXFunctionalCastExpr::CreateEmpty(*Context, 178260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1783ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1784ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 17858538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_BOOL_LITERAL: 1786eb7f96141f754150a92433286fa385910a22f494Sam Weinig S = new (Context) CXXBoolLiteralExpr(Empty); 1787eb7f96141f754150a92433286fa385910a22f494Sam Weinig break; 1788ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 17898538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_NULL_PTR_LITERAL: 1790eb7f96141f754150a92433286fa385910a22f494Sam Weinig S = new (Context) CXXNullPtrLiteralExpr(Empty); 1791eb7f96141f754150a92433286fa385910a22f494Sam Weinig break; 17928538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_TYPEID_EXPR: 179314ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner S = new (Context) CXXTypeidExpr(Empty, true); 179414ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner break; 17958538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_TYPEID_TYPE: 179614ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner S = new (Context) CXXTypeidExpr(Empty, false); 179714ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner break; 179801b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet case EXPR_CXX_UUIDOF_EXPR: 179901b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet S = new (Context) CXXUuidofExpr(Empty, true); 180001b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet break; 180101b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet case EXPR_CXX_UUIDOF_TYPE: 180201b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet S = new (Context) CXXUuidofExpr(Empty, false); 180301b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet break; 18048538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_THIS: 18052fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner S = new (Context) CXXThisExpr(Empty); 18062fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner break; 18078538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_THROW: 18082fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner S = new (Context) CXXThrowExpr(Empty); 18092fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner break; 18108538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DEFAULT_ARG: { 181160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl bool HasOtherExprStored = Record[ASTStmtReader::NumExprFields]; 18128a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis if (HasOtherExprStored) { 18138a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis Expr *SubExpr = ReadSubExpr(); 18148a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis S = CXXDefaultArgExpr::Create(*Context, SourceLocation(), 0, SubExpr); 18158a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis } else 18168a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis S = new (Context) CXXDefaultArgExpr(Empty); 1817030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner break; 18188a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis } 18198538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_BIND_TEMPORARY: 1820d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner S = new (Context) CXXBindTemporaryExpr(Empty); 1821d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner break; 1822e2ca6d4a2f41876930fbd304caa706452d2569d8Douglas Gregor 18238538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_SCALAR_VALUE_INIT: 1824ed8abf18329df67b0abcbb3a10458bd8c1d2a595Douglas Gregor S = new (Context) CXXScalarValueInitExpr(Empty); 18255921863d8f24084797863b5df37842113bac4352Chris Lattner break; 18268538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_NEW: 18275921863d8f24084797863b5df37842113bac4352Chris Lattner S = new (Context) CXXNewExpr(Empty); 18285921863d8f24084797863b5df37842113bac4352Chris Lattner break; 18298538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DELETE: 183095fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis S = new (Context) CXXDeleteExpr(Empty); 183195fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis break; 18328538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_PSEUDO_DESTRUCTOR: 1833de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis S = new (Context) CXXPseudoDestructorExpr(Empty); 1834de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis break; 18355921863d8f24084797863b5df37842113bac4352Chris Lattner 18364765fa05b5652fcc4356371c2f481d0ea9a1b007John McCall case EXPR_EXPR_WITH_CLEANUPS: 18374765fa05b5652fcc4356371c2f481d0ea9a1b007John McCall S = new (Context) ExprWithCleanups(Empty); 1838d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner break; 18398dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 18408538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DEPENDENT_SCOPE_MEMBER: 18418dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis S = CXXDependentScopeMemberExpr::CreateEmpty(*Context, 1842def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*HasExplicitTemplateArgs=*/Record[ASTStmtReader::NumExprFields], 1843def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields] 1844def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ? Record[ASTStmtReader::NumExprFields + 1] 1845def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor : 0); 18468dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis break; 18478dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 18488538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DEPENDENT_SCOPE_DECL_REF: 184912dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis S = DependentScopeDeclRefExpr::CreateEmpty(*Context, 1850def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*HasExplicitTemplateArgs=*/Record[ASTStmtReader::NumExprFields], 1851def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields] 1852def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ? Record[ASTStmtReader::NumExprFields + 1] 1853def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor : 0); 185412dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis break; 185512dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 18568538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNRESOLVED_CONSTRUCT: 18578dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis S = CXXUnresolvedConstructExpr::CreateEmpty(*Context, 185860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumArgs=*/Record[ASTStmtReader::NumExprFields]); 1859a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis break; 1860a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 18618538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNRESOLVED_MEMBER: 1862a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis S = UnresolvedMemberExpr::CreateEmpty(*Context, 1863def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*HasExplicitTemplateArgs=*/Record[ASTStmtReader::NumExprFields], 1864def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields] 1865def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ? Record[ASTStmtReader::NumExprFields + 1] 1866def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor : 0); 18678dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis break; 1868bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis 18698538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNRESOLVED_LOOKUP: 1870bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis S = UnresolvedLookupExpr::CreateEmpty(*Context, 1871def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*HasExplicitTemplateArgs=*/Record[ASTStmtReader::NumExprFields], 1872def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields] 1873def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ? Record[ASTStmtReader::NumExprFields + 1] 1874def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor : 0); 1875bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis break; 18766d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 18778538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNARY_TYPE_TRAIT: 18786d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis S = new (Context) UnaryTypeTraitExpr(Empty); 18796d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis break; 18806b219d082434394c1ac401390ec1d1967727815aSebastian Redl 1881f187237d916afa97c491ac32fe98be7d335c5b63Francois Pichet case EXPR_BINARY_TYPE_TRAIT: 18826ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet S = new (Context) BinaryTypeTraitExpr(Empty); 18836ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet break; 18846ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet 18856b219d082434394c1ac401390ec1d1967727815aSebastian Redl case EXPR_CXX_NOEXCEPT: 18866b219d082434394c1ac401390ec1d1967727815aSebastian Redl S = new (Context) CXXNoexceptExpr(Empty); 18876b219d082434394c1ac401390ec1d1967727815aSebastian Redl break; 18887cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall 1889be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor case EXPR_PACK_EXPANSION: 1890be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor S = new (Context) PackExpansionExpr(Empty); 1891be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor break; 1892be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor 1893ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor case EXPR_SIZEOF_PACK: 1894ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor S = new (Context) SizeOfPackExpr(Empty); 1895ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor break; 1896ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor 1897c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor case EXPR_SUBST_NON_TYPE_TEMPLATE_PARM_PACK: 1898c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor S = new (Context) SubstNonTypeTemplateParmPackExpr(Empty); 1899c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor break; 1900c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor 190156ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall case EXPR_OPAQUE_VALUE: { 190256ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall unsigned key = Record[ASTStmtReader::NumExprFields]; 190356ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall OpaqueValueExpr *&expr = OpaqueValueExprs[key]; 190456ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 190556ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall // If we already have an entry for this opaque value expression, 190656ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall // don't bother reading it again. 190756ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall if (expr) { 190856ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall StmtStack.push_back(expr); 190956ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall continue; 191056ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall } 191156ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 191256ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall S = expr = new (Context) OpaqueValueExpr(Empty); 19137cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall break; 191456ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall } 1915e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne 1916e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne case EXPR_CUDA_KERNEL_CALL: 1917e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne S = new (Context) CUDAKernelCallExpr(*Context, Empty); 1918e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne break; 19194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 19206d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 19214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // We hit a STMT_STOP, so we're done with this expression. 19224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Finished) 19234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 19244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 19254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner ++NumStatementsRead; 19264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 1927919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis if (S) 1928919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Reader.Visit(S); 19294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 19304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(Idx == Record.size() && "Invalid deserialization of statement"); 19314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner StmtStack.push_back(S); 19324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 1933919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1934919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#ifndef NDEBUG 1935919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis assert(StmtStack.size() > PrevNumStmts && "Read too many sub stmts!"); 1936919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis assert(StmtStack.size() == PrevNumStmts + 1 && "Extra expressions on stack!"); 1937919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#endif 1938919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1939919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis return StmtStack.pop_back_val(); 19404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1941