ASTReaderStmt.cpp revision 1a18600b85aaa691122983dd8dcf4225cfc9ef68
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; 25577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl llvm::BitstreamCursor &DeclsCursor; 26c43b54cbc10654ed59de797898042e1a05265246Sebastian Redl const ASTReader::RecordData &Record; 274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned &Idx; 284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner public: 3060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl ASTStmtReader(ASTReader &Reader, llvm::BitstreamCursor &Cursor, 31c43b54cbc10654ed59de797898042e1a05265246Sebastian Redl const ASTReader::RecordData &Record, unsigned &Idx) 32577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl : Reader(Reader), DeclsCursor(Cursor), Record(Record), Idx(Idx) { } 334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// \brief The number of record fields required for the Stmt class 354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// itself. 364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner static const unsigned NumStmtFields = 0; 374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// \brief The number of record fields required for the Expr class 394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// itself. 404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner static const unsigned NumExprFields = NumStmtFields + 3; 4136c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis 4236c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis /// \brief Read and initialize a ExplicitTemplateArgumentList structure. 43919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void ReadExplicitTemplateArgumentList(ExplicitTemplateArgumentList &ArgList, 44919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis unsigned NumTemplateArgs); 45919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 46919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitStmt(Stmt *S); 47919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitNullStmt(NullStmt *S); 48919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCompoundStmt(CompoundStmt *S); 49919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitSwitchCase(SwitchCase *S); 50919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCaseStmt(CaseStmt *S); 51919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDefaultStmt(DefaultStmt *S); 52919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitLabelStmt(LabelStmt *S); 53919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitIfStmt(IfStmt *S); 54919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitSwitchStmt(SwitchStmt *S); 55919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitWhileStmt(WhileStmt *S); 56919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDoStmt(DoStmt *S); 57919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitForStmt(ForStmt *S); 58919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitGotoStmt(GotoStmt *S); 59919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitIndirectGotoStmt(IndirectGotoStmt *S); 60919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitContinueStmt(ContinueStmt *S); 61919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitBreakStmt(BreakStmt *S); 62919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitReturnStmt(ReturnStmt *S); 63919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDeclStmt(DeclStmt *S); 64919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitAsmStmt(AsmStmt *S); 65919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitExpr(Expr *E); 66919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitPredefinedExpr(PredefinedExpr *E); 67919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDeclRefExpr(DeclRefExpr *E); 68919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitIntegerLiteral(IntegerLiteral *E); 69919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitFloatingLiteral(FloatingLiteral *E); 70919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitImaginaryLiteral(ImaginaryLiteral *E); 71919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitStringLiteral(StringLiteral *E); 72919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCharacterLiteral(CharacterLiteral *E); 73919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitParenExpr(ParenExpr *E); 7437bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis void VisitParenListExpr(ParenListExpr *E); 75919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitUnaryOperator(UnaryOperator *E); 76919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitOffsetOfExpr(OffsetOfExpr *E); 77919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E); 78919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitArraySubscriptExpr(ArraySubscriptExpr *E); 79919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCallExpr(CallExpr *E); 80919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitMemberExpr(MemberExpr *E); 81919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCastExpr(CastExpr *E); 82919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitBinaryOperator(BinaryOperator *E); 83919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCompoundAssignOperator(CompoundAssignOperator *E); 84919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitConditionalOperator(ConditionalOperator *E); 85919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitImplicitCastExpr(ImplicitCastExpr *E); 86919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitExplicitCastExpr(ExplicitCastExpr *E); 87919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCStyleCastExpr(CStyleCastExpr *E); 88919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCompoundLiteralExpr(CompoundLiteralExpr *E); 89919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitExtVectorElementExpr(ExtVectorElementExpr *E); 90919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitInitListExpr(InitListExpr *E); 91919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDesignatedInitExpr(DesignatedInitExpr *E); 92919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitImplicitValueInitExpr(ImplicitValueInitExpr *E); 93919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitVAArgExpr(VAArgExpr *E); 94919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitAddrLabelExpr(AddrLabelExpr *E); 95919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitStmtExpr(StmtExpr *E); 96919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitTypesCompatibleExpr(TypesCompatibleExpr *E); 97919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitChooseExpr(ChooseExpr *E); 98919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitGNUNullExpr(GNUNullExpr *E); 99919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitShuffleVectorExpr(ShuffleVectorExpr *E); 100919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitBlockExpr(BlockExpr *E); 101919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitBlockDeclRefExpr(BlockDeclRefExpr *E); 102919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCStringLiteral(ObjCStringLiteral *E); 103919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCEncodeExpr(ObjCEncodeExpr *E); 104919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCSelectorExpr(ObjCSelectorExpr *E); 105919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCProtocolExpr(ObjCProtocolExpr *E); 106919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCIvarRefExpr(ObjCIvarRefExpr *E); 107919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E); 108919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCImplicitSetterGetterRefExpr( 10909105f52b1f28cbb1374c27c3c70f5517e2c465dFariborz Jahanian ObjCImplicitSetterGetterRefExpr *E); 110919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCMessageExpr(ObjCMessageExpr *E); 111919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCSuperExpr(ObjCSuperExpr *E); 112919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCIsaExpr(ObjCIsaExpr *E); 113919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 114919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCForCollectionStmt(ObjCForCollectionStmt *); 115919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCAtCatchStmt(ObjCAtCatchStmt *); 116919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *); 117919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCAtTryStmt(ObjCAtTryStmt *); 118919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *); 119919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitObjCAtThrowStmt(ObjCAtThrowStmt *); 120919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1217cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis // C++ Statements 1227cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis void VisitCXXCatchStmt(CXXCatchStmt *S); 1237cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis void VisitCXXTryStmt(CXXTryStmt *S); 1247cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 125919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E); 126919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXConstructExpr(CXXConstructExpr *E); 1276d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis void VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E); 128919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXNamedCastExpr(CXXNamedCastExpr *E); 129919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXStaticCastExpr(CXXStaticCastExpr *E); 130919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXDynamicCastExpr(CXXDynamicCastExpr *E); 131919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXReinterpretCastExpr(CXXReinterpretCastExpr *E); 132919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXConstCastExpr(CXXConstCastExpr *E); 133919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *E); 134919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E); 135919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E); 136919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXTypeidExpr(CXXTypeidExpr *E); 13701b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet void VisitCXXUuidofExpr(CXXUuidofExpr *E); 138919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXThisExpr(CXXThisExpr *E); 139919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXThrowExpr(CXXThrowExpr *E); 140919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E); 141919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E); 142d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 143ed8abf18329df67b0abcbb3a10458bd8c1d2a595Douglas Gregor void VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E); 144919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXNewExpr(CXXNewExpr *E); 145919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXDeleteExpr(CXXDeleteExpr *E); 146919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E); 1475921863d8f24084797863b5df37842113bac4352Chris Lattner 148919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXExprWithTemporaries(CXXExprWithTemporaries *E); 1498dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 150919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E); 151919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E); 152919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E); 153a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 154919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitOverloadExpr(OverloadExpr *E); 155919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitUnresolvedMemberExpr(UnresolvedMemberExpr *E); 156919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E); 1576d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 1586d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis void VisitUnaryTypeTraitExpr(UnaryTypeTraitExpr *E); 1596b219d082434394c1ac401390ec1d1967727815aSebastian Redl void VisitCXXNoexceptExpr(CXXNoexceptExpr *E); 1604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner }; 1614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader:: 16436c76f0bea0d3595a25a5362225c642019cc3176Argyrios KyrtzidisReadExplicitTemplateArgumentList(ExplicitTemplateArgumentList &ArgList, 165919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis unsigned NumTemplateArgs) { 16636c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis TemplateArgumentListInfo ArgInfo; 16736c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis ArgInfo.setLAngleLoc(Reader.ReadSourceLocation(Record, Idx)); 16836c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis ArgInfo.setRAngleLoc(Reader.ReadSourceLocation(Record, Idx)); 16936c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis for (unsigned i = 0; i != NumTemplateArgs; ++i) 170577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl ArgInfo.addArgument( 171577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl Reader.ReadTemplateArgumentLoc(DeclsCursor, Record, Idx)); 17236c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis ArgList.initializeFrom(ArgInfo); 17336c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis} 17436c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis 17560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitStmt(Stmt *S) { 1764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(Idx == NumStmtFields && "Incorrect statement field count"); 1774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitNullStmt(NullStmt *S) { 1804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 1814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setSemiLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 1824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 18460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCompoundStmt(CompoundStmt *S) { 1854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 186919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis llvm::SmallVector<Stmt *, 16> Stmts; 1874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumStmts = Record[Idx++]; 188919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis while (NumStmts--) 189d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Stmts.push_back(Reader.ReadSubStmt()); 190919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis S->setStmts(*Reader.getContext(), Stmts.data(), Stmts.size()); 1914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setLBracLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 1924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setRBracLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 1934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 19560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitSwitchCase(SwitchCase *S) { 1964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 1974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Reader.RecordSwitchCaseID(S, Record[Idx++]); 1984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 20060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCaseStmt(CaseStmt *S) { 2014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitSwitchCase(S); 202d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setLHS(Reader.ReadSubExpr()); 203d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setRHS(Reader.ReadSubExpr()); 204d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSubStmt(Reader.ReadSubStmt()); 2054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setCaseLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 206dbb26db1d426fb6caaaf1b4fa47b46d1947c12c9Douglas Gregor S->setEllipsisLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 207dbb26db1d426fb6caaaf1b4fa47b46d1947c12c9Douglas Gregor S->setColonLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 2084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 21060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDefaultStmt(DefaultStmt *S) { 2114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitSwitchCase(S); 212d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSubStmt(Reader.ReadSubStmt()); 2134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setDefaultLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 214dbb26db1d426fb6caaaf1b4fa47b46d1947c12c9Douglas Gregor S->setColonLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 2154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 21760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitLabelStmt(LabelStmt *S) { 2184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 2194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setID(Reader.GetIdentifierInfo(Record, Idx)); 220d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSubStmt(Reader.ReadSubStmt()); 2214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setIdentLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 222355a9fe26a6dec89680ddf713dd5bc7a671b298aArgyrios Kyrtzidis S->setUsed(Record[Idx++]); 2231a18600b85aaa691122983dd8dcf4225cfc9ef68Argyrios Kyrtzidis S->setUnusedAttribute(Record[Idx++]); 2244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Reader.RecordLabelStmt(S, Record[Idx++]); 2254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 22760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitIfStmt(IfStmt *S) { 2284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 22943dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor S->setConditionVariable(*Reader.getContext(), 23043dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 231d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 232d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setThen(Reader.ReadSubStmt()); 233d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setElse(Reader.ReadSubStmt()); 2344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setIfLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 235d06f6ca61062f85926eb9d409eb3d4f8afcf93c7Douglas Gregor S->setElseLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 2364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 23860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitSwitchStmt(SwitchStmt *S) { 2394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 24043dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor S->setConditionVariable(*Reader.getContext(), 24143dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 242d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 243d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 2444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setSwitchLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 245559fb554602bedb57dbbf3cc14ac8a38264b4547Ted Kremenek if (Record[Idx++]) 246559fb554602bedb57dbbf3cc14ac8a38264b4547Ted Kremenek S->setAllEnumCasesCovered(); 247559fb554602bedb57dbbf3cc14ac8a38264b4547Ted Kremenek 2484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SwitchCase *PrevSC = 0; 2494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned N = Record.size(); Idx != N; ++Idx) { 2504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SwitchCase *SC = Reader.getSwitchCaseWithID(Record[Idx]); 2514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (PrevSC) 2524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner PrevSC->setNextSwitchCase(SC); 2534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner else 2544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setSwitchCaseList(SC); 2551eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 25643d9d9243329b1b75d1a6efdad9f16d6fb386b8eDouglas Gregor // Retain this SwitchCase, since SwitchStmt::addSwitchCase() would 25743d9d9243329b1b75d1a6efdad9f16d6fb386b8eDouglas Gregor // normally retain it (but we aren't calling addSwitchCase). 25843d9d9243329b1b75d1a6efdad9f16d6fb386b8eDouglas Gregor SC->Retain(); 2594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner PrevSC = SC; 2604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 2614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 26360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitWhileStmt(WhileStmt *S) { 2644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 26543dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor S->setConditionVariable(*Reader.getContext(), 26643dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 267d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 268d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 2694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setWhileLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 2704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 27260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDoStmt(DoStmt *S) { 2734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 274d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 275d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 2764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setDoLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 2779f3ca2a7747bd47f14d7693f333103fac29a24d2Douglas Gregor S->setWhileLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 278989135901c750af61ef012b6b0a0368be415bc46Chris Lattner S->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 2794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 28160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitForStmt(ForStmt *S) { 2824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 283d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setInit(Reader.ReadSubStmt()); 284d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 28543dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor S->setConditionVariable(*Reader.getContext(), 28643dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 287d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setInc(Reader.ReadSubExpr()); 288d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 2894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setForLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 2905831c6a1efc47e6a19d82fe3dd25b5b8fef6979dDouglas Gregor S->setLParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 2915831c6a1efc47e6a19d82fe3dd25b5b8fef6979dDouglas Gregor S->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 2924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 29460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitGotoStmt(GotoStmt *S) { 2954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 2964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Reader.SetLabelOf(S, Record[Idx++]); 2974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setGotoLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 2984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setLabelLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 2994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 30160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitIndirectGotoStmt(IndirectGotoStmt *S) { 3024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 3034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setGotoLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 3045f1b9e689fa5c101512aef99225f2afea1673449Douglas Gregor S->setStarLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 305d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setTarget(Reader.ReadSubExpr()); 3064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 30860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitContinueStmt(ContinueStmt *S) { 3094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 3104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setContinueLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 3114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 31360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBreakStmt(BreakStmt *S) { 3144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 3154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setBreakLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 3164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 31860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitReturnStmt(ReturnStmt *S) { 3194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 320d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setRetValue(Reader.ReadSubExpr()); 3214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setReturnLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 3225077c3876beeaed32280af88244e8050078619a8Douglas Gregor S->setNRVOCandidate(cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 3234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 32560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDeclStmt(DeclStmt *S) { 3264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 3274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setStartLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 3284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setEndLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 3294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 3304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Idx + 1 == Record.size()) { 3314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Single declaration 3324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setDeclGroup(DeclGroupRef(Reader.GetDecl(Record[Idx++]))); 3334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } else { 3344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner llvm::SmallVector<Decl *, 16> Decls; 3354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Decls.reserve(Record.size() - Idx); 3364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned N = Record.size(); Idx != N; ++Idx) 3374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Decls.push_back(Reader.GetDecl(Record[Idx])); 338d1d64a027554b635d644957ef071ec04ea1f7063Chris Lattner S->setDeclGroup(DeclGroupRef(DeclGroup::Create(*Reader.getContext(), 33975fdb2377604e53678102076991bea345ace4692Douglas Gregor Decls.data(), 34075fdb2377604e53678102076991bea345ace4692Douglas Gregor Decls.size()))); 3414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 3424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 34460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitAsmStmt(AsmStmt *S) { 3454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 3464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumOutputs = Record[Idx++]; 3474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumInputs = Record[Idx++]; 3484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumClobbers = Record[Idx++]; 3494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setAsmLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 3504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 3514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setVolatile(Record[Idx++]); 3524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setSimple(Record[Idx++]); 3533b11fd3b52e7b88233c602407c151d07cb093e75Mike Stump S->setMSAsm(Record[Idx++]); 3541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 355d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setAsmString(cast_or_null<StringLiteral>(Reader.ReadSubStmt())); 3564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 3574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Outputs and inputs 358ff93dbd887e40588ed55d135037bb9287488b285Anders Carlsson llvm::SmallVector<IdentifierInfo *, 16> Names; 3594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner llvm::SmallVector<StringLiteral*, 16> Constraints; 3604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner llvm::SmallVector<Stmt*, 16> Exprs; 3614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = NumOutputs + NumInputs; I != N; ++I) { 362ff93dbd887e40588ed55d135037bb9287488b285Anders Carlsson Names.push_back(Reader.GetIdentifierInfo(Record, Idx)); 363d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Constraints.push_back(cast_or_null<StringLiteral>(Reader.ReadSubStmt())); 364d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Exprs.push_back(Reader.ReadSubStmt()); 3654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 3664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 3674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Constraints 3684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner llvm::SmallVector<StringLiteral*, 16> Clobbers; 3694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0; I != NumClobbers; ++I) 370d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Clobbers.push_back(cast_or_null<StringLiteral>(Reader.ReadSubStmt())); 371fdba9c069023f686e2608affde02c82131ee1cf8Anders Carlsson 372acb6bcb442936f3c14126fdd473307c17647cb84Anders Carlsson S->setOutputsAndInputsAndClobbers(*Reader.getContext(), 373acb6bcb442936f3c14126fdd473307c17647cb84Anders Carlsson Names.data(), Constraints.data(), 374fdba9c069023f686e2608affde02c82131ee1cf8Anders Carlsson Exprs.data(), NumOutputs, NumInputs, 375fdba9c069023f686e2608affde02c82131ee1cf8Anders Carlsson Clobbers.data(), NumClobbers); 3764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 37860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitExpr(Expr *E) { 3794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(E); 3804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setType(Reader.GetType(Record[Idx++])); 3814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setTypeDependent(Record[Idx++]); 3824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setValueDependent(Record[Idx++]); 3834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(Idx == NumExprFields && "Incorrect expression field count"); 3844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 38660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitPredefinedExpr(PredefinedExpr *E) { 3874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 3884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); 3894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setIdentType((PredefinedExpr::IdentType)Record[Idx++]); 3904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 39260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDeclRefExpr(DeclRefExpr *E) { 3934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 394663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 395663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis bool HasQualifier = Record[Idx++]; 396663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis unsigned NumTemplateArgs = Record[Idx++]; 397663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 398663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis E->DecoratedD.setInt((HasQualifier? DeclRefExpr::HasQualifierFlag : 0) | 399663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis (NumTemplateArgs ? DeclRefExpr::HasExplicitTemplateArgumentListFlag : 0)); 400663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 401663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis if (HasQualifier) { 402663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis E->getNameQualifier()->NNS = Reader.ReadNestedNameSpecifier(Record, Idx); 403663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis E->getNameQualifier()->Range = Reader.ReadSourceRange(Record, Idx); 404663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 405663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 406663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis if (NumTemplateArgs) 407096832c5ed5b9106fa177ebc148489760c3bc496John McCall ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 408663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis NumTemplateArgs); 409663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 410dbd872f273a8dbf22e089b3def6c09f0a460965dJohn McCall E->setDecl(cast<ValueDecl>(Reader.GetDecl(Record[Idx++]))); 4112577743c5650c646fb705df01403707e94f2df04Abramo Bagnara // FIXME: read DeclarationNameLoc. 412663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis E->setLocation(Reader.ReadSourceLocation(Record, Idx)); 4134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 41560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitIntegerLiteral(IntegerLiteral *E) { 4164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 4174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); 4189996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis E->setValue(*Reader.getContext(), Reader.ReadAPInt(Record, Idx)); 4194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 42160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitFloatingLiteral(FloatingLiteral *E) { 4224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 4239996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis E->setValue(*Reader.getContext(), Reader.ReadAPFloat(Record, Idx)); 4244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setExact(Record[Idx++]); 4254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); 4264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 42860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitImaginaryLiteral(ImaginaryLiteral *E) { 4294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 430d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 4314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 43360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitStringLiteral(StringLiteral *E) { 4344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 4354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Len = Record[Idx++]; 4361eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump assert(Record[Idx] == E->getNumConcatenated() && 4374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner "Wrong number of concatenated tokens!"); 4384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner ++Idx; 4394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setWide(Record[Idx++]); 4404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 4411eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // Read string data 442b648023da23e8b227cdda57a241db4c6f368726bDaniel Dunbar llvm::SmallString<16> Str(&Record[Idx], &Record[Idx] + Len); 443b648023da23e8b227cdda57a241db4c6f368726bDaniel Dunbar E->setString(*Reader.getContext(), Str.str()); 4444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Idx += Len; 4454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 4464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Read source locations 4474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = E->getNumConcatenated(); I != N; ++I) 4484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setStrTokenLoc(I, SourceLocation::getFromRawEncoding(Record[Idx++])); 4494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 45160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCharacterLiteral(CharacterLiteral *E) { 4524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 4534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setValue(Record[Idx++]); 4544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); 4554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setWide(Record[Idx++]); 4564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 45860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitParenExpr(ParenExpr *E) { 4594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 4604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setLParen(SourceLocation::getFromRawEncoding(Record[Idx++])); 4614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setRParen(SourceLocation::getFromRawEncoding(Record[Idx++])); 462d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 4634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 46560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitParenListExpr(ParenListExpr *E) { 46637bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis VisitExpr(E); 46737bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis unsigned NumExprs = Record[Idx++]; 46837bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->Exprs = new (*Reader.getContext()) Stmt*[NumExprs]; 46937bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis for (unsigned i = 0; i != NumExprs; ++i) 47037bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->Exprs[i] = Reader.ReadSubStmt(); 47137bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->NumExprs = NumExprs; 47237bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->LParenLoc = Reader.ReadSourceLocation(Record, Idx); 47337bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->RParenLoc = Reader.ReadSourceLocation(Record, Idx); 47437bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis} 47537bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis 47660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnaryOperator(UnaryOperator *E) { 4774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 478d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 4794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setOpcode((UnaryOperator::Opcode)Record[Idx++]); 4804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setOperatorLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 4814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 48360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitOffsetOfExpr(OffsetOfExpr *E) { 4848ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor typedef OffsetOfExpr::OffsetOfNode Node; 4858ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor VisitExpr(E); 4868ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor assert(E->getNumComponents() == Record[Idx]); 4878ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor ++Idx; 4888ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor assert(E->getNumExpressions() == Record[Idx]); 4898ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor ++Idx; 4908ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor E->setOperatorLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 4918ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor E->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 492577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl E->setTypeSourceInfo(Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx)); 4938ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor for (unsigned I = 0, N = E->getNumComponents(); I != N; ++I) { 4948ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Node::Kind Kind = static_cast<Node::Kind>(Record[Idx++]); 4958ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor SourceLocation Start = SourceLocation::getFromRawEncoding(Record[Idx++]); 4968ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor SourceLocation End = SourceLocation::getFromRawEncoding(Record[Idx++]); 4978ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor switch (Kind) { 4988ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case Node::Array: 4998ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor E->setComponent(I, Node(Start, Record[Idx++], End)); 5008ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 5018ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 5028ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case Node::Field: 5038ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor E->setComponent(I, 5048ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Node(Start, 5058ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor dyn_cast_or_null<FieldDecl>(Reader.GetDecl(Record[Idx++])), 5068ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor End)); 5078ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 5088ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 5098ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case Node::Identifier: 5108ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor E->setComponent(I, Node(Start, Reader.GetIdentifier(Record[Idx++]), End)); 5118ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 512cc8a5d5f90bbbbcb46f342117b851b7e07ec34f1Douglas Gregor 513afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis case Node::Base: { 514afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis CXXBaseSpecifier *Base = new (*Reader.getContext()) CXXBaseSpecifier(); 515afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis *Base = Reader.ReadCXXBaseSpecifier(DeclsCursor, Record, Idx); 516afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis E->setComponent(I, Node(Base)); 517cc8a5d5f90bbbbcb46f342117b851b7e07ec34f1Douglas Gregor break; 5188ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor } 519afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis } 5208ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor } 5218ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 5228ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor for (unsigned I = 0, N = E->getNumExpressions(); I != N; ++I) 523d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setIndexExpr(I, Reader.ReadSubExpr()); 5248ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor} 5258ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 52660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E) { 5274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 5284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setSizeof(Record[Idx++]); 5294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Record[Idx] == 0) { 530d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArgument(Reader.ReadSubExpr()); 5314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner ++Idx; 5324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } else { 533577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl E->setArgument(Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx)); 5344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 5354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setOperatorLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 5364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 5374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 53960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitArraySubscriptExpr(ArraySubscriptExpr *E) { 5404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 541d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 542d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 5434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setRBracketLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 5444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 54660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCallExpr(CallExpr *E) { 5474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 548d1d64a027554b635d644957ef071ec04ea1f7063Chris Lattner E->setNumArgs(*Reader.getContext(), Record[Idx++]); 5494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 550d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setCallee(Reader.ReadSubExpr()); 5514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 552d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 5534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 55560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitMemberExpr(MemberExpr *E) { 556663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // Don't call VisitExpr, this is fully initialized at creation. 557663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis assert(E->getStmtClass() == Stmt::MemberExprClass && 558663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis "It's a subclass, we must advance Idx!"); 5594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 56160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCIsaExpr(ObjCIsaExpr *E) { 562f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff VisitExpr(E); 563d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 564f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff E->setIsaMemberLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 565f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff E->setArrow(Record[Idx++]); 566f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff} 567f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff 56860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCastExpr(CastExpr *E) { 5694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 570f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall unsigned NumBaseSpecs = Record[Idx++]; 571f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall assert(NumBaseSpecs == E->path_size()); 572d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 573cdef2b75aa60cde1ca00e0aa3f89139ac89c6ae4Anders Carlsson E->setCastKind((CastExpr::CastKind)Record[Idx++]); 574f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall CastExpr::path_iterator BaseI = E->path_begin(); 5750745d0a648b75bd304045309276c70a755adaafbArgyrios Kyrtzidis while (NumBaseSpecs--) { 5760745d0a648b75bd304045309276c70a755adaafbArgyrios Kyrtzidis CXXBaseSpecifier *BaseSpec = new (*Reader.getContext()) CXXBaseSpecifier; 5775606220447c7901ba8d80147ddab893bb7949dd5Nick Lewycky *BaseSpec = Reader.ReadCXXBaseSpecifier(DeclsCursor, Record, Idx); 578f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall *BaseI++ = BaseSpec; 5790745d0a648b75bd304045309276c70a755adaafbArgyrios Kyrtzidis } 5804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 58260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBinaryOperator(BinaryOperator *E) { 5834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 584d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 585d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 5864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setOpcode((BinaryOperator::Opcode)Record[Idx++]); 5874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setOperatorLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 5884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 59060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCompoundAssignOperator(CompoundAssignOperator *E) { 5914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitBinaryOperator(E); 5924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setComputationLHSType(Reader.GetType(Record[Idx++])); 5934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setComputationResultType(Reader.GetType(Record[Idx++])); 5944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 59660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitConditionalOperator(ConditionalOperator *E) { 5974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 598d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setCond(Reader.ReadSubExpr()); 599d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 600d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 601f9b949fecf339a2c9bd97dd11a272c4878f85ce4Fariborz Jahanian E->setSAVE(Reader.ReadSubExpr()); 60247e1f7c68bf375cac470fdb2b599ddbb395aeb52Douglas Gregor E->setQuestionLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 60347e1f7c68bf375cac470fdb2b599ddbb395aeb52Douglas Gregor E->setColonLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 6044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 60660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitImplicitCastExpr(ImplicitCastExpr *E) { 6074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitCastExpr(E); 6085baba9d98364a3525d6afa15a04cdad82fd6dd30John McCall E->setValueKind(static_cast<ExprValueKind>(Record[Idx++])); 6094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 61160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitExplicitCastExpr(ExplicitCastExpr *E) { 6124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitCastExpr(E); 613577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl E->setTypeInfoAsWritten(Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx)); 6144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 61660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCStyleCastExpr(CStyleCastExpr *E) { 6174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExplicitCastExpr(E); 6184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setLParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 6194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 6204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 62260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) { 6234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 6244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setLParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 625577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl E->setTypeSourceInfo(Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx)); 626d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setInitializer(Reader.ReadSubExpr()); 6274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setFileScope(Record[Idx++]); 6284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 63060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitExtVectorElementExpr(ExtVectorElementExpr *E) { 6314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 632d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 6334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setAccessor(Reader.GetIdentifierInfo(Record, Idx)); 6344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setAccessorLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 6354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 63760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitInitListExpr(InitListExpr *E) { 6384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 6394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumInits = Record[Idx++]; 640709210feee317b8d6690dd1d15c2b74cfe55e261Ted Kremenek E->reserveInits(*Reader.getContext(), NumInits); 6414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0; I != NumInits; ++I) 642d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->updateInit(*Reader.getContext(), I, Reader.ReadSubExpr()); 643d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSyntacticForm(cast_or_null<InitListExpr>(Reader.ReadSubStmt())); 6444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setLBraceLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 6454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setRBraceLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 6464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setInitializedFieldInUnion( 6474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner cast_or_null<FieldDecl>(Reader.GetDecl(Record[Idx++]))); 6484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->sawArrayRangeDesignator(Record[Idx++]); 6494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 65160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDesignatedInitExpr(DesignatedInitExpr *E) { 6524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner typedef DesignatedInitExpr::Designator Designator; 6534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 6554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumSubExprs = Record[Idx++]; 6564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(NumSubExprs == E->getNumSubExprs() && "Wrong number of subexprs"); 6574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0; I != NumSubExprs; ++I) 658d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(I, Reader.ReadSubExpr()); 6594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setEqualOrColonLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 6604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setGNUSyntax(Record[Idx++]); 6614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner llvm::SmallVector<Designator, 4> Designators; 6634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner while (Idx < Record.size()) { 6648538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl switch ((DesignatorTypes)Record[Idx++]) { 6658538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_FIELD_DECL: { 6664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner FieldDecl *Field = cast<FieldDecl>(Reader.GetDecl(Record[Idx++])); 6671eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation DotLoc 6684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner = SourceLocation::getFromRawEncoding(Record[Idx++]); 6691eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation FieldLoc 6704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner = SourceLocation::getFromRawEncoding(Record[Idx++]); 6711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump Designators.push_back(Designator(Field->getIdentifier(), DotLoc, 6724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner FieldLoc)); 6734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.back().setField(Field); 6744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 6754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 6764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6778538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_FIELD_NAME: { 6784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner const IdentifierInfo *Name = Reader.GetIdentifierInfo(Record, Idx); 6791eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation DotLoc 6804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner = SourceLocation::getFromRawEncoding(Record[Idx++]); 6811eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation FieldLoc 6824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner = SourceLocation::getFromRawEncoding(Record[Idx++]); 6834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.push_back(Designator(Name, DotLoc, FieldLoc)); 6844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 6854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 6861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 6878538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_ARRAY: { 6884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Index = Record[Idx++]; 6894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation LBracketLoc 6904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner = SourceLocation::getFromRawEncoding(Record[Idx++]); 6914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation RBracketLoc 6924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner = SourceLocation::getFromRawEncoding(Record[Idx++]); 6934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.push_back(Designator(Index, LBracketLoc, RBracketLoc)); 6944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 6954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 6964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6978538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_ARRAY_RANGE: { 6984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Index = Record[Idx++]; 6994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation LBracketLoc 7004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner = SourceLocation::getFromRawEncoding(Record[Idx++]); 7014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation EllipsisLoc 7024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner = SourceLocation::getFromRawEncoding(Record[Idx++]); 7034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation RBracketLoc 7044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner = SourceLocation::getFromRawEncoding(Record[Idx++]); 7054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.push_back(Designator(Index, LBracketLoc, EllipsisLoc, 7064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner RBracketLoc)); 7074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 7084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 7094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 7104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 711319d57f21600dd2c4d52ccc27bd12ce260b174e7Douglas Gregor E->setDesignators(*Reader.getContext(), 712319d57f21600dd2c4d52ccc27bd12ce260b174e7Douglas Gregor Designators.data(), Designators.size()); 7134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 71560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitImplicitValueInitExpr(ImplicitValueInitExpr *E) { 7164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 7174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 71960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitVAArgExpr(VAArgExpr *E) { 7204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 721d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 7222cad900202561cdda18ea6cc51ddbf3e20e3c23aAbramo Bagnara E->setWrittenTypeInfo(Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx)); 7234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setBuiltinLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 7244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 7254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 72760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitAddrLabelExpr(AddrLabelExpr *E) { 7284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 7294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setAmpAmpLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 7304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setLabelLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 7314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Reader.SetLabelOf(E, Record[Idx++]); 7324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 73460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitStmtExpr(StmtExpr *E) { 7354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 7364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setLParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 7374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 738d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubStmt(cast_or_null<CompoundStmt>(Reader.ReadSubStmt())); 7394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 74160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitTypesCompatibleExpr(TypesCompatibleExpr *E) { 7424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 7433fcb73dae91be42b071cf0dde9222b7ec362146dAbramo Bagnara E->setArgTInfo1(Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx)); 7443fcb73dae91be42b071cf0dde9222b7ec362146dAbramo Bagnara E->setArgTInfo2(Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx)); 7454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setBuiltinLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 7464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 7474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 74960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitChooseExpr(ChooseExpr *E) { 7504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 751d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setCond(Reader.ReadSubExpr()); 752d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 753d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 7544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setBuiltinLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 7554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 7564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 75860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitGNUNullExpr(GNUNullExpr *E) { 7594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 7604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setTokenLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); 7614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 76360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitShuffleVectorExpr(ShuffleVectorExpr *E) { 7644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 765919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis llvm::SmallVector<Expr *, 16> Exprs; 7664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumExprs = Record[Idx++]; 767919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis while (NumExprs--) 768d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Exprs.push_back(Reader.ReadSubExpr()); 769919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis E->setExprs(*Reader.getContext(), Exprs.data(), Exprs.size()); 7704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setBuiltinLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 7714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 7724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 77460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBlockExpr(BlockExpr *E) { 7754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 7764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setBlockDecl(cast_or_null<BlockDecl>(Reader.GetDecl(Record[Idx++]))); 7774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setHasBlockDeclRefExprs(Record[Idx++]); 7784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 78060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBlockDeclRefExpr(BlockDeclRefExpr *E) { 7814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 7824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setDecl(cast<ValueDecl>(Reader.GetDecl(Record[Idx++]))); 7834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); 7844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setByRef(Record[Idx++]); 7859b0b57c6f9996bfdb67248f6942dd23acfa36167Fariborz Jahanian E->setConstQualAdded(Record[Idx++]); 786d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setCopyConstructorExpr(Reader.ReadSubExpr()); 7874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 7894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner//===----------------------------------------------------------------------===// 7904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// Objective-C Expressions and Statements 7914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 79260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCStringLiteral(ObjCStringLiteral *E) { 7934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 794d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setString(cast<StringLiteral>(Reader.ReadSubStmt())); 7954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setAtLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 7964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 79860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCEncodeExpr(ObjCEncodeExpr *E) { 7994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 800577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl E->setEncodedTypeSourceInfo(Reader.GetTypeSourceInfo(DeclsCursor,Record,Idx)); 8014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setAtLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 8024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 8034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 80560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCSelectorExpr(ObjCSelectorExpr *E) { 8064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 8074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setSelector(Reader.GetSelector(Record, Idx)); 8084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setAtLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 8094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 8104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 81260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCProtocolExpr(ObjCProtocolExpr *E) { 8134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 8144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setProtocol(cast<ObjCProtocolDecl>(Reader.GetDecl(Record[Idx++]))); 8154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setAtLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 8164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 8174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 81960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) { 8204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 8214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setDecl(cast<ObjCIvarDecl>(Reader.GetDecl(Record[Idx++]))); 8224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); 823d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 8244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setIsArrow(Record[Idx++]); 8254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setIsFreeIvar(Record[Idx++]); 8264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 82860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) { 8294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 8304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setProperty(cast<ObjCPropertyDecl>(Reader.GetDecl(Record[Idx++]))); 8314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); 832d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 8334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 83560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCImplicitSetterGetterRefExpr( 83609105f52b1f28cbb1374c27c3c70f5517e2c465dFariborz Jahanian ObjCImplicitSetterGetterRefExpr *E) { 8374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 8384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setGetterMethod( 8394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner cast_or_null<ObjCMethodDecl>(Reader.GetDecl(Record[Idx++]))); 8404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setSetterMethod( 8414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner cast_or_null<ObjCMethodDecl>(Reader.GetDecl(Record[Idx++]))); 842d2ae5aa732e8587816fd7a7be911460e337c178eFariborz Jahanian E->setInterfaceDecl( 8434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner cast_or_null<ObjCInterfaceDecl>(Reader.GetDecl(Record[Idx++]))); 844d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 8454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); 8464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setClassLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 8474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 84960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCMessageExpr(ObjCMessageExpr *E) { 8504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 85104badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor assert(Record[Idx] == E->getNumArgs()); 85204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor ++Idx; 85304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor ObjCMessageExpr::ReceiverKind Kind 85404badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor = static_cast<ObjCMessageExpr::ReceiverKind>(Record[Idx++]); 85504badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor switch (Kind) { 85604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::Instance: 857d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setInstanceReceiver(Reader.ReadSubExpr()); 85804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 85904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 86004badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::Class: 861577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl E->setClassReceiver(Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx)); 86204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 86304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 86404badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::SuperClass: 86504badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::SuperInstance: { 86604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor QualType T = Reader.GetType(Record[Idx++]); 86704badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor SourceLocation SuperLoc = SourceLocation::getFromRawEncoding(Record[Idx++]); 86804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor E->setSuper(SuperLoc, T, Kind == ObjCMessageExpr::SuperInstance); 86904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 87004badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor } 8714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 8724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 87304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor assert(Kind == E->getReceiverKind()); 87404badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 87504badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor if (Record[Idx++]) 87604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor E->setMethodDecl(cast_or_null<ObjCMethodDecl>(Reader.GetDecl(Record[Idx++]))); 87704badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor else 87804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor E->setSelector(Reader.GetSelector(Record, Idx)); 87904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 88004badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor E->setLeftLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 88104badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor E->setRightLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 88204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 8834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 884d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 8854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 88760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCSuperExpr(ObjCSuperExpr *E) { 8884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 8894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 8904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 89260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCForCollectionStmt(ObjCForCollectionStmt *S) { 8934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 894d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setElement(Reader.ReadSubStmt()); 895d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCollection(Reader.ReadSubExpr()); 896d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 8974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setForLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 8984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 8994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 90160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtCatchStmt(ObjCAtCatchStmt *S) { 9024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 903d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCatchBody(Reader.ReadSubStmt()); 904c00d8e18ad3d903acfeb5d05163ce90713066a3fDouglas Gregor S->setCatchParamDecl(cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++]))); 9054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setAtCatchLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 9064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 9074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 90960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *S) { 9104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 911d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setFinallyBody(Reader.ReadSubStmt()); 9124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setAtFinallyLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 9134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 91560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtTryStmt(ObjCAtTryStmt *S) { 9164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 9178f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor assert(Record[Idx] == S->getNumCatchStmts()); 9188f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor ++Idx; 9198f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor bool HasFinally = Record[Idx++]; 920d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setTryBody(Reader.ReadSubStmt()); 921919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis for (unsigned I = 0, N = S->getNumCatchStmts(); I != N; ++I) 922d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCatchStmt(I, cast_or_null<ObjCAtCatchStmt>(Reader.ReadSubStmt())); 9238f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor 9248f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor if (HasFinally) 925d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setFinallyStmt(Reader.ReadSubStmt()); 9264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setAtTryLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 9274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 92960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *S) { 9304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 931d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSynchExpr(Reader.ReadSubStmt()); 932d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSynchBody(Reader.ReadSubStmt()); 9334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setAtSynchronizedLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 9344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 93660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtThrowStmt(ObjCAtThrowStmt *S) { 9374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 938d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setThrowExpr(Reader.ReadSubStmt()); 9394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setThrowLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 9404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 942ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 943ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis// C++ Expressions and Statements 9447cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 9457cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 94660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXCatchStmt(CXXCatchStmt *S) { 9477cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis VisitStmt(S); 9487cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->CatchLoc = Reader.ReadSourceLocation(Record, Idx); 9497cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->ExceptionDecl = cast_or_null<VarDecl>(Reader.GetDecl(Record[Idx++])); 9507cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->HandlerBlock = Reader.ReadSubStmt(); 9517cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis} 9527cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 95360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXTryStmt(CXXTryStmt *S) { 9547cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis VisitStmt(S); 9557cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis assert(Record[Idx] == S->getNumHandlers() && "NumStmtFields is wrong ?"); 9567cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis ++Idx; 9577cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->TryLoc = Reader.ReadSourceLocation(Record, Idx); 9587cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->getStmts()[0] = Reader.ReadSubStmt(); 9597cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis for (unsigned i = 0, e = S->getNumHandlers(); i != e; ++i) 9607cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->getStmts()[i + 1] = Reader.ReadSubStmt(); 9617cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis} 962ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis 96360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) { 964919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitCallExpr(E); 965ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis E->setOperator((OverloadedOperatorKind)Record[Idx++]); 966ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis} 967ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis 96860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXConstructExpr(CXXConstructExpr *E) { 96939da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor VisitExpr(E); 9706d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->NumArgs = Record[Idx++]; 9716d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis if (E->NumArgs) 9726d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->Args = new (*Reader.getContext()) Stmt*[E->NumArgs]; 9735e1b7c2f419544a88537f7ff4e32ed744ba7b44eArgyrios Kyrtzidis for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 974d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 97539da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor E->setConstructor(cast<CXXConstructorDecl>(Reader.GetDecl(Record[Idx++]))); 97699a2e600f9e2e51d3ce10fb6f27191677ac65b2aDouglas Gregor E->setLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); 97739da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor E->setElidable(Record[Idx++]); 97816006c901315fa12a108b4e571f187f4b676e426Douglas Gregor E->setRequiresZeroInitialization(Record[Idx++]); 9793c9034cb7ff1d6c1e4ecd1b44c98f553df013c7cDouglas Gregor E->setConstructionKind((CXXConstructExpr::ConstructionKind)Record[Idx++]); 98039da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor} 9814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 98260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E) { 9836d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis VisitCXXConstructExpr(E); 984ab6677ec401cfd2c82b34e4cdfebd55a9dc25778Douglas Gregor E->Type = Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx); 9856d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->RParenLoc = Reader.ReadSourceLocation(Record, Idx); 9866d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis} 9876d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 98860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXNamedCastExpr(CXXNamedCastExpr *E) { 989919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitExplicitCastExpr(E); 990ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig E->setOperatorLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 991ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 992ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 99360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXStaticCastExpr(CXXStaticCastExpr *E) { 994ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 995ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 996ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 99760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXDynamicCastExpr(CXXDynamicCastExpr *E) { 998ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 999ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1000ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 100160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXReinterpretCastExpr(CXXReinterpretCastExpr *E) { 1002ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1003ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1004ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 100560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXConstCastExpr(CXXConstCastExpr *E) { 1006ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1007ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1008ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 100960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *E) { 1010919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitExplicitCastExpr(E); 1011ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig E->setTypeBeginLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 1012ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig E->setRParenLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 1013ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1014ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 101560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E) { 1016eb7f96141f754150a92433286fa385910a22f494Sam Weinig VisitExpr(E); 1017eb7f96141f754150a92433286fa385910a22f494Sam Weinig E->setValue(Record[Idx++]); 1018eb7f96141f754150a92433286fa385910a22f494Sam Weinig E->setLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); 1019eb7f96141f754150a92433286fa385910a22f494Sam Weinig} 1020eb7f96141f754150a92433286fa385910a22f494Sam Weinig 102160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E) { 1022eb7f96141f754150a92433286fa385910a22f494Sam Weinig VisitExpr(E); 1023eb7f96141f754150a92433286fa385910a22f494Sam Weinig E->setLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); 1024eb7f96141f754150a92433286fa385910a22f494Sam Weinig} 1025eb7f96141f754150a92433286fa385910a22f494Sam Weinig 102660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXTypeidExpr(CXXTypeidExpr *E) { 102714ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner VisitExpr(E); 102814ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner E->setSourceRange(Reader.ReadSourceRange(Record, Idx)); 102914ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner if (E->isTypeOperand()) { // typeid(int) 1030577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl E->setTypeOperandSourceInfo( 1031577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx)); 1032919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis return; 103314ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner } 103414ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 103514ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner // typeid(42+2) 1036d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setExprOperand(Reader.ReadSubExpr()); 103714ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner} 103801b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichetvoid ASTStmtReader::VisitCXXUuidofExpr(CXXUuidofExpr *E) { 103901b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet VisitExpr(E); 104001b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet E->setSourceRange(Reader.ReadSourceRange(Record, Idx)); 104101b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet if (E->isTypeOperand()) { // __uuidof(ComType) 104201b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet E->setTypeOperandSourceInfo( 104301b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx)); 104401b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet return; 104501b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet } 104601b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet 104701b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet // __uuidof(expr) 104801b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet E->setExprOperand(Reader.ReadSubExpr()); 104901b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet} 105014ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 105160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXThisExpr(CXXThisExpr *E) { 10522fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner VisitExpr(E); 10532fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner E->setLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); 10542fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner E->setImplicit(Record[Idx++]); 10552fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner} 10562fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner 105760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXThrowExpr(CXXThrowExpr *E) { 10582fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner VisitExpr(E); 10592fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner E->setThrowLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 1060d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 10612fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner} 106214ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 106360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) { 1064030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner VisitExpr(E); 10658a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis 10668a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis assert(Record[Idx] == E->Param.getInt() && "We messed up at creation ?"); 10678a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis ++Idx; // HasOtherExprStored and SubExpr was handled during creation. 10688a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis E->Param.setPointer(cast<ParmVarDecl>(Reader.GetDecl(Record[Idx++]))); 10698a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis E->Loc = Reader.ReadSourceLocation(Record, Idx); 1070d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner} 1071d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 107260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E) { 1073d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner VisitExpr(E); 1074d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner E->setTemporary(Reader.ReadCXXTemporary(Record, Idx)); 1075d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 1076d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner} 1077d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 107860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E) { 10795921863d8f24084797863b5df37842113bac4352Chris Lattner VisitExpr(E); 1080ab6677ec401cfd2c82b34e4cdfebd55a9dc25778Douglas Gregor E->TypeInfo = Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx); 1081ab6677ec401cfd2c82b34e4cdfebd55a9dc25778Douglas Gregor E->RParenLoc = SourceLocation::getFromRawEncoding(Record[Idx++]); 10825921863d8f24084797863b5df37842113bac4352Chris Lattner} 10835921863d8f24084797863b5df37842113bac4352Chris Lattner 108460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXNewExpr(CXXNewExpr *E) { 10855921863d8f24084797863b5df37842113bac4352Chris Lattner VisitExpr(E); 10865921863d8f24084797863b5df37842113bac4352Chris Lattner E->setGlobalNew(Record[Idx++]); 10875921863d8f24084797863b5df37842113bac4352Chris Lattner E->setHasInitializer(Record[Idx++]); 10885921863d8f24084797863b5df37842113bac4352Chris Lattner bool isArray = Record[Idx++]; 10895921863d8f24084797863b5df37842113bac4352Chris Lattner unsigned NumPlacementArgs = Record[Idx++]; 10905921863d8f24084797863b5df37842113bac4352Chris Lattner unsigned NumCtorArgs = Record[Idx++]; 10915921863d8f24084797863b5df37842113bac4352Chris Lattner E->setOperatorNew(cast_or_null<FunctionDecl>(Reader.GetDecl(Record[Idx++]))); 10925921863d8f24084797863b5df37842113bac4352Chris Lattner E->setOperatorDelete( 10935921863d8f24084797863b5df37842113bac4352Chris Lattner cast_or_null<FunctionDecl>(Reader.GetDecl(Record[Idx++]))); 10945921863d8f24084797863b5df37842113bac4352Chris Lattner E->setConstructor( 10955921863d8f24084797863b5df37842113bac4352Chris Lattner cast_or_null<CXXConstructorDecl>(Reader.GetDecl(Record[Idx++]))); 10961bb2a93ab7b1499dda6f6b58865bd0dce1864228Douglas Gregor E->AllocatedTypeInfo = Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx); 10974bd40318cbea15310a37343db46de96c4fcc15e6Douglas Gregor SourceRange TypeIdParens; 10984bd40318cbea15310a37343db46de96c4fcc15e6Douglas Gregor TypeIdParens.setBegin(SourceLocation::getFromRawEncoding(Record[Idx++])); 10994bd40318cbea15310a37343db46de96c4fcc15e6Douglas Gregor TypeIdParens.setEnd(SourceLocation::getFromRawEncoding(Record[Idx++])); 11004bd40318cbea15310a37343db46de96c4fcc15e6Douglas Gregor E->TypeIdParens = TypeIdParens; 11015921863d8f24084797863b5df37842113bac4352Chris Lattner E->setStartLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 11025921863d8f24084797863b5df37842113bac4352Chris Lattner E->setEndLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); 11035921863d8f24084797863b5df37842113bac4352Chris Lattner 11045921863d8f24084797863b5df37842113bac4352Chris Lattner E->AllocateArgsArray(*Reader.getContext(), isArray, NumPlacementArgs, 11055921863d8f24084797863b5df37842113bac4352Chris Lattner NumCtorArgs); 11065921863d8f24084797863b5df37842113bac4352Chris Lattner 11075921863d8f24084797863b5df37842113bac4352Chris Lattner // Install all the subexpressions. 11085921863d8f24084797863b5df37842113bac4352Chris Lattner for (CXXNewExpr::raw_arg_iterator I = E->raw_arg_begin(),e = E->raw_arg_end(); 11095921863d8f24084797863b5df37842113bac4352Chris Lattner I != e; ++I) 1110d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis *I = Reader.ReadSubStmt(); 11115921863d8f24084797863b5df37842113bac4352Chris Lattner} 11125921863d8f24084797863b5df37842113bac4352Chris Lattner 111360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXDeleteExpr(CXXDeleteExpr *E) { 111495fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis VisitExpr(E); 1115f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->GlobalDelete = Record[Idx++]; 1116f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->ArrayForm = Record[Idx++]; 11174076dacf1497fb95cb298b9d964fbdbdaf9bde6cArgyrios Kyrtzidis E->ArrayFormAsWritten = Record[Idx++]; 1118f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->OperatorDelete = cast_or_null<FunctionDecl>(Reader.GetDecl(Record[Idx++])); 1119f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->Argument = Reader.ReadSubExpr(); 1120f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->Loc = Reader.ReadSourceLocation(Record, Idx); 112195fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis} 1122d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 112360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E) { 1124de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis VisitExpr(E); 1125de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 1126d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 1127de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis E->setArrow(Record[Idx++]); 1128de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis E->setOperatorLoc(Reader.ReadSourceLocation(Record, Idx)); 1129de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis E->setQualifier(Reader.ReadNestedNameSpecifier(Record, Idx)); 1130de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis E->setQualifierRange(Reader.ReadSourceRange(Record, Idx)); 1131577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl E->setScopeTypeInfo(Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx)); 1132de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis E->setColonColonLoc(Reader.ReadSourceLocation(Record, Idx)); 1133de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis E->setTildeLoc(Reader.ReadSourceLocation(Record, Idx)); 1134de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 1135de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis IdentifierInfo *II = Reader.GetIdentifierInfo(Record, Idx); 1136de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis if (II) 1137de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis E->setDestroyedType(II, Reader.ReadSourceLocation(Record, Idx)); 1138de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis else 1139577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl E->setDestroyedType(Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx)); 1140de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis} 1141de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 114260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXExprWithTemporaries(CXXExprWithTemporaries *E) { 1143d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner VisitExpr(E); 1144d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner unsigned NumTemps = Record[Idx++]; 1145d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner if (NumTemps) { 1146d04ed416be7c55bddddab1fa3fd38a0113a6b3daTed Kremenek E->setNumTemporaries(*Reader.getContext(), NumTemps); 1147d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner for (unsigned i = 0; i != NumTemps; ++i) 1148d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner E->setTemporary(i, Reader.ReadCXXTemporary(Record, Idx)); 1149d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner } 1150d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 1151030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner} 1152030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner 1153919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisvoid 115460adf4acf40b72227740bf966fb87eebddff3f37Sebastian RedlASTStmtReader::VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E){ 11558dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis VisitExpr(E); 11568dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 11578dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis unsigned NumTemplateArgs = Record[Idx++]; 11588dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis assert((NumTemplateArgs != 0) == E->hasExplicitTemplateArgs() && 11598dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis "Read wrong record during creation ?"); 116036c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis if (E->hasExplicitTemplateArgs()) 1161096832c5ed5b9106fa177ebc148489760c3bc496John McCall ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 1162919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis NumTemplateArgs); 11638dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 1164d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 11658dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setBaseType(Reader.GetType(Record[Idx++])); 11668dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setArrow(Record[Idx++]); 11678dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setOperatorLoc(Reader.ReadSourceLocation(Record, Idx)); 11688dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setQualifier(Reader.ReadNestedNameSpecifier(Record, Idx)); 11698dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setQualifierRange(Reader.ReadSourceRange(Record, Idx)); 11708dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setFirstQualifierFoundInScope( 11718dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis cast_or_null<NamedDecl>(Reader.GetDecl(Record[Idx++]))); 11722577743c5650c646fb705df01403707e94f2df04Abramo Bagnara // FIXME: read whole DeclarationNameInfo. 11738dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setMember(Reader.ReadDeclarationName(Record, Idx)); 11748dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setMemberLoc(Reader.ReadSourceLocation(Record, Idx)); 11758dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis} 11768dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 1177919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisvoid 117860adf4acf40b72227740bf966fb87eebddff3f37Sebastian RedlASTStmtReader::VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) { 117912dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis VisitExpr(E); 118012dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 118112dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis unsigned NumTemplateArgs = Record[Idx++]; 118212dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis assert((NumTemplateArgs != 0) == E->hasExplicitTemplateArgs() && 118312dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis "Read wrong record during creation ?"); 118412dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis if (E->hasExplicitTemplateArgs()) 1185919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 1186919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis NumTemplateArgs); 118712dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 11882577743c5650c646fb705df01403707e94f2df04Abramo Bagnara // FIXME: read whole DeclarationNameInfo. 118912dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis E->setDeclName(Reader.ReadDeclarationName(Record, Idx)); 119012dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis E->setLocation(Reader.ReadSourceLocation(Record, Idx)); 119112dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis E->setQualifierRange(Reader.ReadSourceRange(Record, Idx)); 119212dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis E->setQualifier(Reader.ReadNestedNameSpecifier(Record, Idx)); 119312dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis} 119412dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 1195919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisvoid 119660adf4acf40b72227740bf966fb87eebddff3f37Sebastian RedlASTStmtReader::VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E) { 11978dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis VisitExpr(E); 11988dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis assert(Record[Idx] == E->arg_size() && "Read wrong record during creation ?"); 11998dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis ++Idx; // NumArgs; 12008dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis for (unsigned I = 0, N = E->arg_size(); I != N; ++I) 1201d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 1202ab6677ec401cfd2c82b34e4cdfebd55a9dc25778Douglas Gregor E->Type = Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx); 12038dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setLParenLoc(Reader.ReadSourceLocation(Record, Idx)); 12048dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis E->setRParenLoc(Reader.ReadSourceLocation(Record, Idx)); 12058dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis} 12068dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 120760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitOverloadExpr(OverloadExpr *E) { 1208a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis VisitExpr(E); 1209a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 1210a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis unsigned NumTemplateArgs = Record[Idx++]; 1211a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis assert((NumTemplateArgs != 0) == E->hasExplicitTemplateArgs() && 1212a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis "Read wrong record during creation ?"); 1213919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis if (E->hasExplicitTemplateArgs()) 1214919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 1215919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis NumTemplateArgs); 1216a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 1217a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis unsigned NumDecls = Record[Idx++]; 1218a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis UnresolvedSet<8> Decls; 1219a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis for (unsigned i = 0; i != NumDecls; ++i) { 1220a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis NamedDecl *D = cast<NamedDecl>(Reader.GetDecl(Record[Idx++])); 1221a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis AccessSpecifier AS = (AccessSpecifier)Record[Idx++]; 1222a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis Decls.addDecl(D, AS); 1223a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis } 1224a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->initializeResults(*Reader.getContext(), Decls.begin(), Decls.end()); 1225a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 12262577743c5650c646fb705df01403707e94f2df04Abramo Bagnara // FIXME: read whole DeclarationNameInfo. 1227a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setName(Reader.ReadDeclarationName(Record, Idx)); 1228a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setQualifier(Reader.ReadNestedNameSpecifier(Record, Idx)); 1229a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setQualifierRange(Reader.ReadSourceRange(Record, Idx)); 1230a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setNameLoc(Reader.ReadSourceLocation(Record, Idx)); 1231a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis} 1232a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 123360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnresolvedMemberExpr(UnresolvedMemberExpr *E) { 1234919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitOverloadExpr(E); 1235a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setArrow(Record[Idx++]); 1236a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setHasUnresolvedUsing(Record[Idx++]); 1237d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 1238a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setBaseType(Reader.GetType(Record[Idx++])); 1239a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->setOperatorLoc(Reader.ReadSourceLocation(Record, Idx)); 1240a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis} 1241a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 124260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E) { 1243919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitOverloadExpr(E); 1244bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis E->setRequiresADL(Record[Idx++]); 1245bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis E->setOverloaded(Record[Idx++]); 1246bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis E->setNamingClass(cast_or_null<CXXRecordDecl>(Reader.GetDecl(Record[Idx++]))); 1247bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis} 1248bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis 124960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnaryTypeTraitExpr(UnaryTypeTraitExpr *E) { 12506d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis VisitExpr(E); 12516d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->UTT = (UnaryTypeTrait)Record[Idx++]; 12520dfd848fa4c9664852ba8c929a8bd3fce93ddca2Sebastian Redl E->Value = (bool)Record[Idx++]; 12536d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis SourceRange Range = Reader.ReadSourceRange(Record, Idx); 12546d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->Loc = Range.getBegin(); 12556d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->RParen = Range.getEnd(); 12563d37c0ada0e46b87be0a10e8d52d990a97d3907aDouglas Gregor E->QueriedType = Reader.GetTypeSourceInfo(DeclsCursor, Record, Idx); 12576d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis} 12586d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 12596b219d082434394c1ac401390ec1d1967727815aSebastian Redlvoid ASTStmtReader::VisitCXXNoexceptExpr(CXXNoexceptExpr *E) { 12606b219d082434394c1ac401390ec1d1967727815aSebastian Redl VisitExpr(E); 12615221d8f2da008689f7ff9476e6522bb2b63ec1a3Sebastian Redl E->Value = (bool)Record[Idx++]; 12625221d8f2da008689f7ff9476e6522bb2b63ec1a3Sebastian Redl E->Range = Reader.ReadSourceRange(Record, Idx); 12635221d8f2da008689f7ff9476e6522bb2b63ec1a3Sebastian Redl E->Operand = Reader.ReadSubExpr(); 12646b219d082434394c1ac401390ec1d1967727815aSebastian Redl} 12656b219d082434394c1ac401390ec1d1967727815aSebastian Redl 1266c43b54cbc10654ed59de797898042e1a05265246Sebastian RedlStmt *ASTReader::ReadStmt(llvm::BitstreamCursor &Cursor) { 1267919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis switch (ReadingKind) { 1268919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis case Read_Decl: 1269919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis case Read_Type: 1270577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl return ReadStmtFromStream(Cursor); 1271919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis case Read_Stmt: 1272d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis return ReadSubStmt(); 1273919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis } 1274919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1275919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis llvm_unreachable("ReadingKind not set ?"); 1276919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis return 0; 1277919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis} 1278919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1279c43b54cbc10654ed59de797898042e1a05265246Sebastian RedlExpr *ASTReader::ReadExpr(llvm::BitstreamCursor &Cursor) { 1280577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl return cast_or_null<Expr>(ReadStmt(Cursor)); 1281919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis} 1282030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner 1283c43b54cbc10654ed59de797898042e1a05265246Sebastian RedlExpr *ASTReader::ReadSubExpr() { 1284d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis return cast_or_null<Expr>(ReadSubStmt()); 1285d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis} 1286d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis 128752e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// Within the bitstream, expressions are stored in Reverse Polish 128852e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// Notation, with each of the subexpressions preceding the 1289919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis// expression they are stored in. Subexpressions are stored from last to first. 1290919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis// To evaluate expressions, we continue reading expressions and placing them on 1291919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis// the stack, with expressions having operands removing those operands from the 129252e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// stack. Evaluation terminates when we see a STMT_STOP record, and 129352e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// the single remaining expression on the stack is our result. 1294c43b54cbc10654ed59de797898042e1a05265246Sebastian RedlStmt *ASTReader::ReadStmtFromStream(llvm::BitstreamCursor &Cursor) { 1295919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1296919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis ReadingKindTracker ReadingKind(Read_Stmt, *this); 1297919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1298919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#ifndef NDEBUG 1299919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis unsigned PrevNumStmts = StmtStack.size(); 1300919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#endif 1301919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 13024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner RecordData Record; 13034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Idx; 130460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl ASTStmtReader Reader(*this, Cursor, Record, Idx); 13054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Stmt::EmptyShell Empty; 13064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner while (true) { 130852e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner unsigned Code = Cursor.ReadCode(); 13094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Code == llvm::bitc::END_BLOCK) { 131052e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner if (Cursor.ReadBlockEnd()) { 13113c7f4134603d04b44f997b43c0a9def270f25386Sebastian Redl Error("error at end of block in AST file"); 13124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner return 0; 13134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 13144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 13164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Code == llvm::bitc::ENTER_SUBBLOCK) { 13184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // No known subblocks, always skip them. 131952e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner Cursor.ReadSubBlockID(); 132052e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner if (Cursor.SkipBlock()) { 13213c7f4134603d04b44f997b43c0a9def270f25386Sebastian Redl Error("malformed block record in AST file"); 13224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner return 0; 13234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 13244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner continue; 13254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 13264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Code == llvm::bitc::DEFINE_ABBREV) { 132852e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner Cursor.ReadAbbrevRecord(); 13294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner continue; 13304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 13314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Stmt *S = 0; 13334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Idx = 0; 13344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Record.clear(); 13354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner bool Finished = false; 13368538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl switch ((StmtCode)Cursor.ReadRecord(Code, Record)) { 13378538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_STOP: 13384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Finished = true; 13394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13418538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_NULL_PTR: 13421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump S = 0; 13434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13458538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_NULL: 13464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) NullStmt(Empty); 13474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13498538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_COMPOUND: 13504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CompoundStmt(Empty); 13514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13538538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CASE: 13544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CaseStmt(Empty); 13554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13578538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_DEFAULT: 13584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) DefaultStmt(Empty); 13594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13618538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_LABEL: 13624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) LabelStmt(Empty); 13634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13658538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_IF: 13664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) IfStmt(Empty); 13674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13698538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_SWITCH: 13704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) SwitchStmt(Empty); 13714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13738538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_WHILE: 13744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) WhileStmt(Empty); 13754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13778538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_DO: 13784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) DoStmt(Empty); 13794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13801eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 13818538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_FOR: 13824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ForStmt(Empty); 13834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13858538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_GOTO: 13864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) GotoStmt(Empty); 13874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 13898538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_INDIRECT_GOTO: 13904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) IndirectGotoStmt(Empty); 13914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13938538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CONTINUE: 13944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ContinueStmt(Empty); 13954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 13964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13978538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_BREAK: 13984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BreakStmt(Empty); 13994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14018538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_RETURN: 14024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ReturnStmt(Empty); 14034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14058538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_DECL: 14064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) DeclStmt(Empty); 14074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14098538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_ASM: 14104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) AsmStmt(Empty); 14114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14138538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_PREDEFINED: 14144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) PredefinedExpr(Empty); 14154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14161eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 14178538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_DECL_REF: 1418663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis S = DeclRefExpr::CreateEmpty(*Context, 141960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*HasQualifier=*/Record[ASTStmtReader::NumExprFields], 142060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields + 1]); 14214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 14238538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_INTEGER_LITERAL: 14249996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis S = IntegerLiteral::Create(*Context, Empty); 14254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 14278538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_FLOATING_LITERAL: 14289996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis S = FloatingLiteral::Create(*Context, Empty); 14294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14301eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 14318538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_IMAGINARY_LITERAL: 14324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ImaginaryLiteral(Empty); 14334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14358538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_STRING_LITERAL: 14361eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump S = StringLiteral::CreateEmpty(*Context, 143760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields + 1]); 14384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14408538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CHARACTER_LITERAL: 14414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CharacterLiteral(Empty); 14424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14448538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_PAREN: 14454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ParenExpr(Empty); 14464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14488538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_PAREN_LIST: 144937bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis S = new (Context) ParenListExpr(Empty); 145037bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis break; 145137bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis 14528538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_UNARY_OPERATOR: 14534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) UnaryOperator(Empty); 14544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14568538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OFFSETOF: 14578ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor S = OffsetOfExpr::CreateEmpty(*Context, 145860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields], 145960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields + 1]); 14608ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 14618ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 14628538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_SIZEOF_ALIGN_OF: 14634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) SizeOfAlignOfExpr(Empty); 14644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14668538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_ARRAY_SUBSCRIPT: 14674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ArraySubscriptExpr(Empty); 14684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14708538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CALL: 1471ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis S = new (Context) CallExpr(*Context, Stmt::CallExprClass, Empty); 14724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14748538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_MEMBER: { 1475663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // We load everything here and fully initialize it at creation. 1476663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // That way we can use MemberExpr::Create and don't have to duplicate its 1477663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // logic with a MemberExpr::CreateEmpty. 1478663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1479663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis assert(Idx == 0); 1480663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis NestedNameSpecifier *NNS = 0; 1481663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis SourceRange QualifierRange; 1482663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis if (Record[Idx++]) { // HasQualifier. 1483663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis NNS = ReadNestedNameSpecifier(Record, Idx); 1484663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis QualifierRange = ReadSourceRange(Record, Idx); 1485663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 1486663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1487663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis TemplateArgumentListInfo ArgInfo; 1488663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis unsigned NumTemplateArgs = Record[Idx++]; 1489663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis if (NumTemplateArgs) { 1490663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis ArgInfo.setLAngleLoc(ReadSourceLocation(Record, Idx)); 1491663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis ArgInfo.setRAngleLoc(ReadSourceLocation(Record, Idx)); 1492663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis for (unsigned i = 0; i != NumTemplateArgs; ++i) 1493577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl ArgInfo.addArgument(ReadTemplateArgumentLoc(Cursor, Record, Idx)); 1494663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 1495663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1496663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis NamedDecl *FoundD = cast_or_null<NamedDecl>(GetDecl(Record[Idx++])); 1497663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis AccessSpecifier AS = (AccessSpecifier)Record[Idx++]; 1498663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis DeclAccessPair FoundDecl = DeclAccessPair::make(FoundD, AS); 1499663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1500663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis QualType T = GetType(Record[Idx++]); 1501663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis Expr *Base = ReadSubExpr(); 1502663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis ValueDecl *MemberD = cast<ValueDecl>(GetDecl(Record[Idx++])); 15032577743c5650c646fb705df01403707e94f2df04Abramo Bagnara // FIXME: read DeclarationNameLoc. 1504663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis SourceLocation MemberLoc = ReadSourceLocation(Record, Idx); 15052577743c5650c646fb705df01403707e94f2df04Abramo Bagnara DeclarationNameInfo MemberNameInfo(MemberD->getDeclName(), MemberLoc); 1506663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis bool IsArrow = Record[Idx++]; 1507663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1508663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis S = MemberExpr::Create(*Context, Base, IsArrow, NNS, QualifierRange, 15092577743c5650c646fb705df01403707e94f2df04Abramo Bagnara MemberD, FoundDecl, MemberNameInfo, 1510663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis NumTemplateArgs ? &ArgInfo : 0, T); 15114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 1512663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 15134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15148538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_BINARY_OPERATOR: 15154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BinaryOperator(Empty); 15164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15188538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_COMPOUND_ASSIGN_OPERATOR: 15194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CompoundAssignOperator(Empty); 15204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15228538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CONDITIONAL_OPERATOR: 15234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ConditionalOperator(Empty); 15244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15268538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_IMPLICIT_CAST: 1527f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = ImplicitCastExpr::CreateEmpty(*Context, 152860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 15294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15318538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CSTYLE_CAST: 1532f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CStyleCastExpr::CreateEmpty(*Context, 153360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 15344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15368538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_COMPOUND_LITERAL: 15374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CompoundLiteralExpr(Empty); 15384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15408538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_EXT_VECTOR_ELEMENT: 15414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ExtVectorElementExpr(Empty); 15424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15448538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_INIT_LIST: 1545709210feee317b8d6690dd1d15c2b74cfe55e261Ted Kremenek S = new (Context) InitListExpr(*getContext(), Empty); 15464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15488538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_DESIGNATED_INIT: 1549d1d64a027554b635d644957ef071ec04ea1f7063Chris Lattner S = DesignatedInitExpr::CreateEmpty(*Context, 155060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields] - 1); 15511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15548538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_IMPLICIT_VALUE_INIT: 15554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ImplicitValueInitExpr(Empty); 15564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15588538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_VA_ARG: 15594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) VAArgExpr(Empty); 15604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15628538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_ADDR_LABEL: 15634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) AddrLabelExpr(Empty); 15644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15668538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_STMT: 15674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) StmtExpr(Empty); 15684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15708538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_TYPES_COMPATIBLE: 15714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) TypesCompatibleExpr(Empty); 15724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15748538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CHOOSE: 15754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ChooseExpr(Empty); 15764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15788538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_GNU_NULL: 15794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) GNUNullExpr(Empty); 15804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15828538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_SHUFFLE_VECTOR: 15834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ShuffleVectorExpr(Empty); 15844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15868538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_BLOCK: 15874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BlockExpr(Empty); 15884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15908538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_BLOCK_DECL_REF: 15914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BlockDeclRefExpr(Empty); 15924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15931eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15948538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_STRING_LITERAL: 15954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCStringLiteral(Empty); 15964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15978538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_ENCODE: 15984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCEncodeExpr(Empty); 15994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16008538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_SELECTOR_EXPR: 16014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCSelectorExpr(Empty); 16024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16038538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_PROTOCOL_EXPR: 16044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCProtocolExpr(Empty); 16054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16068538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_IVAR_REF_EXPR: 16074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCIvarRefExpr(Empty); 16084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16098538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_PROPERTY_REF_EXPR: 16104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCPropertyRefExpr(Empty); 16114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16128538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_KVC_REF_EXPR: 161309105f52b1f28cbb1374c27c3c70f5517e2c465dFariborz Jahanian S = new (Context) ObjCImplicitSetterGetterRefExpr(Empty); 16144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16158538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_MESSAGE_EXPR: 161604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor S = ObjCMessageExpr::CreateEmpty(*Context, 161760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields]); 16184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16198538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_SUPER_EXPR: 16204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCSuperExpr(Empty); 16214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16228538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_ISA: 1623f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff S = new (Context) ObjCIsaExpr(Empty); 1624f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff break; 16258538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_FOR_COLLECTION: 16264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCForCollectionStmt(Empty); 16274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16288538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_CATCH: 16294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtCatchStmt(Empty); 16304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16318538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_FINALLY: 16324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtFinallyStmt(Empty); 16334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16348538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_AT_TRY: 16358f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor S = ObjCAtTryStmt::CreateEmpty(*Context, 163660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumStmtFields], 163760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumStmtFields + 1]); 16384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16398538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_AT_SYNCHRONIZED: 16404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtSynchronizedStmt(Empty); 16414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16428538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_AT_THROW: 16434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtThrowStmt(Empty); 16444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 16468538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CXX_CATCH: 16477cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S = new (Context) CXXCatchStmt(Empty); 16487cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis break; 16497cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 16508538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CXX_TRY: 16517cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S = CXXTryStmt::Create(*Context, Empty, 165260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumHandlers=*/Record[ASTStmtReader::NumStmtFields]); 16537cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis break; 16547cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 16558538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_OPERATOR_CALL: 1656ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis S = new (Context) CXXOperatorCallExpr(*Context, Empty); 1657ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis break; 16581817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner 16598538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_MEMBER_CALL: 16601817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner S = new (Context) CXXMemberCallExpr(*Context, Empty); 16611817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner break; 166239da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor 16638538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_CONSTRUCT: 16646d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis S = new (Context) CXXConstructExpr(Empty); 16656d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis break; 16666d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 16678538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_TEMPORARY_OBJECT: 16686d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis S = new (Context) CXXTemporaryObjectExpr(Empty); 166939da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor break; 1670ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 16718538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_STATIC_CAST: 1672f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXStaticCastExpr::CreateEmpty(*Context, 167360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1674ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1675ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 16768538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DYNAMIC_CAST: 1677f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXDynamicCastExpr::CreateEmpty(*Context, 167860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1679ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1680ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 16818538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_REINTERPRET_CAST: 1682f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXReinterpretCastExpr::CreateEmpty(*Context, 168360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1684ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1685ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 16868538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_CONST_CAST: 1687f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXConstCastExpr::CreateEmpty(*Context); 1688ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1689ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 16908538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_FUNCTIONAL_CAST: 1691f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXFunctionalCastExpr::CreateEmpty(*Context, 169260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1693ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1694ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 16958538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_BOOL_LITERAL: 1696eb7f96141f754150a92433286fa385910a22f494Sam Weinig S = new (Context) CXXBoolLiteralExpr(Empty); 1697eb7f96141f754150a92433286fa385910a22f494Sam Weinig break; 1698ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 16998538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_NULL_PTR_LITERAL: 1700eb7f96141f754150a92433286fa385910a22f494Sam Weinig S = new (Context) CXXNullPtrLiteralExpr(Empty); 1701eb7f96141f754150a92433286fa385910a22f494Sam Weinig break; 17028538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_TYPEID_EXPR: 170314ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner S = new (Context) CXXTypeidExpr(Empty, true); 170414ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner break; 17058538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_TYPEID_TYPE: 170614ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner S = new (Context) CXXTypeidExpr(Empty, false); 170714ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner break; 170801b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet case EXPR_CXX_UUIDOF_EXPR: 170901b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet S = new (Context) CXXUuidofExpr(Empty, true); 171001b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet break; 171101b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet case EXPR_CXX_UUIDOF_TYPE: 171201b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet S = new (Context) CXXUuidofExpr(Empty, false); 171301b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet break; 17148538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_THIS: 17152fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner S = new (Context) CXXThisExpr(Empty); 17162fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner break; 17178538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_THROW: 17182fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner S = new (Context) CXXThrowExpr(Empty); 17192fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner break; 17208538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DEFAULT_ARG: { 172160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl bool HasOtherExprStored = Record[ASTStmtReader::NumExprFields]; 17228a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis if (HasOtherExprStored) { 17238a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis Expr *SubExpr = ReadSubExpr(); 17248a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis S = CXXDefaultArgExpr::Create(*Context, SourceLocation(), 0, SubExpr); 17258a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis } else 17268a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis S = new (Context) CXXDefaultArgExpr(Empty); 1727030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner break; 17288a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis } 17298538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_BIND_TEMPORARY: 1730d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner S = new (Context) CXXBindTemporaryExpr(Empty); 1731d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner break; 1732e2ca6d4a2f41876930fbd304caa706452d2569d8Douglas Gregor 17338538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_SCALAR_VALUE_INIT: 1734ed8abf18329df67b0abcbb3a10458bd8c1d2a595Douglas Gregor S = new (Context) CXXScalarValueInitExpr(Empty); 17355921863d8f24084797863b5df37842113bac4352Chris Lattner break; 17368538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_NEW: 17375921863d8f24084797863b5df37842113bac4352Chris Lattner S = new (Context) CXXNewExpr(Empty); 17385921863d8f24084797863b5df37842113bac4352Chris Lattner break; 17398538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DELETE: 174095fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis S = new (Context) CXXDeleteExpr(Empty); 174195fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis break; 17428538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_PSEUDO_DESTRUCTOR: 1743de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis S = new (Context) CXXPseudoDestructorExpr(Empty); 1744de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis break; 17455921863d8f24084797863b5df37842113bac4352Chris Lattner 17468538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_EXPR_WITH_TEMPORARIES: 1747d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner S = new (Context) CXXExprWithTemporaries(Empty); 1748d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner break; 17498dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 17508538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DEPENDENT_SCOPE_MEMBER: 17518dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis S = CXXDependentScopeMemberExpr::CreateEmpty(*Context, 175260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields]); 17538dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis break; 17548dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 17558538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DEPENDENT_SCOPE_DECL_REF: 175612dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis S = DependentScopeDeclRefExpr::CreateEmpty(*Context, 175760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields]); 175812dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis break; 175912dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 17608538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNRESOLVED_CONSTRUCT: 17618dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis S = CXXUnresolvedConstructExpr::CreateEmpty(*Context, 176260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumArgs=*/Record[ASTStmtReader::NumExprFields]); 1763a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis break; 1764a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 17658538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNRESOLVED_MEMBER: 1766a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis S = UnresolvedMemberExpr::CreateEmpty(*Context, 176760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields]); 17688dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis break; 1769bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis 17708538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNRESOLVED_LOOKUP: 1771bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis S = UnresolvedLookupExpr::CreateEmpty(*Context, 177260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields]); 1773bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis break; 17746d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 17758538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNARY_TYPE_TRAIT: 17766d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis S = new (Context) UnaryTypeTraitExpr(Empty); 17776d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis break; 17786b219d082434394c1ac401390ec1d1967727815aSebastian Redl 17796b219d082434394c1ac401390ec1d1967727815aSebastian Redl case EXPR_CXX_NOEXCEPT: 17806b219d082434394c1ac401390ec1d1967727815aSebastian Redl S = new (Context) CXXNoexceptExpr(Empty); 17816b219d082434394c1ac401390ec1d1967727815aSebastian Redl break; 17824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 17836d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 17844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // We hit a STMT_STOP, so we're done with this expression. 17854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Finished) 17864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner ++NumStatementsRead; 17894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 1790919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis if (S) 1791919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Reader.Visit(S); 17924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(Idx == Record.size() && "Invalid deserialization of statement"); 17944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner StmtStack.push_back(S); 17954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 1796919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1797919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#ifndef NDEBUG 1798919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis assert(StmtStack.size() > PrevNumStmts && "Read too many sub stmts!"); 1799919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis assert(StmtStack.size() == PrevNumStmts + 1 && "Extra expressions on stack!"); 1800919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#endif 1801919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1802919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis return StmtStack.pop_back_val(); 18034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1804