ASTReaderStmt.cpp revision f40f0d5a382395e0301d7dcbeaa2b8e90b8973b1
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" 174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner#include "clang/AST/StmtVisitor.h" 184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattnerusing namespace clang; 198538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redlusing namespace clang::serialization; 204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 2137bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidisnamespace clang { 2217cfdeda476aa8899f0ccedd9cb9cdb76e89b6b4Argyrios Kyrtzidis 2360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl class ASTStmtReader : public StmtVisitor<ASTStmtReader> { 24c43b54cbc10654ed59de797898042e1a05265246Sebastian Redl ASTReader &Reader; 25c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ASTReader::PerFileData &F; 26577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl llvm::BitstreamCursor &DeclsCursor; 27c43b54cbc10654ed59de797898042e1a05265246Sebastian Redl const ASTReader::RecordData &Record; 284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned &Idx; 294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 30c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation ReadSourceLocation(const ASTReader::RecordData &R, 31c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl unsigned &I) { 32c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return Reader.ReadSourceLocation(F, R, I); 33c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl } 34c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceRange ReadSourceRange(const ASTReader::RecordData &R, unsigned &I) { 35c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return Reader.ReadSourceRange(F, R, I); 36c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl } 37c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl TypeSourceInfo *GetTypeSourceInfo(const ASTReader::RecordData &R, 38c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl unsigned &I) { 39c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return Reader.GetTypeSourceInfo(F, R, I); 40c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl } 414045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis void ReadDeclarationNameLoc(DeclarationNameLoc &DNLoc, DeclarationName Name, 424045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis const ASTReader::RecordData &R, unsigned &I) { 434045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis Reader.ReadDeclarationNameLoc(F, DNLoc, Name, R, I); 444045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis } 454045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis void ReadDeclarationNameInfo(DeclarationNameInfo &NameInfo, 464045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis const ASTReader::RecordData &R, unsigned &I) { 474045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis Reader.ReadDeclarationNameInfo(F, NameInfo, R, I); 484045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis } 49c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl 504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner public: 51c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ASTStmtReader(ASTReader &Reader, ASTReader::PerFileData &F, 52c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl llvm::BitstreamCursor &Cursor, 53c43b54cbc10654ed59de797898042e1a05265246Sebastian Redl const ASTReader::RecordData &Record, unsigned &Idx) 54c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl : Reader(Reader), F(F), DeclsCursor(Cursor), Record(Record), Idx(Idx) { } 554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// \brief The number of record fields required for the Stmt class 574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// itself. 584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner static const unsigned NumStmtFields = 0; 594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// \brief The number of record fields required for the Expr class 614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// itself. 62f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall static const unsigned NumExprFields = NumStmtFields + 5; 6336c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis 6436c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis /// \brief Read and initialize a ExplicitTemplateArgumentList structure. 65919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void ReadExplicitTemplateArgumentList(ExplicitTemplateArgumentList &ArgList, 66919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis unsigned NumTemplateArgs); 67919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 68919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitStmt(Stmt *S); 69919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitNullStmt(NullStmt *S); 70919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCompoundStmt(CompoundStmt *S); 71919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitSwitchCase(SwitchCase *S); 72919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCaseStmt(CaseStmt *S); 73919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDefaultStmt(DefaultStmt *S); 74919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitLabelStmt(LabelStmt *S); 75919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitIfStmt(IfStmt *S); 76919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitSwitchStmt(SwitchStmt *S); 77919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitWhileStmt(WhileStmt *S); 78919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDoStmt(DoStmt *S); 79919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitForStmt(ForStmt *S); 80919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitGotoStmt(GotoStmt *S); 81919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitIndirectGotoStmt(IndirectGotoStmt *S); 82919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitContinueStmt(ContinueStmt *S); 83919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitBreakStmt(BreakStmt *S); 84919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitReturnStmt(ReturnStmt *S); 85919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDeclStmt(DeclStmt *S); 86919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitAsmStmt(AsmStmt *S); 87919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitExpr(Expr *E); 88919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitPredefinedExpr(PredefinedExpr *E); 89919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDeclRefExpr(DeclRefExpr *E); 90919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitIntegerLiteral(IntegerLiteral *E); 91919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitFloatingLiteral(FloatingLiteral *E); 92919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitImaginaryLiteral(ImaginaryLiteral *E); 93919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitStringLiteral(StringLiteral *E); 94919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCharacterLiteral(CharacterLiteral *E); 95919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitParenExpr(ParenExpr *E); 9637bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis void VisitParenListExpr(ParenListExpr *E); 97919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitUnaryOperator(UnaryOperator *E); 98919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitOffsetOfExpr(OffsetOfExpr *E); 99919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E); 100919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitArraySubscriptExpr(ArraySubscriptExpr *E); 101919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCallExpr(CallExpr *E); 102919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitMemberExpr(MemberExpr *E); 103919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCastExpr(CastExpr *E); 104919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitBinaryOperator(BinaryOperator *E); 105919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCompoundAssignOperator(CompoundAssignOperator *E); 106919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitConditionalOperator(ConditionalOperator *E); 107919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitImplicitCastExpr(ImplicitCastExpr *E); 108919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitExplicitCastExpr(ExplicitCastExpr *E); 109919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCStyleCastExpr(CStyleCastExpr *E); 110919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCompoundLiteralExpr(CompoundLiteralExpr *E); 111919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitExtVectorElementExpr(ExtVectorElementExpr *E); 112919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitInitListExpr(InitListExpr *E); 113919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDesignatedInitExpr(DesignatedInitExpr *E); 114919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitImplicitValueInitExpr(ImplicitValueInitExpr *E); 115919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitVAArgExpr(VAArgExpr *E); 116919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitAddrLabelExpr(AddrLabelExpr *E); 117919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitStmtExpr(StmtExpr *E); 118919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitChooseExpr(ChooseExpr *E); 119919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitGNUNullExpr(GNUNullExpr *E); 120919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitShuffleVectorExpr(ShuffleVectorExpr *E); 121919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitBlockExpr(BlockExpr *E); 122919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitBlockDeclRefExpr(BlockDeclRefExpr *E); 123919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCStringLiteral(ObjCStringLiteral *E); 124919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCEncodeExpr(ObjCEncodeExpr *E); 125919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCSelectorExpr(ObjCSelectorExpr *E); 126919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCProtocolExpr(ObjCProtocolExpr *E); 127919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCIvarRefExpr(ObjCIvarRefExpr *E); 128919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E); 129919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCMessageExpr(ObjCMessageExpr *E); 130919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCIsaExpr(ObjCIsaExpr *E); 131919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 132919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCForCollectionStmt(ObjCForCollectionStmt *); 133919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCAtCatchStmt(ObjCAtCatchStmt *); 134919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *); 135919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCAtTryStmt(ObjCAtTryStmt *); 136919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *); 137919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCAtThrowStmt(ObjCAtThrowStmt *); 138919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1397cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis // C++ Statements 1407cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis void VisitCXXCatchStmt(CXXCatchStmt *S); 1417cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis void VisitCXXTryStmt(CXXTryStmt *S); 1427cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 143919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E); 144919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXConstructExpr(CXXConstructExpr *E); 1456d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis void VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E); 146919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXNamedCastExpr(CXXNamedCastExpr *E); 147919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXStaticCastExpr(CXXStaticCastExpr *E); 148919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXDynamicCastExpr(CXXDynamicCastExpr *E); 149919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXReinterpretCastExpr(CXXReinterpretCastExpr *E); 150919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXConstCastExpr(CXXConstCastExpr *E); 151919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *E); 152919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E); 153919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E); 154919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXTypeidExpr(CXXTypeidExpr *E); 15501b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet void VisitCXXUuidofExpr(CXXUuidofExpr *E); 156919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXThisExpr(CXXThisExpr *E); 157919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXThrowExpr(CXXThrowExpr *E); 158919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E); 159919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E); 160d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 161ed8abf18329df67b0abcbb3a10458bd8c1d2a595Douglas Gregor void VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E); 162919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXNewExpr(CXXNewExpr *E); 163919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXDeleteExpr(CXXDeleteExpr *E); 164919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E); 1655921863d8f24084797863b5df37842113bac4352Chris Lattner 1664765fa05b5652fcc4356371c2f481d0ea9a1b007John McCall void VisitExprWithCleanups(ExprWithCleanups *E); 1678dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 168919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E); 169919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E); 170919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E); 171a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 172919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitOverloadExpr(OverloadExpr *E); 173919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitUnresolvedMemberExpr(UnresolvedMemberExpr *E); 174919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E); 1756d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 1766d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis void VisitUnaryTypeTraitExpr(UnaryTypeTraitExpr *E); 1776ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet void VisitBinaryTypeTraitExpr(BinaryTypeTraitExpr *E); 1786b219d082434394c1ac401390ec1d1967727815aSebastian Redl void VisitCXXNoexceptExpr(CXXNoexceptExpr *E); 1797cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall 1807cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall void VisitOpaqueValueExpr(OpaqueValueExpr *E); 1814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner }; 1824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 18460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader:: 18536c76f0bea0d3595a25a5362225c642019cc3176Argyrios KyrtzidisReadExplicitTemplateArgumentList(ExplicitTemplateArgumentList &ArgList, 186919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis unsigned NumTemplateArgs) { 18736c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis TemplateArgumentListInfo ArgInfo; 188c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.setLAngleLoc(ReadSourceLocation(Record, Idx)); 189c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.setRAngleLoc(ReadSourceLocation(Record, Idx)); 19036c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis for (unsigned i = 0; i != NumTemplateArgs; ++i) 191577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl ArgInfo.addArgument( 192c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl Reader.ReadTemplateArgumentLoc(F, Record, Idx)); 19336c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis ArgList.initializeFrom(ArgInfo); 19436c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis} 19536c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis 19660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitStmt(Stmt *S) { 1974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(Idx == NumStmtFields && "Incorrect statement field count"); 1984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 20060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitNullStmt(NullStmt *S) { 2014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 202c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setSemiLoc(ReadSourceLocation(Record, Idx)); 20344aa1f397855f130e88e62ffc1029f7f83bb5d2eArgyrios Kyrtzidis S->LeadingEmptyMacro = Record[Idx++]; 2044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 20660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCompoundStmt(CompoundStmt *S) { 2074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 208919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis llvm::SmallVector<Stmt *, 16> Stmts; 2094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumStmts = Record[Idx++]; 210919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis while (NumStmts--) 211d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Stmts.push_back(Reader.ReadSubStmt()); 212919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis S->setStmts(*Reader.getContext(), Stmts.data(), Stmts.size()); 213c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setLBracLoc(ReadSourceLocation(Record, Idx)); 214c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRBracLoc(ReadSourceLocation(Record, Idx)); 2154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 21760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitSwitchCase(SwitchCase *S) { 2184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 2194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Reader.RecordSwitchCaseID(S, Record[Idx++]); 2204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 22260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCaseStmt(CaseStmt *S) { 2234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitSwitchCase(S); 224d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setLHS(Reader.ReadSubExpr()); 225d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setRHS(Reader.ReadSubExpr()); 226d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSubStmt(Reader.ReadSubStmt()); 227c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setCaseLoc(ReadSourceLocation(Record, Idx)); 228c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setEllipsisLoc(ReadSourceLocation(Record, Idx)); 229c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setColonLoc(ReadSourceLocation(Record, Idx)); 2304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 23260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDefaultStmt(DefaultStmt *S) { 2334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitSwitchCase(S); 234d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSubStmt(Reader.ReadSubStmt()); 235c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setDefaultLoc(ReadSourceLocation(Record, Idx)); 236c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setColonLoc(ReadSourceLocation(Record, Idx)); 2374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 23960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitLabelStmt(LabelStmt *S) { 2404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 2414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setID(Reader.GetIdentifierInfo(Record, Idx)); 242d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSubStmt(Reader.ReadSubStmt()); 243c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setIdentLoc(ReadSourceLocation(Record, Idx)); 244355a9fe26a6dec89680ddf713dd5bc7a671b298aArgyrios Kyrtzidis S->setUsed(Record[Idx++]); 2451a18600b85aaa691122983dd8dcf4225cfc9ef68Argyrios Kyrtzidis S->setUnusedAttribute(Record[Idx++]); 2464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Reader.RecordLabelStmt(S, Record[Idx++]); 2474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 24960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitIfStmt(IfStmt *S) { 2504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 25143dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor S->setConditionVariable(*Reader.getContext(), 25243dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 253d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 254d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setThen(Reader.ReadSubStmt()); 255d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setElse(Reader.ReadSubStmt()); 256c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setIfLoc(ReadSourceLocation(Record, Idx)); 257c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setElseLoc(ReadSourceLocation(Record, Idx)); 2584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 26060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitSwitchStmt(SwitchStmt *S) { 2614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 26243dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor S->setConditionVariable(*Reader.getContext(), 26343dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 264d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 265d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 266c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setSwitchLoc(ReadSourceLocation(Record, Idx)); 267559fb554602bedb57dbbf3cc14ac8a38264b4547Ted Kremenek if (Record[Idx++]) 268559fb554602bedb57dbbf3cc14ac8a38264b4547Ted Kremenek S->setAllEnumCasesCovered(); 269559fb554602bedb57dbbf3cc14ac8a38264b4547Ted Kremenek 2704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SwitchCase *PrevSC = 0; 2714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned N = Record.size(); Idx != N; ++Idx) { 2724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SwitchCase *SC = Reader.getSwitchCaseWithID(Record[Idx]); 2734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (PrevSC) 2744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner PrevSC->setNextSwitchCase(SC); 2754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner else 2764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setSwitchCaseList(SC); 2771eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 2784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner PrevSC = SC; 2794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 2804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 28260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitWhileStmt(WhileStmt *S) { 2834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 28443dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor S->setConditionVariable(*Reader.getContext(), 28543dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 286d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 287d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 288c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setWhileLoc(ReadSourceLocation(Record, Idx)); 2894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 29160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDoStmt(DoStmt *S) { 2924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 293d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 294d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 295c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setDoLoc(ReadSourceLocation(Record, Idx)); 296c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setWhileLoc(ReadSourceLocation(Record, Idx)); 297c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 2984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 30060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitForStmt(ForStmt *S) { 3014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 302d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setInit(Reader.ReadSubStmt()); 303d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 30443dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor S->setConditionVariable(*Reader.getContext(), 30543dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 306d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setInc(Reader.ReadSubExpr()); 307d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 308c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setForLoc(ReadSourceLocation(Record, Idx)); 309c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setLParenLoc(ReadSourceLocation(Record, Idx)); 310c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 3114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 31360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitGotoStmt(GotoStmt *S) { 3144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 3154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Reader.SetLabelOf(S, Record[Idx++]); 316c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setGotoLoc(ReadSourceLocation(Record, Idx)); 317c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setLabelLoc(ReadSourceLocation(Record, Idx)); 3184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 32060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitIndirectGotoStmt(IndirectGotoStmt *S) { 3214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 322c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setGotoLoc(ReadSourceLocation(Record, Idx)); 323c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setStarLoc(ReadSourceLocation(Record, Idx)); 324d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setTarget(Reader.ReadSubExpr()); 3254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 32760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitContinueStmt(ContinueStmt *S) { 3284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 329c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setContinueLoc(ReadSourceLocation(Record, Idx)); 3304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 33260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBreakStmt(BreakStmt *S) { 3334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 334c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setBreakLoc(ReadSourceLocation(Record, Idx)); 3354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 33760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitReturnStmt(ReturnStmt *S) { 3384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 339d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setRetValue(Reader.ReadSubExpr()); 340c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setReturnLoc(ReadSourceLocation(Record, Idx)); 3415077c3876beeaed32280af88244e8050078619a8Douglas Gregor S->setNRVOCandidate(cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 3424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 34460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDeclStmt(DeclStmt *S) { 3454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 346c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setStartLoc(ReadSourceLocation(Record, Idx)); 347c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setEndLoc(ReadSourceLocation(Record, Idx)); 3484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 3494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Idx + 1 == Record.size()) { 3504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Single declaration 3514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setDeclGroup(DeclGroupRef(Reader.GetDecl(Record[Idx++]))); 3524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } else { 3534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner llvm::SmallVector<Decl *, 16> Decls; 3544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Decls.reserve(Record.size() - Idx); 3554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned N = Record.size(); Idx != N; ++Idx) 3564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Decls.push_back(Reader.GetDecl(Record[Idx])); 357d1d64a027554b635d644957ef071ec04ea1f7063Chris Lattner S->setDeclGroup(DeclGroupRef(DeclGroup::Create(*Reader.getContext(), 35875fdb2377604e53678102076991bea345ace4692Douglas Gregor Decls.data(), 35975fdb2377604e53678102076991bea345ace4692Douglas Gregor Decls.size()))); 3604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 3614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 36360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitAsmStmt(AsmStmt *S) { 3644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 3654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumOutputs = Record[Idx++]; 3664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumInputs = Record[Idx++]; 3674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumClobbers = Record[Idx++]; 368c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAsmLoc(ReadSourceLocation(Record, Idx)); 369c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 3704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setVolatile(Record[Idx++]); 3714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setSimple(Record[Idx++]); 3723b11fd3b52e7b88233c602407c151d07cb093e75Mike Stump S->setMSAsm(Record[Idx++]); 3731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 374d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setAsmString(cast_or_null<StringLiteral>(Reader.ReadSubStmt())); 3754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 3764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Outputs and inputs 377ff93dbd887e40588ed55d135037bb9287488b285Anders Carlsson llvm::SmallVector<IdentifierInfo *, 16> Names; 3784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner llvm::SmallVector<StringLiteral*, 16> Constraints; 3794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner llvm::SmallVector<Stmt*, 16> Exprs; 3804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = NumOutputs + NumInputs; I != N; ++I) { 381ff93dbd887e40588ed55d135037bb9287488b285Anders Carlsson Names.push_back(Reader.GetIdentifierInfo(Record, Idx)); 382d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Constraints.push_back(cast_or_null<StringLiteral>(Reader.ReadSubStmt())); 383d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Exprs.push_back(Reader.ReadSubStmt()); 3844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 3854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 3864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Constraints 3874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner llvm::SmallVector<StringLiteral*, 16> Clobbers; 3884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0; I != NumClobbers; ++I) 389d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Clobbers.push_back(cast_or_null<StringLiteral>(Reader.ReadSubStmt())); 390fdba9c069023f686e2608affde02c82131ee1cf8Anders Carlsson 391acb6bcb442936f3c14126fdd473307c17647cb84Anders Carlsson S->setOutputsAndInputsAndClobbers(*Reader.getContext(), 392acb6bcb442936f3c14126fdd473307c17647cb84Anders Carlsson Names.data(), Constraints.data(), 393fdba9c069023f686e2608affde02c82131ee1cf8Anders Carlsson Exprs.data(), NumOutputs, NumInputs, 394fdba9c069023f686e2608affde02c82131ee1cf8Anders Carlsson Clobbers.data(), NumClobbers); 3954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 39760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitExpr(Expr *E) { 3984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(E); 3994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setType(Reader.GetType(Record[Idx++])); 4004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setTypeDependent(Record[Idx++]); 4014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setValueDependent(Record[Idx++]); 402f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall E->setValueKind(static_cast<ExprValueKind>(Record[Idx++])); 403f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall E->setObjectKind(static_cast<ExprObjectKind>(Record[Idx++])); 4044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(Idx == NumExprFields && "Incorrect expression field count"); 4054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 40760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitPredefinedExpr(PredefinedExpr *E) { 4084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 409c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 4104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setIdentType((PredefinedExpr::IdentType)Record[Idx++]); 4114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 41360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDeclRefExpr(DeclRefExpr *E) { 4144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 415663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 416663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis bool HasQualifier = Record[Idx++]; 417663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis unsigned NumTemplateArgs = Record[Idx++]; 418663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 419663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis E->DecoratedD.setInt((HasQualifier? DeclRefExpr::HasQualifierFlag : 0) | 420663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis (NumTemplateArgs ? DeclRefExpr::HasExplicitTemplateArgumentListFlag : 0)); 421663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 422663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis if (HasQualifier) { 423663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis E->getNameQualifier()->NNS = Reader.ReadNestedNameSpecifier(Record, Idx); 424c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->getNameQualifier()->Range = ReadSourceRange(Record, Idx); 425663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 426663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 427663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis if (NumTemplateArgs) 428096832c5ed5b9106fa177ebc148489760c3bc496John McCall ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 429663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis NumTemplateArgs); 430663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 431dbd872f273a8dbf22e089b3def6c09f0a460965dJohn McCall E->setDecl(cast<ValueDecl>(Reader.GetDecl(Record[Idx++]))); 432c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 4334045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameLoc(E->DNLoc, E->getDecl()->getDeclName(), Record, Idx); 4344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 43660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitIntegerLiteral(IntegerLiteral *E) { 4374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 438c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 4399996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis E->setValue(*Reader.getContext(), Reader.ReadAPInt(Record, Idx)); 4404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 44260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitFloatingLiteral(FloatingLiteral *E) { 4434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 4449996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis E->setValue(*Reader.getContext(), Reader.ReadAPFloat(Record, Idx)); 4454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setExact(Record[Idx++]); 446c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 4474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 44960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitImaginaryLiteral(ImaginaryLiteral *E) { 4504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 451d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 4524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 45460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitStringLiteral(StringLiteral *E) { 4554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 4564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Len = Record[Idx++]; 4571eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump assert(Record[Idx] == E->getNumConcatenated() && 4584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner "Wrong number of concatenated tokens!"); 4594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner ++Idx; 4604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setWide(Record[Idx++]); 4614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 4621eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // Read string data 463b648023da23e8b227cdda57a241db4c6f368726bDaniel Dunbar llvm::SmallString<16> Str(&Record[Idx], &Record[Idx] + Len); 464b648023da23e8b227cdda57a241db4c6f368726bDaniel Dunbar E->setString(*Reader.getContext(), Str.str()); 4654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Idx += Len; 4664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 4674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Read source locations 4684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = E->getNumConcatenated(); I != N; ++I) 469c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setStrTokenLoc(I, ReadSourceLocation(Record, Idx)); 4704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 47260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCharacterLiteral(CharacterLiteral *E) { 4734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 4744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setValue(Record[Idx++]); 475c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 4764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setWide(Record[Idx++]); 4774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 47960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitParenExpr(ParenExpr *E) { 4804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 481c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParen(ReadSourceLocation(Record, Idx)); 482c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParen(ReadSourceLocation(Record, Idx)); 483d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 4844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 48660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitParenListExpr(ParenListExpr *E) { 48737bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis VisitExpr(E); 48837bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis unsigned NumExprs = Record[Idx++]; 48937bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->Exprs = new (*Reader.getContext()) Stmt*[NumExprs]; 49037bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis for (unsigned i = 0; i != NumExprs; ++i) 49137bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->Exprs[i] = Reader.ReadSubStmt(); 49237bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->NumExprs = NumExprs; 493c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->LParenLoc = ReadSourceLocation(Record, Idx); 494c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->RParenLoc = ReadSourceLocation(Record, Idx); 49537bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis} 49637bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis 49760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnaryOperator(UnaryOperator *E) { 4984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 499d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 5004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setOpcode((UnaryOperator::Opcode)Record[Idx++]); 501c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 5024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 50460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitOffsetOfExpr(OffsetOfExpr *E) { 5058ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor typedef OffsetOfExpr::OffsetOfNode Node; 5068ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor VisitExpr(E); 5078ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor assert(E->getNumComponents() == Record[Idx]); 5088ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor ++Idx; 5098ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor assert(E->getNumExpressions() == Record[Idx]); 5108ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor ++Idx; 511c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 512c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 513c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeSourceInfo(GetTypeSourceInfo(Record, Idx)); 5148ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor for (unsigned I = 0, N = E->getNumComponents(); I != N; ++I) { 5158ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Node::Kind Kind = static_cast<Node::Kind>(Record[Idx++]); 516c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation Start = ReadSourceLocation(Record, Idx); 517c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation End = ReadSourceLocation(Record, Idx); 5188ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor switch (Kind) { 5198ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case Node::Array: 5208ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor E->setComponent(I, Node(Start, Record[Idx++], End)); 5218ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 5228ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 5238ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case Node::Field: 5248ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor E->setComponent(I, 5258ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Node(Start, 5268ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor dyn_cast_or_null<FieldDecl>(Reader.GetDecl(Record[Idx++])), 5278ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor End)); 5288ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 5298ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 5308ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case Node::Identifier: 5318ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor E->setComponent(I, Node(Start, Reader.GetIdentifier(Record[Idx++]), End)); 5328ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 533cc8a5d5f90bbbbcb46f342117b851b7e07ec34f1Douglas Gregor 534afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis case Node::Base: { 535afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis CXXBaseSpecifier *Base = new (*Reader.getContext()) CXXBaseSpecifier(); 536c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl *Base = Reader.ReadCXXBaseSpecifier(F, Record, Idx); 537afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis E->setComponent(I, Node(Base)); 538cc8a5d5f90bbbbcb46f342117b851b7e07ec34f1Douglas Gregor break; 5398ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor } 540afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis } 5418ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor } 5428ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 5438ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor for (unsigned I = 0, N = E->getNumExpressions(); I != N; ++I) 544d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setIndexExpr(I, Reader.ReadSubExpr()); 5458ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor} 5468ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 54760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E) { 5484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 5494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setSizeof(Record[Idx++]); 5504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Record[Idx] == 0) { 551d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArgument(Reader.ReadSubExpr()); 5524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner ++Idx; 5534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } else { 554c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setArgument(GetTypeSourceInfo(Record, Idx)); 5554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 556c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 557c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 5584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 56060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitArraySubscriptExpr(ArraySubscriptExpr *E) { 5614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 562d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 563d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 564c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRBracketLoc(ReadSourceLocation(Record, Idx)); 5654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 56760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCallExpr(CallExpr *E) { 5684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 569d1d64a027554b635d644957ef071ec04ea1f7063Chris Lattner E->setNumArgs(*Reader.getContext(), Record[Idx++]); 570c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 571d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setCallee(Reader.ReadSubExpr()); 5724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 573d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 5744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 57660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitMemberExpr(MemberExpr *E) { 577663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // Don't call VisitExpr, this is fully initialized at creation. 578663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis assert(E->getStmtClass() == Stmt::MemberExprClass && 579663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis "It's a subclass, we must advance Idx!"); 5804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 58260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCIsaExpr(ObjCIsaExpr *E) { 583f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff VisitExpr(E); 584d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 585c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setIsaMemberLoc(ReadSourceLocation(Record, Idx)); 586f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff E->setArrow(Record[Idx++]); 587f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff} 588f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff 58960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCastExpr(CastExpr *E) { 5904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 591f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall unsigned NumBaseSpecs = Record[Idx++]; 592f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall assert(NumBaseSpecs == E->path_size()); 593d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 594cdef2b75aa60cde1ca00e0aa3f89139ac89c6ae4Anders Carlsson E->setCastKind((CastExpr::CastKind)Record[Idx++]); 595f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall CastExpr::path_iterator BaseI = E->path_begin(); 5960745d0a648b75bd304045309276c70a755adaafbArgyrios Kyrtzidis while (NumBaseSpecs--) { 5970745d0a648b75bd304045309276c70a755adaafbArgyrios Kyrtzidis CXXBaseSpecifier *BaseSpec = new (*Reader.getContext()) CXXBaseSpecifier; 598c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl *BaseSpec = Reader.ReadCXXBaseSpecifier(F, Record, Idx); 599f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall *BaseI++ = BaseSpec; 6000745d0a648b75bd304045309276c70a755adaafbArgyrios Kyrtzidis } 6014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 60360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBinaryOperator(BinaryOperator *E) { 6044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 605d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 606d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 6074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setOpcode((BinaryOperator::Opcode)Record[Idx++]); 608c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 6094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 61160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCompoundAssignOperator(CompoundAssignOperator *E) { 6124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitBinaryOperator(E); 6134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setComputationLHSType(Reader.GetType(Record[Idx++])); 6144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setComputationResultType(Reader.GetType(Record[Idx++])); 6154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 61760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitConditionalOperator(ConditionalOperator *E) { 6184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 619d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setCond(Reader.ReadSubExpr()); 620d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 621d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 622f9b949fecf339a2c9bd97dd11a272c4878f85ce4Fariborz Jahanian E->setSAVE(Reader.ReadSubExpr()); 623c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setQuestionLoc(ReadSourceLocation(Record, Idx)); 624c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setColonLoc(ReadSourceLocation(Record, Idx)); 6254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 62760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitImplicitCastExpr(ImplicitCastExpr *E) { 6284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitCastExpr(E); 6294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 63160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitExplicitCastExpr(ExplicitCastExpr *E) { 6324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitCastExpr(E); 633c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeInfoAsWritten(GetTypeSourceInfo(Record, Idx)); 6344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 63660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCStyleCastExpr(CStyleCastExpr *E) { 6374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExplicitCastExpr(E); 638c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 639c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 6404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 64260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) { 6434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 644c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 645c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeSourceInfo(GetTypeSourceInfo(Record, Idx)); 646d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setInitializer(Reader.ReadSubExpr()); 6474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setFileScope(Record[Idx++]); 6484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 65060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitExtVectorElementExpr(ExtVectorElementExpr *E) { 6514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 652d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 6534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setAccessor(Reader.GetIdentifierInfo(Record, Idx)); 654c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAccessorLoc(ReadSourceLocation(Record, Idx)); 6554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 65760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitInitListExpr(InitListExpr *E) { 6584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 6594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumInits = Record[Idx++]; 660709210feee317b8d6690dd1d15c2b74cfe55e261Ted Kremenek E->reserveInits(*Reader.getContext(), NumInits); 6614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0; I != NumInits; ++I) 662d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->updateInit(*Reader.getContext(), I, Reader.ReadSubExpr()); 663d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSyntacticForm(cast_or_null<InitListExpr>(Reader.ReadSubStmt())); 664c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLBraceLoc(ReadSourceLocation(Record, Idx)); 665c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRBraceLoc(ReadSourceLocation(Record, Idx)); 6664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setInitializedFieldInUnion( 6674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner cast_or_null<FieldDecl>(Reader.GetDecl(Record[Idx++]))); 6684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->sawArrayRangeDesignator(Record[Idx++]); 6694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 67160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDesignatedInitExpr(DesignatedInitExpr *E) { 6724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner typedef DesignatedInitExpr::Designator Designator; 6734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 6754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumSubExprs = Record[Idx++]; 6764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(NumSubExprs == E->getNumSubExprs() && "Wrong number of subexprs"); 6774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0; I != NumSubExprs; ++I) 678d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(I, Reader.ReadSubExpr()); 679c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setEqualOrColonLoc(ReadSourceLocation(Record, Idx)); 6804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setGNUSyntax(Record[Idx++]); 6814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner llvm::SmallVector<Designator, 4> Designators; 6834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner while (Idx < Record.size()) { 6848538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl switch ((DesignatorTypes)Record[Idx++]) { 6858538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_FIELD_DECL: { 6864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner FieldDecl *Field = cast<FieldDecl>(Reader.GetDecl(Record[Idx++])); 6871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation DotLoc 688c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation FieldLoc 690c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6911eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump Designators.push_back(Designator(Field->getIdentifier(), DotLoc, 6924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner FieldLoc)); 6934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.back().setField(Field); 6944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 6954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 6964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6978538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_FIELD_NAME: { 6984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner const IdentifierInfo *Name = Reader.GetIdentifierInfo(Record, Idx); 6991eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation DotLoc 700c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation FieldLoc 702c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.push_back(Designator(Name, DotLoc, FieldLoc)); 7044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 7054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 7061eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 7078538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_ARRAY: { 7084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Index = Record[Idx++]; 7094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation LBracketLoc 710c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation RBracketLoc 712c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.push_back(Designator(Index, LBracketLoc, RBracketLoc)); 7144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 7154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 7164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 7178538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_ARRAY_RANGE: { 7184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Index = Record[Idx++]; 7194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation LBracketLoc 720c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation EllipsisLoc 722c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation RBracketLoc 724c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 7254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.push_back(Designator(Index, LBracketLoc, EllipsisLoc, 7264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner RBracketLoc)); 7274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 7284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 7294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 7304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 731319d57f21600dd2c4d52ccc27bd12ce260b174e7Douglas Gregor E->setDesignators(*Reader.getContext(), 732319d57f21600dd2c4d52ccc27bd12ce260b174e7Douglas Gregor Designators.data(), Designators.size()); 7334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 73560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitImplicitValueInitExpr(ImplicitValueInitExpr *E) { 7364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 7374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 73960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitVAArgExpr(VAArgExpr *E) { 7404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 741d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 742c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setWrittenTypeInfo(GetTypeSourceInfo(Record, Idx)); 743c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setBuiltinLoc(ReadSourceLocation(Record, Idx)); 744c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 7454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 74760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitAddrLabelExpr(AddrLabelExpr *E) { 7484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 749c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAmpAmpLoc(ReadSourceLocation(Record, Idx)); 750c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLabelLoc(ReadSourceLocation(Record, Idx)); 7514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Reader.SetLabelOf(E, Record[Idx++]); 7524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 75460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitStmtExpr(StmtExpr *E) { 7554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 756c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 757c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 758d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubStmt(cast_or_null<CompoundStmt>(Reader.ReadSubStmt())); 7594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 76160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitChooseExpr(ChooseExpr *E) { 7624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 763d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setCond(Reader.ReadSubExpr()); 764d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 765d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 766c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setBuiltinLoc(ReadSourceLocation(Record, Idx)); 767c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 7684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 77060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitGNUNullExpr(GNUNullExpr *E) { 7714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 772c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTokenLocation(ReadSourceLocation(Record, Idx)); 7734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 77560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitShuffleVectorExpr(ShuffleVectorExpr *E) { 7764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 777919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis llvm::SmallVector<Expr *, 16> Exprs; 7784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumExprs = Record[Idx++]; 779919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis while (NumExprs--) 780d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Exprs.push_back(Reader.ReadSubExpr()); 781919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis E->setExprs(*Reader.getContext(), Exprs.data(), Exprs.size()); 782c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setBuiltinLoc(ReadSourceLocation(Record, Idx)); 783c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 7844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 78660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBlockExpr(BlockExpr *E) { 7874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 7884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setBlockDecl(cast_or_null<BlockDecl>(Reader.GetDecl(Record[Idx++]))); 7894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setHasBlockDeclRefExprs(Record[Idx++]); 7904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 79260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBlockDeclRefExpr(BlockDeclRefExpr *E) { 7934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 7944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setDecl(cast<ValueDecl>(Reader.GetDecl(Record[Idx++]))); 795c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 7964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setByRef(Record[Idx++]); 7979b0b57c6f9996bfdb67248f6942dd23acfa36167Fariborz Jahanian E->setConstQualAdded(Record[Idx++]); 798d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setCopyConstructorExpr(Reader.ReadSubExpr()); 7994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 8014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner//===----------------------------------------------------------------------===// 8024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// Objective-C Expressions and Statements 8034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 80460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCStringLiteral(ObjCStringLiteral *E) { 8054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 806d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setString(cast<StringLiteral>(Reader.ReadSubStmt())); 807c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 8084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 81060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCEncodeExpr(ObjCEncodeExpr *E) { 8114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 812c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setEncodedTypeSourceInfo(GetTypeSourceInfo(Record, Idx)); 813c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 814c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 8154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 81760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCSelectorExpr(ObjCSelectorExpr *E) { 8184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 8194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setSelector(Reader.GetSelector(Record, Idx)); 820c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 821c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 8224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 82460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCProtocolExpr(ObjCProtocolExpr *E) { 8254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 8264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setProtocol(cast<ObjCProtocolDecl>(Reader.GetDecl(Record[Idx++]))); 827c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 828c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 8294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 83160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) { 8324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 8334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setDecl(cast<ObjCIvarDecl>(Reader.GetDecl(Record[Idx++]))); 834c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 835d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 8364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setIsArrow(Record[Idx++]); 8374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setIsFreeIvar(Record[Idx++]); 8384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 84060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) { 8414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 84212f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall bool Implicit = Record[Idx++] != 0; 84312f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall if (Implicit) { 84412f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall ObjCMethodDecl *Getter = 84512f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall cast<ObjCMethodDecl>(Reader.GetDecl(Record[Idx++])); 84612f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall ObjCMethodDecl *Setter = 84712f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall cast<ObjCMethodDecl>(Reader.GetDecl(Record[Idx++])); 84812f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setImplicitProperty(Getter, Setter); 84912f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall } else { 85012f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setExplicitProperty( 85112f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall cast<ObjCPropertyDecl>(Reader.GetDecl(Record[Idx++]))); 8528ac2d449820fd0df00fcbde5bf82165c1f49854dFariborz Jahanian } 853c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 85412f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setReceiverLocation(ReadSourceLocation(Record, Idx)); 85512f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall switch (Record[Idx++]) { 85612f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall case 0: 85712f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setBase(Reader.ReadSubExpr()); 85812f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall break; 85912f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall case 1: 86012f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setSuperReceiver(Reader.GetType(Record[Idx++])); 86112f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall break; 86212f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall case 2: 86312f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setClassReceiver( 86412f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall cast<ObjCInterfaceDecl>(Reader.GetDecl(Record[Idx++]))); 86512f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall break; 86612f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall } 8674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 86960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCMessageExpr(ObjCMessageExpr *E) { 8704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 87104badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor assert(Record[Idx] == E->getNumArgs()); 87204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor ++Idx; 87304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor ObjCMessageExpr::ReceiverKind Kind 87404badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor = static_cast<ObjCMessageExpr::ReceiverKind>(Record[Idx++]); 87504badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor switch (Kind) { 87604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::Instance: 877d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setInstanceReceiver(Reader.ReadSubExpr()); 87804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 87904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 88004badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::Class: 881c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setClassReceiver(GetTypeSourceInfo(Record, Idx)); 88204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 88304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 88404badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::SuperClass: 88504badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::SuperInstance: { 88604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor QualType T = Reader.GetType(Record[Idx++]); 887c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation SuperLoc = ReadSourceLocation(Record, Idx); 88804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor E->setSuper(SuperLoc, T, Kind == ObjCMessageExpr::SuperInstance); 88904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 89004badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor } 8914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 8924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 89304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor assert(Kind == E->getReceiverKind()); 89404badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 89504badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor if (Record[Idx++]) 89604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor E->setMethodDecl(cast_or_null<ObjCMethodDecl>(Reader.GetDecl(Record[Idx++]))); 89704badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor else 89804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor E->setSelector(Reader.GetSelector(Record, Idx)); 89904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 900f40f0d5a382395e0301d7dcbeaa2b8e90b8973b1Argyrios Kyrtzidis E->LBracLoc = ReadSourceLocation(Record, Idx); 901f40f0d5a382395e0301d7dcbeaa2b8e90b8973b1Argyrios Kyrtzidis E->RBracLoc = ReadSourceLocation(Record, Idx); 902f40f0d5a382395e0301d7dcbeaa2b8e90b8973b1Argyrios Kyrtzidis E->SelectorLoc = ReadSourceLocation(Record, Idx); 90304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 9044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 905d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 9064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 90860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCForCollectionStmt(ObjCForCollectionStmt *S) { 9094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 910d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setElement(Reader.ReadSubStmt()); 911d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCollection(Reader.ReadSubExpr()); 912d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 913c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setForLoc(ReadSourceLocation(Record, Idx)); 914c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 9154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 91760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtCatchStmt(ObjCAtCatchStmt *S) { 9184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 919d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCatchBody(Reader.ReadSubStmt()); 920c00d8e18ad3d903acfeb5d05163ce90713066a3fDouglas Gregor S->setCatchParamDecl(cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 921c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtCatchLoc(ReadSourceLocation(Record, Idx)); 922c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 9234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 92560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *S) { 9264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 927d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setFinallyBody(Reader.ReadSubStmt()); 928c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtFinallyLoc(ReadSourceLocation(Record, Idx)); 9294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 93160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtTryStmt(ObjCAtTryStmt *S) { 9324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 9338f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor assert(Record[Idx] == S->getNumCatchStmts()); 9348f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor ++Idx; 9358f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor bool HasFinally = Record[Idx++]; 936d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setTryBody(Reader.ReadSubStmt()); 937919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis for (unsigned I = 0, N = S->getNumCatchStmts(); I != N; ++I) 938d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCatchStmt(I, cast_or_null<ObjCAtCatchStmt>(Reader.ReadSubStmt())); 9398f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor 9408f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor if (HasFinally) 941d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setFinallyStmt(Reader.ReadSubStmt()); 942c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtTryLoc(ReadSourceLocation(Record, Idx)); 9434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 94560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *S) { 9464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 947d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSynchExpr(Reader.ReadSubStmt()); 948d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSynchBody(Reader.ReadSubStmt()); 949c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtSynchronizedLoc(ReadSourceLocation(Record, Idx)); 9504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 95260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtThrowStmt(ObjCAtThrowStmt *S) { 9534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 954d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setThrowExpr(Reader.ReadSubStmt()); 955c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setThrowLoc(ReadSourceLocation(Record, Idx)); 9564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 958ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 959ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis// C++ Expressions and Statements 9607cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 9617cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 96260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXCatchStmt(CXXCatchStmt *S) { 9637cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis VisitStmt(S); 964c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->CatchLoc = ReadSourceLocation(Record, Idx); 9657cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->ExceptionDecl = cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++])); 9667cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->HandlerBlock = Reader.ReadSubStmt(); 9677cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis} 9687cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 96960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXTryStmt(CXXTryStmt *S) { 9707cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis VisitStmt(S); 9717cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis assert(Record[Idx] == S->getNumHandlers() && "NumStmtFields is wrong ?"); 9727cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis ++Idx; 973c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->TryLoc = ReadSourceLocation(Record, Idx); 9747cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->getStmts()[0] = Reader.ReadSubStmt(); 9757cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis for (unsigned i = 0, e = S->getNumHandlers(); i != e; ++i) 9767cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->getStmts()[i + 1] = Reader.ReadSubStmt(); 9777cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis} 978ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis 97960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) { 980919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitCallExpr(E); 981ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis E->setOperator((OverloadedOperatorKind)Record[Idx++]); 982ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis} 983ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis 98460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXConstructExpr(CXXConstructExpr *E) { 98539da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor VisitExpr(E); 9866d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->NumArgs = Record[Idx++]; 9876d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis if (E->NumArgs) 9886d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->Args = new (*Reader.getContext()) Stmt*[E->NumArgs]; 9895e1b7c2f419544a88537f7ff4e32ed744ba7b44eArgyrios Kyrtzidis for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 990d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 99139da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor E->setConstructor(cast<CXXConstructorDecl>(Reader.GetDecl(Record[Idx++]))); 992c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 99339da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor E->setElidable(Record[Idx++]); 99416006c901315fa12a108b4e571f187f4b676e426Douglas Gregor E->setRequiresZeroInitialization(Record[Idx++]); 9953c9034cb7ff1d6c1e4ecd1b44c98f553df013c7cDouglas Gregor E->setConstructionKind((CXXConstructExpr::ConstructionKind)Record[Idx++]); 996428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->ParenRange = ReadSourceRange(Record, Idx); 99739da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor} 9984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 99960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E) { 10006d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis VisitCXXConstructExpr(E); 1001c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Type = GetTypeSourceInfo(Record, Idx); 10026d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis} 10036d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 100460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXNamedCastExpr(CXXNamedCastExpr *E) { 1005919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitExplicitCastExpr(E); 1006c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 1007ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1008ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 100960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXStaticCastExpr(CXXStaticCastExpr *E) { 1010ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1011ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1012ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 101360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXDynamicCastExpr(CXXDynamicCastExpr *E) { 1014ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1015ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1016ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 101760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXReinterpretCastExpr(CXXReinterpretCastExpr *E) { 1018ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1019ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1020ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 102160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXConstCastExpr(CXXConstCastExpr *E) { 1022ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1023ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1024ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 102560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *E) { 1026919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitExplicitCastExpr(E); 1027c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeBeginLoc(ReadSourceLocation(Record, Idx)); 1028c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 1029ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1030ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 103160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E) { 1032eb7f96141f754150a92433286fa385910a22f494Sam Weinig VisitExpr(E); 1033eb7f96141f754150a92433286fa385910a22f494Sam Weinig E->setValue(Record[Idx++]); 1034c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 1035eb7f96141f754150a92433286fa385910a22f494Sam Weinig} 1036eb7f96141f754150a92433286fa385910a22f494Sam Weinig 103760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E) { 1038eb7f96141f754150a92433286fa385910a22f494Sam Weinig VisitExpr(E); 1039c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 1040eb7f96141f754150a92433286fa385910a22f494Sam Weinig} 1041eb7f96141f754150a92433286fa385910a22f494Sam Weinig 104260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXTypeidExpr(CXXTypeidExpr *E) { 104314ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner VisitExpr(E); 1044c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setSourceRange(ReadSourceRange(Record, Idx)); 104514ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner if (E->isTypeOperand()) { // typeid(int) 1046577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl E->setTypeOperandSourceInfo( 1047c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl GetTypeSourceInfo(Record, Idx)); 1048919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis return; 104914ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner } 105014ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 105114ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner // typeid(42+2) 1052d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setExprOperand(Reader.ReadSubExpr()); 105314ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner} 105401b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichetvoid ASTStmtReader::VisitCXXUuidofExpr(CXXUuidofExpr *E) { 105501b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet VisitExpr(E); 1056c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setSourceRange(ReadSourceRange(Record, Idx)); 105701b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet if (E->isTypeOperand()) { // __uuidof(ComType) 105801b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet E->setTypeOperandSourceInfo( 1059c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl GetTypeSourceInfo(Record, Idx)); 106001b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet return; 106101b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet } 106201b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet 106301b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet // __uuidof(expr) 106401b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet E->setExprOperand(Reader.ReadSubExpr()); 106501b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet} 106614ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 106760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXThisExpr(CXXThisExpr *E) { 10682fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner VisitExpr(E); 1069c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 10702fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner E->setImplicit(Record[Idx++]); 10712fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner} 10722fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner 107360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXThrowExpr(CXXThrowExpr *E) { 10742fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner VisitExpr(E); 1075c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setThrowLoc(ReadSourceLocation(Record, Idx)); 1076d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 10772fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner} 107814ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 107960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) { 1080030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner VisitExpr(E); 10818a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis 10828a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis assert(Record[Idx] == E->Param.getInt() && "We messed up at creation ?"); 10838a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis ++Idx; // HasOtherExprStored and SubExpr was handled during creation. 10848a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis E->Param.setPointer(cast<ParmVarDecl>(Reader.GetDecl(Record[Idx++]))); 1085c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Loc = ReadSourceLocation(Record, Idx); 1086d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner} 1087d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 108860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E) { 1089d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner VisitExpr(E); 1090d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner E->setTemporary(Reader.ReadCXXTemporary(Record, Idx)); 1091d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 1092d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner} 1093d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 109460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E) { 10955921863d8f24084797863b5df37842113bac4352Chris Lattner VisitExpr(E); 1096c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->TypeInfo = GetTypeSourceInfo(Record, Idx); 1097c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->RParenLoc = ReadSourceLocation(Record, Idx); 10985921863d8f24084797863b5df37842113bac4352Chris Lattner} 10995921863d8f24084797863b5df37842113bac4352Chris Lattner 110060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXNewExpr(CXXNewExpr *E) { 11015921863d8f24084797863b5df37842113bac4352Chris Lattner VisitExpr(E); 11025921863d8f24084797863b5df37842113bac4352Chris Lattner E->setGlobalNew(Record[Idx++]); 11035921863d8f24084797863b5df37842113bac4352Chris Lattner E->setHasInitializer(Record[Idx++]); 11045921863d8f24084797863b5df37842113bac4352Chris Lattner bool isArray = Record[Idx++]; 11055921863d8f24084797863b5df37842113bac4352Chris Lattner unsigned NumPlacementArgs = Record[Idx++]; 11065921863d8f24084797863b5df37842113bac4352Chris Lattner unsigned NumCtorArgs = Record[Idx++]; 11075921863d8f24084797863b5df37842113bac4352Chris Lattner E->setOperatorNew(cast_or_null<FunctionDecl>(Reader.GetDecl(Record[Idx++]))); 11085921863d8f24084797863b5df37842113bac4352Chris Lattner E->setOperatorDelete( 11095921863d8f24084797863b5df37842113bac4352Chris Lattner cast_or_null<FunctionDecl>(Reader.GetDecl(Record[Idx++]))); 11105921863d8f24084797863b5df37842113bac4352Chris Lattner E->setConstructor( 11115921863d8f24084797863b5df37842113bac4352Chris Lattner cast_or_null<CXXConstructorDecl>(Reader.GetDecl(Record[Idx++]))); 1112c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->AllocatedTypeInfo = GetTypeSourceInfo(Record, Idx); 11134bd40318cbea15310a37343db46de96c4fcc15e6Douglas Gregor SourceRange TypeIdParens; 1114c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl TypeIdParens.setBegin(ReadSourceLocation(Record, Idx)); 1115c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl TypeIdParens.setEnd(ReadSourceLocation(Record, Idx)); 11164bd40318cbea15310a37343db46de96c4fcc15e6Douglas Gregor E->TypeIdParens = TypeIdParens; 1117428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->StartLoc = ReadSourceLocation(Record, Idx); 1118428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->EndLoc = ReadSourceLocation(Record, Idx); 1119428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->ConstructorLParen = ReadSourceLocation(Record, Idx); 1120428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->ConstructorRParen = ReadSourceLocation(Record, Idx); 1121428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth 11225921863d8f24084797863b5df37842113bac4352Chris Lattner E->AllocateArgsArray(*Reader.getContext(), isArray, NumPlacementArgs, 11235921863d8f24084797863b5df37842113bac4352Chris Lattner NumCtorArgs); 11245921863d8f24084797863b5df37842113bac4352Chris Lattner 11255921863d8f24084797863b5df37842113bac4352Chris Lattner // Install all the subexpressions. 11265921863d8f24084797863b5df37842113bac4352Chris Lattner for (CXXNewExpr::raw_arg_iterator I = E->raw_arg_begin(),e = E->raw_arg_end(); 11275921863d8f24084797863b5df37842113bac4352Chris Lattner I != e; ++I) 1128d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis *I = Reader.ReadSubStmt(); 11295921863d8f24084797863b5df37842113bac4352Chris Lattner} 11305921863d8f24084797863b5df37842113bac4352Chris Lattner 113160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXDeleteExpr(CXXDeleteExpr *E) { 113295fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis VisitExpr(E); 1133f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->GlobalDelete = Record[Idx++]; 1134f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->ArrayForm = Record[Idx++]; 11354076dacf1497fb95cb298b9d964fbdbdaf9bde6cArgyrios Kyrtzidis E->ArrayFormAsWritten = Record[Idx++]; 1136f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->OperatorDelete = cast_or_null<FunctionDecl>(Reader.GetDecl(Record[Idx++])); 1137f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->Argument = Reader.ReadSubExpr(); 1138c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Loc = ReadSourceLocation(Record, Idx); 113995fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis} 1140d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 114160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E) { 1142de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis VisitExpr(E); 1143de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 1144d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 1145de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis E->setArrow(Record[Idx++]); 1146c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 1147de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis E->setQualifier(Reader.ReadNestedNameSpecifier(Record, Idx)); 1148c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setQualifierRange(ReadSourceRange(Record, Idx)); 1149c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setScopeTypeInfo(GetTypeSourceInfo(Record, Idx)); 1150c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setColonColonLoc(ReadSourceLocation(Record, Idx)); 1151c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTildeLoc(ReadSourceLocation(Record, Idx)); 1152de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 1153de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis IdentifierInfo *II = Reader.GetIdentifierInfo(Record, Idx); 1154de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis if (II) 1155c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setDestroyedType(II, ReadSourceLocation(Record, Idx)); 1156de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis else 1157c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setDestroyedType(GetTypeSourceInfo(Record, Idx)); 1158de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis} 1159de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 11604765fa05b5652fcc4356371c2f481d0ea9a1b007John McCallvoid ASTStmtReader::VisitExprWithCleanups(ExprWithCleanups *E) { 1161d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner VisitExpr(E); 1162d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner unsigned NumTemps = Record[Idx++]; 1163d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner if (NumTemps) { 1164d04ed416be7c55bddddab1fa3fd38a0113a6b3daTed Kremenek E->setNumTemporaries(*Reader.getContext(), NumTemps); 1165d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner for (unsigned i = 0; i != NumTemps; ++i) 1166d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner E->setTemporary(i, Reader.ReadCXXTemporary(Record, Idx)); 1167d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner } 1168d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 1169030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner} 1170030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner 1171919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisvoid 117260adf4acf40b72227740bf966fb87eebddff3f37Sebastian RedlASTStmtReader::VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E){ 11738dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis VisitExpr(E); 11748dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 11758dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis unsigned NumTemplateArgs = Record[Idx++]; 11768dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis assert((NumTemplateArgs != 0) == E->hasExplicitTemplateArgs() && 11778dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis "Read wrong record during creation ?"); 117836c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis if (E->hasExplicitTemplateArgs()) 1179096832c5ed5b9106fa177ebc148489760c3bc496John McCall ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 1180919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis NumTemplateArgs); 11818dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 1182d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 11838dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setBaseType(Reader.GetType(Record[Idx++])); 11848dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setArrow(Record[Idx++]); 1185c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 11868dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setQualifier(Reader.ReadNestedNameSpecifier(Record, Idx)); 1187c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setQualifierRange(ReadSourceRange(Record, Idx)); 11888dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setFirstQualifierFoundInScope( 11898dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis cast_or_null<NamedDecl>(Reader.GetDecl(Record[Idx++]))); 11904045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameInfo(E->MemberNameInfo, Record, Idx); 11918dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis} 11928dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 1193919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisvoid 119460adf4acf40b72227740bf966fb87eebddff3f37Sebastian RedlASTStmtReader::VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) { 119512dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis VisitExpr(E); 119612dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 119712dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis unsigned NumTemplateArgs = Record[Idx++]; 119812dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis assert((NumTemplateArgs != 0) == E->hasExplicitTemplateArgs() && 119912dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis "Read wrong record during creation ?"); 120012dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis if (E->hasExplicitTemplateArgs()) 1201919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 1202919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis NumTemplateArgs); 120312dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 12044045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameInfo(E->NameInfo, Record, Idx); 1205c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setQualifierRange(ReadSourceRange(Record, Idx)); 120612dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis E->setQualifier(Reader.ReadNestedNameSpecifier(Record, Idx)); 120712dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis} 120812dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 1209919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisvoid 121060adf4acf40b72227740bf966fb87eebddff3f37Sebastian RedlASTStmtReader::VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E) { 12118dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis VisitExpr(E); 12128dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis assert(Record[Idx] == E->arg_size() && "Read wrong record during creation ?"); 12138dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis ++Idx; // NumArgs; 12148dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis for (unsigned I = 0, N = E->arg_size(); I != N; ++I) 1215d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 1216c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Type = GetTypeSourceInfo(Record, Idx); 1217c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 1218c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 12198dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis} 12208dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 122160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitOverloadExpr(OverloadExpr *E) { 1222a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis VisitExpr(E); 1223a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 1224a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis unsigned NumTemplateArgs = Record[Idx++]; 1225a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis assert((NumTemplateArgs != 0) == E->hasExplicitTemplateArgs() && 1226a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis "Read wrong record during creation ?"); 1227919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis if (E->hasExplicitTemplateArgs()) 1228919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 1229919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis NumTemplateArgs); 1230a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 1231a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis unsigned NumDecls = Record[Idx++]; 1232a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis UnresolvedSet<8> Decls; 1233a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis for (unsigned i = 0; i != NumDecls; ++i) { 1234a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis NamedDecl *D = cast<NamedDecl>(Reader.GetDecl(Record[Idx++])); 1235a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis AccessSpecifier AS = (AccessSpecifier)Record[Idx++]; 1236a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis Decls.addDecl(D, AS); 1237a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis } 1238a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->initializeResults(*Reader.getContext(), Decls.begin(), Decls.end()); 1239a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 12404045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameInfo(E->NameInfo, Record, Idx); 1241a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setQualifier(Reader.ReadNestedNameSpecifier(Record, Idx)); 1242c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setQualifierRange(ReadSourceRange(Record, Idx)); 1243a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis} 1244a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 124560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnresolvedMemberExpr(UnresolvedMemberExpr *E) { 1246919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitOverloadExpr(E); 1247a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setArrow(Record[Idx++]); 1248a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setHasUnresolvedUsing(Record[Idx++]); 1249d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 1250a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setBaseType(Reader.GetType(Record[Idx++])); 1251c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 1252a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis} 1253a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 125460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E) { 1255919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitOverloadExpr(E); 1256bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis E->setRequiresADL(Record[Idx++]); 1257bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis E->setOverloaded(Record[Idx++]); 1258bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis E->setNamingClass(cast_or_null<CXXRecordDecl>(Reader.GetDecl(Record[Idx++]))); 1259bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis} 1260bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis 126160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnaryTypeTraitExpr(UnaryTypeTraitExpr *E) { 12626d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis VisitExpr(E); 12636d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->UTT = (UnaryTypeTrait)Record[Idx++]; 12640dfd848fa4c9664852ba8c929a8bd3fce93ddca2Sebastian Redl E->Value = (bool)Record[Idx++]; 1265c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceRange Range = ReadSourceRange(Record, Idx); 12666d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->Loc = Range.getBegin(); 12676d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->RParen = Range.getEnd(); 1268c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->QueriedType = GetTypeSourceInfo(Record, Idx); 12696d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis} 12706d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 12716ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichetvoid ASTStmtReader::VisitBinaryTypeTraitExpr(BinaryTypeTraitExpr *E) { 12726ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet VisitExpr(E); 12736ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->BTT = (BinaryTypeTrait)Record[Idx++]; 12746ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->Value = (bool)Record[Idx++]; 12756ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet SourceRange Range = ReadSourceRange(Record, Idx); 12766ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->Loc = Range.getBegin(); 12776ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->RParen = Range.getEnd(); 12786ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->LhsType = GetTypeSourceInfo(Record, Idx); 12796ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->RhsType = GetTypeSourceInfo(Record, Idx); 12806ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet} 12816ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet 12826b219d082434394c1ac401390ec1d1967727815aSebastian Redlvoid ASTStmtReader::VisitCXXNoexceptExpr(CXXNoexceptExpr *E) { 12836b219d082434394c1ac401390ec1d1967727815aSebastian Redl VisitExpr(E); 12845221d8f2da008689f7ff9476e6522bb2b63ec1a3Sebastian Redl E->Value = (bool)Record[Idx++]; 1285c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Range = ReadSourceRange(Record, Idx); 12865221d8f2da008689f7ff9476e6522bb2b63ec1a3Sebastian Redl E->Operand = Reader.ReadSubExpr(); 12876b219d082434394c1ac401390ec1d1967727815aSebastian Redl} 12886b219d082434394c1ac401390ec1d1967727815aSebastian Redl 12897cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCallvoid ASTStmtReader::VisitOpaqueValueExpr(OpaqueValueExpr *E) { 12907cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall VisitExpr(E); 12917cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall} 12927cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall 1293c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian RedlStmt *ASTReader::ReadStmt(PerFileData &F) { 1294919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis switch (ReadingKind) { 1295919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis case Read_Decl: 1296919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis case Read_Type: 1297c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return ReadStmtFromStream(F); 1298919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis case Read_Stmt: 1299d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis return ReadSubStmt(); 1300919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis } 1301919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1302919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis llvm_unreachable("ReadingKind not set ?"); 1303919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis return 0; 1304919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis} 1305919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1306c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian RedlExpr *ASTReader::ReadExpr(PerFileData &F) { 1307c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return cast_or_null<Expr>(ReadStmt(F)); 1308919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis} 1309030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner 1310c43b54cbc10654ed59de797898042e1a05265246Sebastian RedlExpr *ASTReader::ReadSubExpr() { 1311d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis return cast_or_null<Expr>(ReadSubStmt()); 1312d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis} 1313d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis 131452e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// Within the bitstream, expressions are stored in Reverse Polish 131552e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// Notation, with each of the subexpressions preceding the 1316919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis// expression they are stored in. Subexpressions are stored from last to first. 1317919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis// To evaluate expressions, we continue reading expressions and placing them on 1318919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis// the stack, with expressions having operands removing those operands from the 131952e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// stack. Evaluation terminates when we see a STMT_STOP record, and 132052e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// the single remaining expression on the stack is our result. 1321c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian RedlStmt *ASTReader::ReadStmtFromStream(PerFileData &F) { 1322919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1323919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis ReadingKindTracker ReadingKind(Read_Stmt, *this); 1324c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl llvm::BitstreamCursor &Cursor = F.DeclsCursor; 1325c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl 1326919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#ifndef NDEBUG 1327919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis unsigned PrevNumStmts = StmtStack.size(); 1328919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#endif 1329919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 13304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner RecordData Record; 13314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Idx; 1332c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ASTStmtReader Reader(*this, F, Cursor, Record, Idx); 13334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Stmt::EmptyShell Empty; 13344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner while (true) { 133652e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner unsigned Code = Cursor.ReadCode(); 13374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Code == llvm::bitc::END_BLOCK) { 133852e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner if (Cursor.ReadBlockEnd()) { 13393c7f4134603d04b44f997b43c0a9def270f25386Sebastian Redl Error("error at end of block in AST file"); 13404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner return 0; 13414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 13424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 13444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Code == llvm::bitc::ENTER_SUBBLOCK) { 13464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // No known subblocks, always skip them. 134752e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner Cursor.ReadSubBlockID(); 134852e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner if (Cursor.SkipBlock()) { 13493c7f4134603d04b44f997b43c0a9def270f25386Sebastian Redl Error("malformed block record in AST file"); 13504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner return 0; 13514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 13524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner continue; 13534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 13544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Code == llvm::bitc::DEFINE_ABBREV) { 135652e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner Cursor.ReadAbbrevRecord(); 13574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner continue; 13584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 13594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Stmt *S = 0; 13614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Idx = 0; 13624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Record.clear(); 13634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner bool Finished = false; 13648538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl switch ((StmtCode)Cursor.ReadRecord(Code, Record)) { 13658538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_STOP: 13664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Finished = true; 13674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13698538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_NULL_PTR: 13701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump S = 0; 13714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13738538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_NULL: 13744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) NullStmt(Empty); 13754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13778538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_COMPOUND: 13784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CompoundStmt(Empty); 13794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13818538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CASE: 13824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CaseStmt(Empty); 13834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13858538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_DEFAULT: 13864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) DefaultStmt(Empty); 13874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13898538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_LABEL: 13904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) LabelStmt(Empty); 13914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13938538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_IF: 13944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) IfStmt(Empty); 13954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13978538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_SWITCH: 13984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) SwitchStmt(Empty); 13994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14018538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_WHILE: 14024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) WhileStmt(Empty); 14034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14058538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_DO: 14064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) DoStmt(Empty); 14074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 14098538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_FOR: 14104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ForStmt(Empty); 14114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14138538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_GOTO: 14144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) GotoStmt(Empty); 14154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14161eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 14178538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_INDIRECT_GOTO: 14184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) IndirectGotoStmt(Empty); 14194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14218538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CONTINUE: 14224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ContinueStmt(Empty); 14234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14258538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_BREAK: 14264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BreakStmt(Empty); 14274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14298538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_RETURN: 14304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ReturnStmt(Empty); 14314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14338538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_DECL: 14344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) DeclStmt(Empty); 14354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14378538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_ASM: 14384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) AsmStmt(Empty); 14394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14418538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_PREDEFINED: 14424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) PredefinedExpr(Empty); 14434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 14458538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_DECL_REF: 1446663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis S = DeclRefExpr::CreateEmpty(*Context, 144760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*HasQualifier=*/Record[ASTStmtReader::NumExprFields], 144860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields + 1]); 14494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 14518538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_INTEGER_LITERAL: 14529996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis S = IntegerLiteral::Create(*Context, Empty); 14534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 14558538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_FLOATING_LITERAL: 14569996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis S = FloatingLiteral::Create(*Context, Empty); 14574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 14598538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_IMAGINARY_LITERAL: 14604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ImaginaryLiteral(Empty); 14614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14638538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_STRING_LITERAL: 14641eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump S = StringLiteral::CreateEmpty(*Context, 146560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields + 1]); 14664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14688538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CHARACTER_LITERAL: 14694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CharacterLiteral(Empty); 14704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14728538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_PAREN: 14734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ParenExpr(Empty); 14744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14768538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_PAREN_LIST: 147737bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis S = new (Context) ParenListExpr(Empty); 147837bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis break; 147937bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis 14808538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_UNARY_OPERATOR: 14814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) UnaryOperator(Empty); 14824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14848538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OFFSETOF: 14858ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor S = OffsetOfExpr::CreateEmpty(*Context, 148660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields], 148760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields + 1]); 14888ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 14898ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 14908538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_SIZEOF_ALIGN_OF: 14914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) SizeOfAlignOfExpr(Empty); 14924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14948538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_ARRAY_SUBSCRIPT: 14954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ArraySubscriptExpr(Empty); 14964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14988538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CALL: 1499ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis S = new (Context) CallExpr(*Context, Stmt::CallExprClass, Empty); 15004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15028538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_MEMBER: { 1503663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // We load everything here and fully initialize it at creation. 1504663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // That way we can use MemberExpr::Create and don't have to duplicate its 1505663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // logic with a MemberExpr::CreateEmpty. 1506663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1507663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis assert(Idx == 0); 1508663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis NestedNameSpecifier *NNS = 0; 1509663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis SourceRange QualifierRange; 1510663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis if (Record[Idx++]) { // HasQualifier. 1511663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis NNS = ReadNestedNameSpecifier(Record, Idx); 1512c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl QualifierRange = ReadSourceRange(F, Record, Idx); 1513663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 1514663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1515663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis TemplateArgumentListInfo ArgInfo; 1516663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis unsigned NumTemplateArgs = Record[Idx++]; 1517663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis if (NumTemplateArgs) { 1518c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.setLAngleLoc(ReadSourceLocation(F, Record, Idx)); 1519c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.setRAngleLoc(ReadSourceLocation(F, Record, Idx)); 1520663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis for (unsigned i = 0; i != NumTemplateArgs; ++i) 1521c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.addArgument(ReadTemplateArgumentLoc(F, Record, Idx)); 1522663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 1523663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1524663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis NamedDecl *FoundD = cast_or_null<NamedDecl>(GetDecl(Record[Idx++])); 1525663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis AccessSpecifier AS = (AccessSpecifier)Record[Idx++]; 1526663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis DeclAccessPair FoundDecl = DeclAccessPair::make(FoundD, AS); 1527663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1528663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis QualType T = GetType(Record[Idx++]); 1529f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall ExprValueKind VK = static_cast<ExprValueKind>(Record[Idx++]); 1530f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall ExprObjectKind OK = static_cast<ExprObjectKind>(Record[Idx++]); 1531663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis Expr *Base = ReadSubExpr(); 1532663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis ValueDecl *MemberD = cast<ValueDecl>(GetDecl(Record[Idx++])); 1533c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation MemberLoc = ReadSourceLocation(F, Record, Idx); 15342577743c5650c646fb705df01403707e94f2df04Abramo Bagnara DeclarationNameInfo MemberNameInfo(MemberD->getDeclName(), MemberLoc); 1535663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis bool IsArrow = Record[Idx++]; 1536663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1537663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis S = MemberExpr::Create(*Context, Base, IsArrow, NNS, QualifierRange, 15382577743c5650c646fb705df01403707e94f2df04Abramo Bagnara MemberD, FoundDecl, MemberNameInfo, 1539f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall NumTemplateArgs ? &ArgInfo : 0, T, VK, OK); 15404045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameLoc(F, cast<MemberExpr>(S)->MemberDNLoc, 15414045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis MemberD->getDeclName(), Record, Idx); 15424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 1543663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 15444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15458538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_BINARY_OPERATOR: 15464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BinaryOperator(Empty); 15474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15498538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_COMPOUND_ASSIGN_OPERATOR: 15504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CompoundAssignOperator(Empty); 15514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15538538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CONDITIONAL_OPERATOR: 15544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ConditionalOperator(Empty); 15554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15578538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_IMPLICIT_CAST: 1558f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = ImplicitCastExpr::CreateEmpty(*Context, 155960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 15604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15628538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CSTYLE_CAST: 1563f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CStyleCastExpr::CreateEmpty(*Context, 156460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 15654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15678538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_COMPOUND_LITERAL: 15684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CompoundLiteralExpr(Empty); 15694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15718538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_EXT_VECTOR_ELEMENT: 15724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ExtVectorElementExpr(Empty); 15734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15758538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_INIT_LIST: 1576709210feee317b8d6690dd1d15c2b74cfe55e261Ted Kremenek S = new (Context) InitListExpr(*getContext(), Empty); 15774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15798538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_DESIGNATED_INIT: 1580d1d64a027554b635d644957ef071ec04ea1f7063Chris Lattner S = DesignatedInitExpr::CreateEmpty(*Context, 158160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields] - 1); 15821eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15858538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_IMPLICIT_VALUE_INIT: 15864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ImplicitValueInitExpr(Empty); 15874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15898538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_VA_ARG: 15904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) VAArgExpr(Empty); 15914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15938538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_ADDR_LABEL: 15944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) AddrLabelExpr(Empty); 15954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15978538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_STMT: 15984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) StmtExpr(Empty); 15994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16018538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CHOOSE: 16024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ChooseExpr(Empty); 16034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16058538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_GNU_NULL: 16064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) GNUNullExpr(Empty); 16074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16098538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_SHUFFLE_VECTOR: 16104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ShuffleVectorExpr(Empty); 16114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16121eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 16138538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_BLOCK: 16144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BlockExpr(Empty); 16154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16178538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_BLOCK_DECL_REF: 16184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BlockDeclRefExpr(Empty); 16194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 16218538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_STRING_LITERAL: 16224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCStringLiteral(Empty); 16234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16248538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_ENCODE: 16254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCEncodeExpr(Empty); 16264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16278538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_SELECTOR_EXPR: 16284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCSelectorExpr(Empty); 16294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16308538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_PROTOCOL_EXPR: 16314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCProtocolExpr(Empty); 16324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16338538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_IVAR_REF_EXPR: 16344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCIvarRefExpr(Empty); 16354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16368538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_PROPERTY_REF_EXPR: 16374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCPropertyRefExpr(Empty); 16384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16398538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_KVC_REF_EXPR: 164012f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall llvm_unreachable("mismatching AST file"); 16414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16428538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_MESSAGE_EXPR: 164304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor S = ObjCMessageExpr::CreateEmpty(*Context, 164460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields]); 16454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16468538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_ISA: 1647f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff S = new (Context) ObjCIsaExpr(Empty); 1648f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff break; 16498538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_FOR_COLLECTION: 16504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCForCollectionStmt(Empty); 16514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16528538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_CATCH: 16534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtCatchStmt(Empty); 16544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16558538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_FINALLY: 16564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtFinallyStmt(Empty); 16574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16588538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_AT_TRY: 16598f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor S = ObjCAtTryStmt::CreateEmpty(*Context, 166060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumStmtFields], 166160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumStmtFields + 1]); 16624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16638538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_AT_SYNCHRONIZED: 16644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtSynchronizedStmt(Empty); 16654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16668538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_AT_THROW: 16674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtThrowStmt(Empty); 16684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16691eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 16708538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CXX_CATCH: 16717cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S = new (Context) CXXCatchStmt(Empty); 16727cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis break; 16737cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 16748538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CXX_TRY: 16757cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S = CXXTryStmt::Create(*Context, Empty, 167660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumHandlers=*/Record[ASTStmtReader::NumStmtFields]); 16777cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis break; 16787cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 16798538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_OPERATOR_CALL: 1680ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis S = new (Context) CXXOperatorCallExpr(*Context, Empty); 1681ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis break; 16821817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner 16838538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_MEMBER_CALL: 16841817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner S = new (Context) CXXMemberCallExpr(*Context, Empty); 16851817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner break; 168639da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor 16878538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_CONSTRUCT: 16886d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis S = new (Context) CXXConstructExpr(Empty); 16896d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis break; 16906d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 16918538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_TEMPORARY_OBJECT: 16926d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis S = new (Context) CXXTemporaryObjectExpr(Empty); 169339da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor break; 1694ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 16958538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_STATIC_CAST: 1696f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXStaticCastExpr::CreateEmpty(*Context, 169760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1698ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1699ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 17008538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DYNAMIC_CAST: 1701f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXDynamicCastExpr::CreateEmpty(*Context, 170260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1703ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1704ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 17058538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_REINTERPRET_CAST: 1706f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXReinterpretCastExpr::CreateEmpty(*Context, 170760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1708ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1709ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 17108538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_CONST_CAST: 1711f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXConstCastExpr::CreateEmpty(*Context); 1712ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1713ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 17148538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_FUNCTIONAL_CAST: 1715f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXFunctionalCastExpr::CreateEmpty(*Context, 171660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1717ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1718ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 17198538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_BOOL_LITERAL: 1720eb7f96141f754150a92433286fa385910a22f494Sam Weinig S = new (Context) CXXBoolLiteralExpr(Empty); 1721eb7f96141f754150a92433286fa385910a22f494Sam Weinig break; 1722ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 17238538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_NULL_PTR_LITERAL: 1724eb7f96141f754150a92433286fa385910a22f494Sam Weinig S = new (Context) CXXNullPtrLiteralExpr(Empty); 1725eb7f96141f754150a92433286fa385910a22f494Sam Weinig break; 17268538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_TYPEID_EXPR: 172714ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner S = new (Context) CXXTypeidExpr(Empty, true); 172814ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner break; 17298538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_TYPEID_TYPE: 173014ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner S = new (Context) CXXTypeidExpr(Empty, false); 173114ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner break; 173201b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet case EXPR_CXX_UUIDOF_EXPR: 173301b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet S = new (Context) CXXUuidofExpr(Empty, true); 173401b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet break; 173501b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet case EXPR_CXX_UUIDOF_TYPE: 173601b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet S = new (Context) CXXUuidofExpr(Empty, false); 173701b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet break; 17388538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_THIS: 17392fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner S = new (Context) CXXThisExpr(Empty); 17402fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner break; 17418538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_THROW: 17422fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner S = new (Context) CXXThrowExpr(Empty); 17432fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner break; 17448538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DEFAULT_ARG: { 174560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl bool HasOtherExprStored = Record[ASTStmtReader::NumExprFields]; 17468a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis if (HasOtherExprStored) { 17478a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis Expr *SubExpr = ReadSubExpr(); 17488a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis S = CXXDefaultArgExpr::Create(*Context, SourceLocation(), 0, SubExpr); 17498a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis } else 17508a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis S = new (Context) CXXDefaultArgExpr(Empty); 1751030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner break; 17528a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis } 17538538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_BIND_TEMPORARY: 1754d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner S = new (Context) CXXBindTemporaryExpr(Empty); 1755d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner break; 1756e2ca6d4a2f41876930fbd304caa706452d2569d8Douglas Gregor 17578538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_SCALAR_VALUE_INIT: 1758ed8abf18329df67b0abcbb3a10458bd8c1d2a595Douglas Gregor S = new (Context) CXXScalarValueInitExpr(Empty); 17595921863d8f24084797863b5df37842113bac4352Chris Lattner break; 17608538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_NEW: 17615921863d8f24084797863b5df37842113bac4352Chris Lattner S = new (Context) CXXNewExpr(Empty); 17625921863d8f24084797863b5df37842113bac4352Chris Lattner break; 17638538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DELETE: 176495fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis S = new (Context) CXXDeleteExpr(Empty); 176595fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis break; 17668538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_PSEUDO_DESTRUCTOR: 1767de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis S = new (Context) CXXPseudoDestructorExpr(Empty); 1768de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis break; 17695921863d8f24084797863b5df37842113bac4352Chris Lattner 17704765fa05b5652fcc4356371c2f481d0ea9a1b007John McCall case EXPR_EXPR_WITH_CLEANUPS: 17714765fa05b5652fcc4356371c2f481d0ea9a1b007John McCall S = new (Context) ExprWithCleanups(Empty); 1772d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner break; 17738dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 17748538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DEPENDENT_SCOPE_MEMBER: 17758dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis S = CXXDependentScopeMemberExpr::CreateEmpty(*Context, 177660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields]); 17778dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis break; 17788dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 17798538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DEPENDENT_SCOPE_DECL_REF: 178012dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis S = DependentScopeDeclRefExpr::CreateEmpty(*Context, 178160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields]); 178212dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis break; 178312dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 17848538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNRESOLVED_CONSTRUCT: 17858dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis S = CXXUnresolvedConstructExpr::CreateEmpty(*Context, 178660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumArgs=*/Record[ASTStmtReader::NumExprFields]); 1787a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis break; 1788a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 17898538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNRESOLVED_MEMBER: 1790a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis S = UnresolvedMemberExpr::CreateEmpty(*Context, 179160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields]); 17928dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis break; 1793bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis 17948538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNRESOLVED_LOOKUP: 1795bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis S = UnresolvedLookupExpr::CreateEmpty(*Context, 179660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields]); 1797bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis break; 17986d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 17998538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNARY_TYPE_TRAIT: 18006d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis S = new (Context) UnaryTypeTraitExpr(Empty); 18016d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis break; 18026b219d082434394c1ac401390ec1d1967727815aSebastian Redl 1803f187237d916afa97c491ac32fe98be7d335c5b63Francois Pichet case EXPR_BINARY_TYPE_TRAIT: 18046ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet S = new (Context) BinaryTypeTraitExpr(Empty); 18056ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet break; 18066ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet 18076b219d082434394c1ac401390ec1d1967727815aSebastian Redl case EXPR_CXX_NOEXCEPT: 18086b219d082434394c1ac401390ec1d1967727815aSebastian Redl S = new (Context) CXXNoexceptExpr(Empty); 18096b219d082434394c1ac401390ec1d1967727815aSebastian Redl break; 18107cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall 18117cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall case EXPR_OPAQUE_VALUE: 18127cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall S = new (Context) OpaqueValueExpr(Empty); 18137cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall break; 18144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 18156d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 18164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // We hit a STMT_STOP, so we're done with this expression. 18174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Finished) 18184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 18194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 18204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner ++NumStatementsRead; 18214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 1822919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis if (S) 1823919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Reader.Visit(S); 18244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 18254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(Idx == Record.size() && "Invalid deserialization of statement"); 18264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner StmtStack.push_back(S); 18274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 1828919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1829919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#ifndef NDEBUG 1830919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis assert(StmtStack.size() > PrevNumStmts && "Read too many sub stmts!"); 1831919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis assert(StmtStack.size() == PrevNumStmts + 1 && "Extra expressions on stack!"); 1832919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#endif 1833919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1834919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis return StmtStack.pop_back_val(); 18354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1836