ASTReaderStmt.cpp revision 5cee1195584fa8672253139c86e922daeda69b9e
1904c9c8389b65ee93a706ede911accd11e0b9d8eSebastian Redl//===--- ASTReaderStmt.cpp - Stmt/Expr Deserialization ----------*- C++ -*-===// 24c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// 34c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// The LLVM Compiler Infrastructure 44c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// 54c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// This file is distributed under the University of Illinois Open Source 64c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// License. See LICENSE.TXT for details. 74c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// 84c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner//===----------------------------------------------------------------------===// 94c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// 104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// Statement/expression deserialization. This implements the 11c43b54cbc10654ed59de797898042e1a05265246Sebastian Redl// ASTReader::ReadStmt method. 124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// 134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner//===----------------------------------------------------------------------===// 144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 156ab7cd853e9c15cf986a8a7c3db1f8d20e275409Sebastian Redl#include "clang/Serialization/ASTReader.h" 1639da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor#include "clang/AST/DeclCXX.h" 17c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor#include "clang/AST/DeclTemplate.h" 184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner#include "clang/AST/StmtVisitor.h" 194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattnerusing namespace clang; 208538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redlusing namespace clang::serialization; 214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 2237bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidisnamespace clang { 2317cfdeda476aa8899f0ccedd9cb9cdb76e89b6b4Argyrios Kyrtzidis 2460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl class ASTStmtReader : public StmtVisitor<ASTStmtReader> { 25409448c832d27703146b70a1137d86b020f29863Douglas Gregor typedef ASTReader::RecordData RecordData; 26409448c832d27703146b70a1137d86b020f29863Douglas Gregor 27c43b54cbc10654ed59de797898042e1a05265246Sebastian Redl ASTReader &Reader; 2872a9ae18553bf8b6bdad84d2c54f73741a47e275Douglas Gregor Module &F; 29577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl llvm::BitstreamCursor &DeclsCursor; 30c43b54cbc10654ed59de797898042e1a05265246Sebastian Redl const ASTReader::RecordData &Record; 314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned &Idx; 324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 33409448c832d27703146b70a1137d86b020f29863Douglas Gregor SourceLocation ReadSourceLocation(const RecordData &R, unsigned &I) { 34c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return Reader.ReadSourceLocation(F, R, I); 35c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl } 36409448c832d27703146b70a1137d86b020f29863Douglas Gregor 37409448c832d27703146b70a1137d86b020f29863Douglas Gregor SourceRange ReadSourceRange(const RecordData &R, unsigned &I) { 38c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return Reader.ReadSourceRange(F, R, I); 39c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl } 40409448c832d27703146b70a1137d86b020f29863Douglas Gregor 41409448c832d27703146b70a1137d86b020f29863Douglas Gregor TypeSourceInfo *GetTypeSourceInfo(const RecordData &R, unsigned &I) { 42c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return Reader.GetTypeSourceInfo(F, R, I); 43c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl } 44409448c832d27703146b70a1137d86b020f29863Douglas Gregor 45409448c832d27703146b70a1137d86b020f29863Douglas Gregor serialization::DeclID ReadDeclID(const RecordData &R, unsigned &I) { 46409448c832d27703146b70a1137d86b020f29863Douglas Gregor return Reader.ReadDeclID(F, R, I); 47409448c832d27703146b70a1137d86b020f29863Douglas Gregor } 48409448c832d27703146b70a1137d86b020f29863Douglas Gregor 49409448c832d27703146b70a1137d86b020f29863Douglas Gregor Decl *ReadDecl(const RecordData &R, unsigned &I) { 50409448c832d27703146b70a1137d86b020f29863Douglas Gregor return Reader.ReadDecl(F, R, I); 51409448c832d27703146b70a1137d86b020f29863Douglas Gregor } 52409448c832d27703146b70a1137d86b020f29863Douglas Gregor 53409448c832d27703146b70a1137d86b020f29863Douglas Gregor template<typename T> 54409448c832d27703146b70a1137d86b020f29863Douglas Gregor T *ReadDeclAs(const RecordData &R, unsigned &I) { 55409448c832d27703146b70a1137d86b020f29863Douglas Gregor return Reader.ReadDeclAs<T>(F, R, I); 56409448c832d27703146b70a1137d86b020f29863Douglas Gregor } 57409448c832d27703146b70a1137d86b020f29863Douglas Gregor 584045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis void ReadDeclarationNameLoc(DeclarationNameLoc &DNLoc, DeclarationName Name, 594045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis const ASTReader::RecordData &R, unsigned &I) { 604045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis Reader.ReadDeclarationNameLoc(F, DNLoc, Name, R, I); 614045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis } 62409448c832d27703146b70a1137d86b020f29863Douglas Gregor 634045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis void ReadDeclarationNameInfo(DeclarationNameInfo &NameInfo, 644045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis const ASTReader::RecordData &R, unsigned &I) { 654045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis Reader.ReadDeclarationNameInfo(F, NameInfo, R, I); 664045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis } 67c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl 684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner public: 6972a9ae18553bf8b6bdad84d2c54f73741a47e275Douglas Gregor ASTStmtReader(ASTReader &Reader, Module &F, 70c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl llvm::BitstreamCursor &Cursor, 71c43b54cbc10654ed59de797898042e1a05265246Sebastian Redl const ASTReader::RecordData &Record, unsigned &Idx) 72c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl : Reader(Reader), F(F), DeclsCursor(Cursor), Record(Record), Idx(Idx) { } 734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// \brief The number of record fields required for the Stmt class 754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// itself. 764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner static const unsigned NumStmtFields = 0; 774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// \brief The number of record fields required for the Expr class 794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner /// itself. 80561f81243f665cf2001caadc45df505f826b72d6Douglas Gregor static const unsigned NumExprFields = NumStmtFields + 7; 8136c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis 8236c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis /// \brief Read and initialize a ExplicitTemplateArgumentList structure. 83919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void ReadExplicitTemplateArgumentList(ExplicitTemplateArgumentList &ArgList, 84919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis unsigned NumTemplateArgs); 85919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 86919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis void VisitStmt(Stmt *S); 877110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall#define STMT(Type, Base) \ 887110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall void Visit##Type(Type *); 897110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall#include "clang/AST/StmtNodes.inc" 904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner }; 914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 9360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader:: 9436c76f0bea0d3595a25a5362225c642019cc3176Argyrios KyrtzidisReadExplicitTemplateArgumentList(ExplicitTemplateArgumentList &ArgList, 95919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis unsigned NumTemplateArgs) { 9636c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis TemplateArgumentListInfo ArgInfo; 97c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.setLAngleLoc(ReadSourceLocation(Record, Idx)); 98c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.setRAngleLoc(ReadSourceLocation(Record, Idx)); 9936c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis for (unsigned i = 0; i != NumTemplateArgs; ++i) 100577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl ArgInfo.addArgument( 101c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl Reader.ReadTemplateArgumentLoc(F, Record, Idx)); 10236c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis ArgList.initializeFrom(ArgInfo); 10336c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis} 10436c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis 10560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitStmt(Stmt *S) { 1064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(Idx == NumStmtFields && "Incorrect statement field count"); 1074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 10960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitNullStmt(NullStmt *S) { 1104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 111c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setSemiLoc(ReadSourceLocation(Record, Idx)); 112b7d98d35ea723624345f06e5895ddce2e0388ef0Argyrios Kyrtzidis S->LeadingEmptyMacro = ReadSourceLocation(Record, Idx); 1134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 11560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCompoundStmt(CompoundStmt *S) { 1164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 1175f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner SmallVector<Stmt *, 16> Stmts; 1184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumStmts = Record[Idx++]; 119919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis while (NumStmts--) 120d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Stmts.push_back(Reader.ReadSubStmt()); 121919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis S->setStmts(*Reader.getContext(), Stmts.data(), Stmts.size()); 122c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setLBracLoc(ReadSourceLocation(Record, Idx)); 123c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRBracLoc(ReadSourceLocation(Record, Idx)); 1244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 12660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitSwitchCase(SwitchCase *S) { 1274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 1284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Reader.RecordSwitchCaseID(S, Record[Idx++]); 1294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 13160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCaseStmt(CaseStmt *S) { 1324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitSwitchCase(S); 133d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setLHS(Reader.ReadSubExpr()); 134d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setRHS(Reader.ReadSubExpr()); 135d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSubStmt(Reader.ReadSubStmt()); 136c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setCaseLoc(ReadSourceLocation(Record, Idx)); 137c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setEllipsisLoc(ReadSourceLocation(Record, Idx)); 138c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setColonLoc(ReadSourceLocation(Record, Idx)); 1394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDefaultStmt(DefaultStmt *S) { 1424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitSwitchCase(S); 143d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSubStmt(Reader.ReadSubStmt()); 144c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setDefaultLoc(ReadSourceLocation(Record, Idx)); 145c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setColonLoc(ReadSourceLocation(Record, Idx)); 1464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitLabelStmt(LabelStmt *S) { 1494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 150409448c832d27703146b70a1137d86b020f29863Douglas Gregor LabelDecl *LD = ReadDeclAs<LabelDecl>(Record, Idx); 151ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner LD->setStmt(S); 152ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner S->setDecl(LD); 153d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSubStmt(Reader.ReadSubStmt()); 154c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setIdentLoc(ReadSourceLocation(Record, Idx)); 1554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitIfStmt(IfStmt *S) { 1584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 159409448c832d27703146b70a1137d86b020f29863Douglas Gregor S->setConditionVariable(*Reader.getContext(), 160409448c832d27703146b70a1137d86b020f29863Douglas Gregor ReadDeclAs<VarDecl>(Record, Idx)); 161d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 162d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setThen(Reader.ReadSubStmt()); 163d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setElse(Reader.ReadSubStmt()); 164c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setIfLoc(ReadSourceLocation(Record, Idx)); 165c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setElseLoc(ReadSourceLocation(Record, Idx)); 1664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitSwitchStmt(SwitchStmt *S) { 1694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 17043dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor S->setConditionVariable(*Reader.getContext(), 171409448c832d27703146b70a1137d86b020f29863Douglas Gregor ReadDeclAs<VarDecl>(Record, Idx)); 172d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 173d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 174c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setSwitchLoc(ReadSourceLocation(Record, Idx)); 175559fb554602bedb57dbbf3cc14ac8a38264b4547Ted Kremenek if (Record[Idx++]) 176559fb554602bedb57dbbf3cc14ac8a38264b4547Ted Kremenek S->setAllEnumCasesCovered(); 177559fb554602bedb57dbbf3cc14ac8a38264b4547Ted Kremenek 1784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SwitchCase *PrevSC = 0; 1794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned N = Record.size(); Idx != N; ++Idx) { 1804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SwitchCase *SC = Reader.getSwitchCaseWithID(Record[Idx]); 1814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (PrevSC) 1824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner PrevSC->setNextSwitchCase(SC); 1834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner else 1844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setSwitchCaseList(SC); 1851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner PrevSC = SC; 1874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 1884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 19060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitWhileStmt(WhileStmt *S) { 1914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 19243dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor S->setConditionVariable(*Reader.getContext(), 193409448c832d27703146b70a1137d86b020f29863Douglas Gregor ReadDeclAs<VarDecl>(Record, Idx)); 194409448c832d27703146b70a1137d86b020f29863Douglas Gregor 195d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 196d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 197c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setWhileLoc(ReadSourceLocation(Record, Idx)); 1984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 1994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 20060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDoStmt(DoStmt *S) { 2014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 202d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 203d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 204c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setDoLoc(ReadSourceLocation(Record, Idx)); 205c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setWhileLoc(ReadSourceLocation(Record, Idx)); 206c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 2074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 20960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitForStmt(ForStmt *S) { 2104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 211d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setInit(Reader.ReadSubStmt()); 212d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCond(Reader.ReadSubExpr()); 21343dec6bbde2d0a16c35978983761c8b7030c8e18Douglas Gregor S->setConditionVariable(*Reader.getContext(), 214409448c832d27703146b70a1137d86b020f29863Douglas Gregor ReadDeclAs<VarDecl>(Record, Idx)); 215d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setInc(Reader.ReadSubExpr()); 216d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 217c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setForLoc(ReadSourceLocation(Record, Idx)); 218c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setLParenLoc(ReadSourceLocation(Record, Idx)); 219c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 2204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 22260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitGotoStmt(GotoStmt *S) { 2234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 224409448c832d27703146b70a1137d86b020f29863Douglas Gregor S->setLabel(ReadDeclAs<LabelDecl>(Record, Idx)); 225c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setGotoLoc(ReadSourceLocation(Record, Idx)); 226c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setLabelLoc(ReadSourceLocation(Record, Idx)); 2274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 22960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitIndirectGotoStmt(IndirectGotoStmt *S) { 2304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 231c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setGotoLoc(ReadSourceLocation(Record, Idx)); 232c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setStarLoc(ReadSourceLocation(Record, Idx)); 233d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setTarget(Reader.ReadSubExpr()); 2344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 23660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitContinueStmt(ContinueStmt *S) { 2374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 238c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setContinueLoc(ReadSourceLocation(Record, Idx)); 2394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 24160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBreakStmt(BreakStmt *S) { 2424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 243c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setBreakLoc(ReadSourceLocation(Record, Idx)); 2444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 24660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitReturnStmt(ReturnStmt *S) { 2474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 248d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setRetValue(Reader.ReadSubExpr()); 249c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setReturnLoc(ReadSourceLocation(Record, Idx)); 250409448c832d27703146b70a1137d86b020f29863Douglas Gregor S->setNRVOCandidate(ReadDeclAs<VarDecl>(Record, Idx)); 2514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 25360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDeclStmt(DeclStmt *S) { 2544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 255c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setStartLoc(ReadSourceLocation(Record, Idx)); 256c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setEndLoc(ReadSourceLocation(Record, Idx)); 2574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 2584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Idx + 1 == Record.size()) { 2594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Single declaration 260409448c832d27703146b70a1137d86b020f29863Douglas Gregor S->setDeclGroup(DeclGroupRef(ReadDecl(Record, Idx))); 2614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } else { 2625f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner SmallVector<Decl *, 16> Decls; 263409448c832d27703146b70a1137d86b020f29863Douglas Gregor Decls.reserve(Record.size() - Idx); 264409448c832d27703146b70a1137d86b020f29863Douglas Gregor for (unsigned N = Record.size(); Idx != N; ) 265409448c832d27703146b70a1137d86b020f29863Douglas Gregor Decls.push_back(ReadDecl(Record, Idx)); 266d1d64a027554b635d644957ef071ec04ea1f7063Chris Lattner S->setDeclGroup(DeclGroupRef(DeclGroup::Create(*Reader.getContext(), 26775fdb2377604e53678102076991bea345ace4692Douglas Gregor Decls.data(), 26875fdb2377604e53678102076991bea345ace4692Douglas Gregor Decls.size()))); 2694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 2704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 27260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitAsmStmt(AsmStmt *S) { 2734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 2744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumOutputs = Record[Idx++]; 2754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumInputs = Record[Idx++]; 2764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumClobbers = Record[Idx++]; 277c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAsmLoc(ReadSourceLocation(Record, Idx)); 278c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 2794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setVolatile(Record[Idx++]); 2804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S->setSimple(Record[Idx++]); 2813b11fd3b52e7b88233c602407c151d07cb093e75Mike Stump S->setMSAsm(Record[Idx++]); 2821eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 283d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setAsmString(cast_or_null<StringLiteral>(Reader.ReadSubStmt())); 2844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 2854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Outputs and inputs 2865f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner SmallVector<IdentifierInfo *, 16> Names; 2875f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner SmallVector<StringLiteral*, 16> Constraints; 2885f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner SmallVector<Stmt*, 16> Exprs; 2894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = NumOutputs + NumInputs; I != N; ++I) { 290ff93dbd887e40588ed55d135037bb9287488b285Anders Carlsson Names.push_back(Reader.GetIdentifierInfo(Record, Idx)); 291d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Constraints.push_back(cast_or_null<StringLiteral>(Reader.ReadSubStmt())); 292d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Exprs.push_back(Reader.ReadSubStmt()); 2934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 2944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 2954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Constraints 2965f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner SmallVector<StringLiteral*, 16> Clobbers; 2974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0; I != NumClobbers; ++I) 298d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Clobbers.push_back(cast_or_null<StringLiteral>(Reader.ReadSubStmt())); 299fdba9c069023f686e2608affde02c82131ee1cf8Anders Carlsson 300acb6bcb442936f3c14126fdd473307c17647cb84Anders Carlsson S->setOutputsAndInputsAndClobbers(*Reader.getContext(), 301acb6bcb442936f3c14126fdd473307c17647cb84Anders Carlsson Names.data(), Constraints.data(), 302fdba9c069023f686e2608affde02c82131ee1cf8Anders Carlsson Exprs.data(), NumOutputs, NumInputs, 303fdba9c069023f686e2608affde02c82131ee1cf8Anders Carlsson Clobbers.data(), NumClobbers); 3044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 30660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitExpr(Expr *E) { 3074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(E); 308393f249399fe30e9580e1529a7479489e90f3a57Douglas Gregor E->setType(Reader.readType(F, Record, Idx)); 3094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setTypeDependent(Record[Idx++]); 3104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setValueDependent(Record[Idx++]); 311561f81243f665cf2001caadc45df505f826b72d6Douglas Gregor E->setInstantiationDependent(Record[Idx++]); 312d0937224f383c7cc72c947119380f9713a070c73Douglas Gregor E->ExprBits.ContainsUnexpandedParameterPack = Record[Idx++]; 313f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall E->setValueKind(static_cast<ExprValueKind>(Record[Idx++])); 314f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall E->setObjectKind(static_cast<ExprObjectKind>(Record[Idx++])); 3154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(Idx == NumExprFields && "Incorrect expression field count"); 3164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 31860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitPredefinedExpr(PredefinedExpr *E) { 3194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 320c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 3214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setIdentType((PredefinedExpr::IdentType)Record[Idx++]); 3224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 32460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDeclRefExpr(DeclRefExpr *E) { 3254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 326663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 327cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth E->DeclRefExprBits.HasQualifier = Record[Idx++]; 3283aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth E->DeclRefExprBits.HasFoundDecl = Record[Idx++]; 329cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth E->DeclRefExprBits.HasExplicitTemplateArgs = Record[Idx++]; 330b0ca137bf399d956a3424816c238bc2532250d17Anders Carlsson unsigned NumTemplateArgs = 0; 331cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth if (E->hasExplicitTemplateArgs()) 332b0ca137bf399d956a3424816c238bc2532250d17Anders Carlsson NumTemplateArgs = Record[Idx++]; 333b0ca137bf399d956a3424816c238bc2532250d17Anders Carlsson 334cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth if (E->hasQualifier()) 3356857c3e12c86fd0271eb46baab5b18756a94f4cbChandler Carruth E->getInternalQualifierLoc() 33640d96a69c0e1e8c10f92d450c305a7aae696ca9cDouglas Gregor = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx); 337663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 3383aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth if (E->hasFoundDecl()) 339409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->getInternalFoundDecl() = ReadDeclAs<NamedDecl>(Record, Idx); 3403aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth 341cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth if (E->hasExplicitTemplateArgs()) 342096832c5ed5b9106fa177ebc148489760c3bc496John McCall ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 343663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis NumTemplateArgs); 344663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 345409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setDecl(ReadDeclAs<ValueDecl>(Record, Idx)); 346c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 3474045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameLoc(E->DNLoc, E->getDecl()->getDeclName(), Record, Idx); 3484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 35060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitIntegerLiteral(IntegerLiteral *E) { 3514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 352c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 3539996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis E->setValue(*Reader.getContext(), Reader.ReadAPInt(Record, Idx)); 3544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 35660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitFloatingLiteral(FloatingLiteral *E) { 3574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 3589996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis E->setValue(*Reader.getContext(), Reader.ReadAPFloat(Record, Idx)); 3594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setExact(Record[Idx++]); 360c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 3614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 36360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitImaginaryLiteral(ImaginaryLiteral *E) { 3644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 365d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 3664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 36860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitStringLiteral(StringLiteral *E) { 3694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 3704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Len = Record[Idx++]; 3711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump assert(Record[Idx] == E->getNumConcatenated() && 3724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner "Wrong number of concatenated tokens!"); 3734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner ++Idx; 3745cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor E->Kind = static_cast<StringLiteral::StringKind>(Record[Idx++]); 3753e2193ce5feb2feb092e5ae615e85148e06e9fd2Anders Carlsson E->IsPascal = Record[Idx++]; 3764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 3771eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // Read string data 378b648023da23e8b227cdda57a241db4c6f368726bDaniel Dunbar llvm::SmallString<16> Str(&Record[Idx], &Record[Idx] + Len); 379b648023da23e8b227cdda57a241db4c6f368726bDaniel Dunbar E->setString(*Reader.getContext(), Str.str()); 3804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Idx += Len; 3814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 3824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Read source locations 3834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = E->getNumConcatenated(); I != N; ++I) 384c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setStrTokenLoc(I, ReadSourceLocation(Record, Idx)); 3854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 38760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCharacterLiteral(CharacterLiteral *E) { 3884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 3894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setValue(Record[Idx++]); 390c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 3915cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor E->setKind(static_cast<CharacterLiteral::CharacterKind>(Record[Idx++])); 3924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 39460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitParenExpr(ParenExpr *E) { 3954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 396c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParen(ReadSourceLocation(Record, Idx)); 397c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParen(ReadSourceLocation(Record, Idx)); 398d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 3994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 40160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitParenListExpr(ParenListExpr *E) { 40237bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis VisitExpr(E); 40337bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis unsigned NumExprs = Record[Idx++]; 40437bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->Exprs = new (*Reader.getContext()) Stmt*[NumExprs]; 40537bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis for (unsigned i = 0; i != NumExprs; ++i) 40637bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->Exprs[i] = Reader.ReadSubStmt(); 40737bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->NumExprs = NumExprs; 408c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->LParenLoc = ReadSourceLocation(Record, Idx); 409c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->RParenLoc = ReadSourceLocation(Record, Idx); 41037bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis} 41137bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis 41260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnaryOperator(UnaryOperator *E) { 4134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 414d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 4154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setOpcode((UnaryOperator::Opcode)Record[Idx++]); 416c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 4174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 41960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitOffsetOfExpr(OffsetOfExpr *E) { 4208ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor typedef OffsetOfExpr::OffsetOfNode Node; 4218ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor VisitExpr(E); 4228ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor assert(E->getNumComponents() == Record[Idx]); 4238ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor ++Idx; 4248ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor assert(E->getNumExpressions() == Record[Idx]); 4258ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor ++Idx; 426c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 427c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 428c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeSourceInfo(GetTypeSourceInfo(Record, Idx)); 4298ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor for (unsigned I = 0, N = E->getNumComponents(); I != N; ++I) { 4308ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Node::Kind Kind = static_cast<Node::Kind>(Record[Idx++]); 431c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation Start = ReadSourceLocation(Record, Idx); 432c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation End = ReadSourceLocation(Record, Idx); 4338ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor switch (Kind) { 4348ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case Node::Array: 4358ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor E->setComponent(I, Node(Start, Record[Idx++], End)); 4368ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 4378ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 4388ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case Node::Field: 439409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setComponent(I, Node(Start, ReadDeclAs<FieldDecl>(Record, Idx), End)); 4408ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 4418ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 4428ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case Node::Identifier: 4438ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor E->setComponent(I, Node(Start, Reader.GetIdentifier(Record[Idx++]), End)); 4448ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 445cc8a5d5f90bbbbcb46f342117b851b7e07ec34f1Douglas Gregor 446afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis case Node::Base: { 447afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis CXXBaseSpecifier *Base = new (*Reader.getContext()) CXXBaseSpecifier(); 448c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl *Base = Reader.ReadCXXBaseSpecifier(F, Record, Idx); 449afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis E->setComponent(I, Node(Base)); 450cc8a5d5f90bbbbcb46f342117b851b7e07ec34f1Douglas Gregor break; 4518ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor } 452afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis } 4538ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor } 4548ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 4558ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor for (unsigned I = 0, N = E->getNumExpressions(); I != N; ++I) 456d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setIndexExpr(I, Reader.ReadSubExpr()); 4578ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor} 4588ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 459f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbournevoid ASTStmtReader::VisitUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr *E) { 4604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 461f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbourne E->setKind(static_cast<UnaryExprOrTypeTrait>(Record[Idx++])); 4624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Record[Idx] == 0) { 463d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArgument(Reader.ReadSubExpr()); 4644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner ++Idx; 4654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } else { 466c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setArgument(GetTypeSourceInfo(Record, Idx)); 4674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 468c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 469c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 4704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 47260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitArraySubscriptExpr(ArraySubscriptExpr *E) { 4734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 474d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 475d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 476c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRBracketLoc(ReadSourceLocation(Record, Idx)); 4774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 47960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCallExpr(CallExpr *E) { 4804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 481d1d64a027554b635d644957ef071ec04ea1f7063Chris Lattner E->setNumArgs(*Reader.getContext(), Record[Idx++]); 482c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 483d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setCallee(Reader.ReadSubExpr()); 4844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 485d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 4864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 4887110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtReader::VisitCXXMemberCallExpr(CXXMemberCallExpr *E) { 4897110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitCallExpr(E); 4907110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 4917110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 49260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitMemberExpr(MemberExpr *E) { 493663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // Don't call VisitExpr, this is fully initialized at creation. 494663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis assert(E->getStmtClass() == Stmt::MemberExprClass && 495663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis "It's a subclass, we must advance Idx!"); 4964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 49860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCIsaExpr(ObjCIsaExpr *E) { 499f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff VisitExpr(E); 500d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 501c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setIsaMemberLoc(ReadSourceLocation(Record, Idx)); 502f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff E->setArrow(Record[Idx++]); 503f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff} 504f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff 505f85e193739c953358c865005855253af4f68a497John McCallvoid ASTStmtReader:: 506f85e193739c953358c865005855253af4f68a497John McCallVisitObjCIndirectCopyRestoreExpr(ObjCIndirectCopyRestoreExpr *E) { 507f85e193739c953358c865005855253af4f68a497John McCall VisitExpr(E); 508f85e193739c953358c865005855253af4f68a497John McCall E->Operand = Reader.ReadSubExpr(); 509f85e193739c953358c865005855253af4f68a497John McCall E->setShouldCopy(Record[Idx++]); 510f85e193739c953358c865005855253af4f68a497John McCall} 511f85e193739c953358c865005855253af4f68a497John McCall 512f85e193739c953358c865005855253af4f68a497John McCallvoid ASTStmtReader::VisitObjCBridgedCastExpr(ObjCBridgedCastExpr *E) { 513f85e193739c953358c865005855253af4f68a497John McCall VisitExplicitCastExpr(E); 514f85e193739c953358c865005855253af4f68a497John McCall E->LParenLoc = ReadSourceLocation(Record, Idx); 515f85e193739c953358c865005855253af4f68a497John McCall E->BridgeKeywordLoc = ReadSourceLocation(Record, Idx); 516f85e193739c953358c865005855253af4f68a497John McCall E->Kind = Record[Idx++]; 517f85e193739c953358c865005855253af4f68a497John McCall} 518f85e193739c953358c865005855253af4f68a497John McCall 51960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCastExpr(CastExpr *E) { 5204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 521f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall unsigned NumBaseSpecs = Record[Idx++]; 522f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall assert(NumBaseSpecs == E->path_size()); 523d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 524cdef2b75aa60cde1ca00e0aa3f89139ac89c6ae4Anders Carlsson E->setCastKind((CastExpr::CastKind)Record[Idx++]); 525f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall CastExpr::path_iterator BaseI = E->path_begin(); 5260745d0a648b75bd304045309276c70a755adaafbArgyrios Kyrtzidis while (NumBaseSpecs--) { 5270745d0a648b75bd304045309276c70a755adaafbArgyrios Kyrtzidis CXXBaseSpecifier *BaseSpec = new (*Reader.getContext()) CXXBaseSpecifier; 528c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl *BaseSpec = Reader.ReadCXXBaseSpecifier(F, Record, Idx); 529f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall *BaseI++ = BaseSpec; 5300745d0a648b75bd304045309276c70a755adaafbArgyrios Kyrtzidis } 5314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 53360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBinaryOperator(BinaryOperator *E) { 5344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 535d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 536d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 5374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setOpcode((BinaryOperator::Opcode)Record[Idx++]); 538c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 5394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 54160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCompoundAssignOperator(CompoundAssignOperator *E) { 5424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitBinaryOperator(E); 543393f249399fe30e9580e1529a7479489e90f3a57Douglas Gregor E->setComputationLHSType(Reader.readType(F, Record, Idx)); 544393f249399fe30e9580e1529a7479489e90f3a57Douglas Gregor E->setComputationResultType(Reader.readType(F, Record, Idx)); 5454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 54760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitConditionalOperator(ConditionalOperator *E) { 5484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 54956ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[ConditionalOperator::COND] = Reader.ReadSubExpr(); 55056ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[ConditionalOperator::LHS] = Reader.ReadSubExpr(); 55156ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[ConditionalOperator::RHS] = Reader.ReadSubExpr(); 55256ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->QuestionLoc = ReadSourceLocation(Record, Idx); 55356ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->ColonLoc = ReadSourceLocation(Record, Idx); 55456ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall} 55556ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 55656ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCallvoid 55756ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCallASTStmtReader::VisitBinaryConditionalOperator(BinaryConditionalOperator *E) { 55856ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall VisitExpr(E); 55956ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->OpaqueValue = cast<OpaqueValueExpr>(Reader.ReadSubExpr()); 56056ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[BinaryConditionalOperator::COMMON] = Reader.ReadSubExpr(); 56156ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[BinaryConditionalOperator::COND] = Reader.ReadSubExpr(); 56256ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[BinaryConditionalOperator::LHS] = Reader.ReadSubExpr(); 56356ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[BinaryConditionalOperator::RHS] = Reader.ReadSubExpr(); 56456ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->QuestionLoc = ReadSourceLocation(Record, Idx); 56556ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->ColonLoc = ReadSourceLocation(Record, Idx); 56656ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 56756ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->getOpaqueValue()->setSourceExpr(E->getCommon()); 5684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 57060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitImplicitCastExpr(ImplicitCastExpr *E) { 5714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitCastExpr(E); 5724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 57460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitExplicitCastExpr(ExplicitCastExpr *E) { 5754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitCastExpr(E); 576c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeInfoAsWritten(GetTypeSourceInfo(Record, Idx)); 5774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 57960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCStyleCastExpr(CStyleCastExpr *E) { 5804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExplicitCastExpr(E); 581c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 582c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 5834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 58560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) { 5864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 587c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 588c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeSourceInfo(GetTypeSourceInfo(Record, Idx)); 589d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setInitializer(Reader.ReadSubExpr()); 5904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setFileScope(Record[Idx++]); 5914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 59360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitExtVectorElementExpr(ExtVectorElementExpr *E) { 5944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 595d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 5964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setAccessor(Reader.GetIdentifierInfo(Record, Idx)); 597c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAccessorLoc(ReadSourceLocation(Record, Idx)); 5984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 60060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitInitListExpr(InitListExpr *E) { 6014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 602d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSyntacticForm(cast_or_null<InitListExpr>(Reader.ReadSubStmt())); 603c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLBraceLoc(ReadSourceLocation(Record, Idx)); 604c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRBraceLoc(ReadSourceLocation(Record, Idx)); 6052ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis bool isArrayFiller = Record[Idx++]; 6062ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis Expr *filler = 0; 6072ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis if (isArrayFiller) { 6082ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis filler = Reader.ReadSubExpr(); 6092ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis E->ArrayFillerOrUnionFieldInit = filler; 6102ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis } else 611409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->ArrayFillerOrUnionFieldInit = ReadDeclAs<FieldDecl>(Record, Idx); 6124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->sawArrayRangeDesignator(Record[Idx++]); 6132ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis unsigned NumInits = Record[Idx++]; 6142ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis E->reserveInits(*Reader.getContext(), NumInits); 6152ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis if (isArrayFiller) { 6162ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis for (unsigned I = 0; I != NumInits; ++I) { 6172ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis Expr *init = Reader.ReadSubExpr(); 6182ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis E->updateInit(*Reader.getContext(), I, init ? init : filler); 6192ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis } 6202ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis } else { 6212ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis for (unsigned I = 0; I != NumInits; ++I) 6222ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis E->updateInit(*Reader.getContext(), I, Reader.ReadSubExpr()); 6232ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis } 6244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 62660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDesignatedInitExpr(DesignatedInitExpr *E) { 6274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner typedef DesignatedInitExpr::Designator Designator; 6284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 6304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumSubExprs = Record[Idx++]; 6314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(NumSubExprs == E->getNumSubExprs() && "Wrong number of subexprs"); 6324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0; I != NumSubExprs; ++I) 633d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(I, Reader.ReadSubExpr()); 634c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setEqualOrColonLoc(ReadSourceLocation(Record, Idx)); 6354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setGNUSyntax(Record[Idx++]); 6364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6375f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner SmallVector<Designator, 4> Designators; 6384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner while (Idx < Record.size()) { 6398538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl switch ((DesignatorTypes)Record[Idx++]) { 6408538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_FIELD_DECL: { 641409448c832d27703146b70a1137d86b020f29863Douglas Gregor FieldDecl *Field = ReadDeclAs<FieldDecl>(Record, Idx); 6421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation DotLoc 643c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation FieldLoc 645c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump Designators.push_back(Designator(Field->getIdentifier(), DotLoc, 6474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner FieldLoc)); 6484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.back().setField(Field); 6494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 6504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 6514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6528538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_FIELD_NAME: { 6534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner const IdentifierInfo *Name = Reader.GetIdentifierInfo(Record, Idx); 6541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation DotLoc 655c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6561eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation FieldLoc 657c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.push_back(Designator(Name, DotLoc, FieldLoc)); 6594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 6604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 6611eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 6628538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_ARRAY: { 6634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Index = Record[Idx++]; 6644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation LBracketLoc 665c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation RBracketLoc 667c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.push_back(Designator(Index, LBracketLoc, RBracketLoc)); 6694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 6704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 6714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6728538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_ARRAY_RANGE: { 6734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Index = Record[Idx++]; 6744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation LBracketLoc 675c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation EllipsisLoc 677c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation RBracketLoc 679c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.push_back(Designator(Index, LBracketLoc, EllipsisLoc, 6814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner RBracketLoc)); 6824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 6834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 6844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 6854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 686319d57f21600dd2c4d52ccc27bd12ce260b174e7Douglas Gregor E->setDesignators(*Reader.getContext(), 687319d57f21600dd2c4d52ccc27bd12ce260b174e7Douglas Gregor Designators.data(), Designators.size()); 6884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 69060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitImplicitValueInitExpr(ImplicitValueInitExpr *E) { 6914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 6924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 69460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitVAArgExpr(VAArgExpr *E) { 6954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 696d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 697c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setWrittenTypeInfo(GetTypeSourceInfo(Record, Idx)); 698c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setBuiltinLoc(ReadSourceLocation(Record, Idx)); 699c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 7004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 70260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitAddrLabelExpr(AddrLabelExpr *E) { 7034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 704c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAmpAmpLoc(ReadSourceLocation(Record, Idx)); 705c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLabelLoc(ReadSourceLocation(Record, Idx)); 706409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setLabel(ReadDeclAs<LabelDecl>(Record, Idx)); 7074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 70960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitStmtExpr(StmtExpr *E) { 7104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 711c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 712c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 713d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubStmt(cast_or_null<CompoundStmt>(Reader.ReadSubStmt())); 7144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 71660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitChooseExpr(ChooseExpr *E) { 7174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 718d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setCond(Reader.ReadSubExpr()); 719d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 720d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 721c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setBuiltinLoc(ReadSourceLocation(Record, Idx)); 722c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 7234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 72560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitGNUNullExpr(GNUNullExpr *E) { 7264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 727c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTokenLocation(ReadSourceLocation(Record, Idx)); 7284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 73060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitShuffleVectorExpr(ShuffleVectorExpr *E) { 7314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 7325f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner SmallVector<Expr *, 16> Exprs; 7334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumExprs = Record[Idx++]; 734919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis while (NumExprs--) 735d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Exprs.push_back(Reader.ReadSubExpr()); 736919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis E->setExprs(*Reader.getContext(), Exprs.data(), Exprs.size()); 737c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setBuiltinLoc(ReadSourceLocation(Record, Idx)); 738c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 7394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 74160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBlockExpr(BlockExpr *E) { 7424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 743409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setBlockDecl(ReadDeclAs<BlockDecl>(Record, Idx)); 7444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 74660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBlockDeclRefExpr(BlockDeclRefExpr *E) { 7474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 748409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setDecl(ReadDeclAs<VarDecl>(Record, Idx)); 749c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 7504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setByRef(Record[Idx++]); 7519b0b57c6f9996bfdb67248f6942dd23acfa36167Fariborz Jahanian E->setConstQualAdded(Record[Idx++]); 7524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 754f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbournevoid ASTStmtReader::VisitGenericSelectionExpr(GenericSelectionExpr *E) { 755f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne VisitExpr(E); 756f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->NumAssocs = Record[Idx++]; 757f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->AssocTypes = new (*Reader.getContext()) TypeSourceInfo*[E->NumAssocs]; 758f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->SubExprs = 759f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne new(*Reader.getContext()) Stmt*[GenericSelectionExpr::END_EXPR+E->NumAssocs]; 760f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne 761f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->SubExprs[GenericSelectionExpr::CONTROLLING] = Reader.ReadSubExpr(); 762f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne for (unsigned I = 0, N = E->getNumAssocs(); I != N; ++I) { 763f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->AssocTypes[I] = GetTypeSourceInfo(Record, Idx); 764f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->SubExprs[GenericSelectionExpr::END_EXPR+I] = Reader.ReadSubExpr(); 765f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne } 766f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->ResultIndex = Record[Idx++]; 767f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne 768f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->GenericLoc = ReadSourceLocation(Record, Idx); 769f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->DefaultLoc = ReadSourceLocation(Record, Idx); 770f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->RParenLoc = ReadSourceLocation(Record, Idx); 771f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne} 772f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne 7734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner//===----------------------------------------------------------------------===// 7744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// Objective-C Expressions and Statements 7754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 77660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCStringLiteral(ObjCStringLiteral *E) { 7774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 778d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setString(cast<StringLiteral>(Reader.ReadSubStmt())); 779c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 7804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 78260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCEncodeExpr(ObjCEncodeExpr *E) { 7834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 784c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setEncodedTypeSourceInfo(GetTypeSourceInfo(Record, Idx)); 785c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 786c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 7874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 78960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCSelectorExpr(ObjCSelectorExpr *E) { 7904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 7914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setSelector(Reader.GetSelector(Record, Idx)); 792c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 793c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 7944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 79660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCProtocolExpr(ObjCProtocolExpr *E) { 7974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 798409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setProtocol(ReadDeclAs<ObjCProtocolDecl>(Record, Idx)); 799c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 800c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 8014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 80360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) { 8044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 805409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setDecl(ReadDeclAs<ObjCIvarDecl>(Record, Idx)); 806c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 807d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 8084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setIsArrow(Record[Idx++]); 8094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setIsFreeIvar(Record[Idx++]); 8104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 81260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) { 8134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 81412f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall bool Implicit = Record[Idx++] != 0; 81512f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall if (Implicit) { 816409448c832d27703146b70a1137d86b020f29863Douglas Gregor ObjCMethodDecl *Getter = ReadDeclAs<ObjCMethodDecl>(Record, Idx); 817409448c832d27703146b70a1137d86b020f29863Douglas Gregor ObjCMethodDecl *Setter = ReadDeclAs<ObjCMethodDecl>(Record, Idx); 81812f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setImplicitProperty(Getter, Setter); 81912f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall } else { 820409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setExplicitProperty(ReadDeclAs<ObjCPropertyDecl>(Record, Idx)); 8218ac2d449820fd0df00fcbde5bf82165c1f49854dFariborz Jahanian } 822c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 82312f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setReceiverLocation(ReadSourceLocation(Record, Idx)); 82412f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall switch (Record[Idx++]) { 82512f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall case 0: 82612f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setBase(Reader.ReadSubExpr()); 82712f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall break; 82812f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall case 1: 829393f249399fe30e9580e1529a7479489e90f3a57Douglas Gregor E->setSuperReceiver(Reader.readType(F, Record, Idx)); 83012f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall break; 83112f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall case 2: 832409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setClassReceiver(ReadDeclAs<ObjCInterfaceDecl>(Record, Idx)); 83312f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall break; 83412f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall } 8354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 83760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCMessageExpr(ObjCMessageExpr *E) { 8384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 83904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor assert(Record[Idx] == E->getNumArgs()); 84004badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor ++Idx; 841f85e193739c953358c865005855253af4f68a497John McCall E->setDelegateInitCall(Record[Idx++]); 84204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor ObjCMessageExpr::ReceiverKind Kind 84304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor = static_cast<ObjCMessageExpr::ReceiverKind>(Record[Idx++]); 84404badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor switch (Kind) { 84504badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::Instance: 846d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setInstanceReceiver(Reader.ReadSubExpr()); 84704badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 84804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 84904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::Class: 850c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setClassReceiver(GetTypeSourceInfo(Record, Idx)); 85104badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 85204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 85304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::SuperClass: 85404badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::SuperInstance: { 855393f249399fe30e9580e1529a7479489e90f3a57Douglas Gregor QualType T = Reader.readType(F, Record, Idx); 856c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation SuperLoc = ReadSourceLocation(Record, Idx); 85704badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor E->setSuper(SuperLoc, T, Kind == ObjCMessageExpr::SuperInstance); 85804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 85904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor } 8604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 8614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 86204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor assert(Kind == E->getReceiverKind()); 86304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 86404badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor if (Record[Idx++]) 865409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setMethodDecl(ReadDeclAs<ObjCMethodDecl>(Record, Idx)); 86604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor else 86704badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor E->setSelector(Reader.GetSelector(Record, Idx)); 86804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 869f40f0d5a382395e0301d7dcbeaa2b8e90b8973b1Argyrios Kyrtzidis E->LBracLoc = ReadSourceLocation(Record, Idx); 870f40f0d5a382395e0301d7dcbeaa2b8e90b8973b1Argyrios Kyrtzidis E->RBracLoc = ReadSourceLocation(Record, Idx); 871f40f0d5a382395e0301d7dcbeaa2b8e90b8973b1Argyrios Kyrtzidis E->SelectorLoc = ReadSourceLocation(Record, Idx); 87204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 8734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 874d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 8754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 87760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCForCollectionStmt(ObjCForCollectionStmt *S) { 8784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 879d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setElement(Reader.ReadSubStmt()); 880d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCollection(Reader.ReadSubExpr()); 881d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 882c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setForLoc(ReadSourceLocation(Record, Idx)); 883c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 8844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 88660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtCatchStmt(ObjCAtCatchStmt *S) { 8874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 888d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCatchBody(Reader.ReadSubStmt()); 889409448c832d27703146b70a1137d86b020f29863Douglas Gregor S->setCatchParamDecl(ReadDeclAs<VarDecl>(Record, Idx)); 890c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtCatchLoc(ReadSourceLocation(Record, Idx)); 891c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 8924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 89460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *S) { 8954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 896d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setFinallyBody(Reader.ReadSubStmt()); 897c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtFinallyLoc(ReadSourceLocation(Record, Idx)); 8984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 900f85e193739c953358c865005855253af4f68a497John McCallvoid ASTStmtReader::VisitObjCAutoreleasePoolStmt(ObjCAutoreleasePoolStmt *S) { 901f85e193739c953358c865005855253af4f68a497John McCall VisitStmt(S); 902f85e193739c953358c865005855253af4f68a497John McCall S->setSubStmt(Reader.ReadSubStmt()); 903f85e193739c953358c865005855253af4f68a497John McCall S->setAtLoc(ReadSourceLocation(Record, Idx)); 904f85e193739c953358c865005855253af4f68a497John McCall} 905f85e193739c953358c865005855253af4f68a497John McCall 90660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtTryStmt(ObjCAtTryStmt *S) { 9074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 9088f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor assert(Record[Idx] == S->getNumCatchStmts()); 9098f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor ++Idx; 9108f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor bool HasFinally = Record[Idx++]; 911d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setTryBody(Reader.ReadSubStmt()); 912919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis for (unsigned I = 0, N = S->getNumCatchStmts(); I != N; ++I) 913d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCatchStmt(I, cast_or_null<ObjCAtCatchStmt>(Reader.ReadSubStmt())); 9148f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor 9158f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor if (HasFinally) 916d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setFinallyStmt(Reader.ReadSubStmt()); 917c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtTryLoc(ReadSourceLocation(Record, Idx)); 9184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 92060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *S) { 9214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 922d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSynchExpr(Reader.ReadSubStmt()); 923d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSynchBody(Reader.ReadSubStmt()); 924c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtSynchronizedLoc(ReadSourceLocation(Record, Idx)); 9254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 92760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtThrowStmt(ObjCAtThrowStmt *S) { 9284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 929d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setThrowExpr(Reader.ReadSubStmt()); 930c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setThrowLoc(ReadSourceLocation(Record, Idx)); 9314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 933ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 934ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis// C++ Expressions and Statements 9357cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 9367cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 93760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXCatchStmt(CXXCatchStmt *S) { 9387cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis VisitStmt(S); 939c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->CatchLoc = ReadSourceLocation(Record, Idx); 940409448c832d27703146b70a1137d86b020f29863Douglas Gregor S->ExceptionDecl = ReadDeclAs<VarDecl>(Record, Idx); 9417cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->HandlerBlock = Reader.ReadSubStmt(); 9427cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis} 9437cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 94460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXTryStmt(CXXTryStmt *S) { 9457cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis VisitStmt(S); 9467cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis assert(Record[Idx] == S->getNumHandlers() && "NumStmtFields is wrong ?"); 9477cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis ++Idx; 948c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->TryLoc = ReadSourceLocation(Record, Idx); 9497cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->getStmts()[0] = Reader.ReadSubStmt(); 9507cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis for (unsigned i = 0, e = S->getNumHandlers(); i != e; ++i) 9517cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->getStmts()[i + 1] = Reader.ReadSubStmt(); 9527cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis} 953ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis 954ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smithvoid ASTStmtReader::VisitCXXForRangeStmt(CXXForRangeStmt *S) { 955ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith VisitStmt(S); 956ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setForLoc(ReadSourceLocation(Record, Idx)); 957ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setColonLoc(ReadSourceLocation(Record, Idx)); 958ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setRParenLoc(ReadSourceLocation(Record, Idx)); 959ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setRangeStmt(Reader.ReadSubStmt()); 960ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setBeginEndStmt(Reader.ReadSubStmt()); 961ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setCond(Reader.ReadSubExpr()); 962ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setInc(Reader.ReadSubExpr()); 963ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setLoopVarStmt(Reader.ReadSubStmt()); 964ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setBody(Reader.ReadSubStmt()); 965ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith} 966ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith 96760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) { 968919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitCallExpr(E); 969ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis E->setOperator((OverloadedOperatorKind)Record[Idx++]); 970ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis} 971ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis 97260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXConstructExpr(CXXConstructExpr *E) { 97339da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor VisitExpr(E); 9746d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->NumArgs = Record[Idx++]; 9756d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis if (E->NumArgs) 9766d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->Args = new (*Reader.getContext()) Stmt*[E->NumArgs]; 9775e1b7c2f419544a88537f7ff4e32ed744ba7b44eArgyrios Kyrtzidis for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 978d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 979409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setConstructor(ReadDeclAs<CXXConstructorDecl>(Record, Idx)); 980c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 98139da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor E->setElidable(Record[Idx++]); 98216006c901315fa12a108b4e571f187f4b676e426Douglas Gregor E->setRequiresZeroInitialization(Record[Idx++]); 9833c9034cb7ff1d6c1e4ecd1b44c98f553df013c7cDouglas Gregor E->setConstructionKind((CXXConstructExpr::ConstructionKind)Record[Idx++]); 984428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->ParenRange = ReadSourceRange(Record, Idx); 98539da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor} 9864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 98760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E) { 9886d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis VisitCXXConstructExpr(E); 989c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Type = GetTypeSourceInfo(Record, Idx); 9906d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis} 9916d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 99260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXNamedCastExpr(CXXNamedCastExpr *E) { 993919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitExplicitCastExpr(E); 9941d5d0b9df6d2a3df338bc3e63000536406e7666cDouglas Gregor SourceRange R = ReadSourceRange(Record, Idx); 9951d5d0b9df6d2a3df338bc3e63000536406e7666cDouglas Gregor E->Loc = R.getBegin(); 9961d5d0b9df6d2a3df338bc3e63000536406e7666cDouglas Gregor E->RParenLoc = R.getEnd(); 997ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 998ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 99960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXStaticCastExpr(CXXStaticCastExpr *E) { 1000ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1001ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1002ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 100360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXDynamicCastExpr(CXXDynamicCastExpr *E) { 1004ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1005ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1006ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 100760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXReinterpretCastExpr(CXXReinterpretCastExpr *E) { 1008ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1009ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1010ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 101160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXConstCastExpr(CXXConstCastExpr *E) { 1012ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1013ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1014ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 101560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *E) { 1016919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitExplicitCastExpr(E); 1017c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeBeginLoc(ReadSourceLocation(Record, Idx)); 1018c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 1019ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1020ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 102160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E) { 1022eb7f96141f754150a92433286fa385910a22f494Sam Weinig VisitExpr(E); 1023eb7f96141f754150a92433286fa385910a22f494Sam Weinig E->setValue(Record[Idx++]); 1024c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 1025eb7f96141f754150a92433286fa385910a22f494Sam Weinig} 1026eb7f96141f754150a92433286fa385910a22f494Sam Weinig 102760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E) { 1028eb7f96141f754150a92433286fa385910a22f494Sam Weinig VisitExpr(E); 1029c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 1030eb7f96141f754150a92433286fa385910a22f494Sam Weinig} 1031eb7f96141f754150a92433286fa385910a22f494Sam Weinig 103260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXTypeidExpr(CXXTypeidExpr *E) { 103314ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner VisitExpr(E); 1034c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setSourceRange(ReadSourceRange(Record, Idx)); 103514ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner if (E->isTypeOperand()) { // typeid(int) 1036577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl E->setTypeOperandSourceInfo( 1037c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl GetTypeSourceInfo(Record, Idx)); 1038919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis return; 103914ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner } 104014ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 104114ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner // typeid(42+2) 1042d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setExprOperand(Reader.ReadSubExpr()); 104314ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner} 104414ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 104560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXThisExpr(CXXThisExpr *E) { 10462fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner VisitExpr(E); 1047c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 10482fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner E->setImplicit(Record[Idx++]); 10492fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner} 10502fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner 105160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXThrowExpr(CXXThrowExpr *E) { 10522fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner VisitExpr(E); 1053bca01b46850f867b2f4137f25c882022b58f8471Douglas Gregor E->ThrowLoc = ReadSourceLocation(Record, Idx); 1054bca01b46850f867b2f4137f25c882022b58f8471Douglas Gregor E->Op = Reader.ReadSubExpr(); 1055bca01b46850f867b2f4137f25c882022b58f8471Douglas Gregor E->IsThrownVariableInScope = Record[Idx++]; 10562fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner} 105714ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 105860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) { 1059030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner VisitExpr(E); 10608a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis 10618a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis assert(Record[Idx] == E->Param.getInt() && "We messed up at creation ?"); 10628a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis ++Idx; // HasOtherExprStored and SubExpr was handled during creation. 1063409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->Param.setPointer(ReadDeclAs<ParmVarDecl>(Record, Idx)); 1064c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Loc = ReadSourceLocation(Record, Idx); 1065d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner} 1066d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 106760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E) { 1068d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner VisitExpr(E); 1069409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setTemporary(Reader.ReadCXXTemporary(F, Record, Idx)); 1070d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 1071d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner} 1072d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 107360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E) { 10745921863d8f24084797863b5df37842113bac4352Chris Lattner VisitExpr(E); 1075c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->TypeInfo = GetTypeSourceInfo(Record, Idx); 1076c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->RParenLoc = ReadSourceLocation(Record, Idx); 10775921863d8f24084797863b5df37842113bac4352Chris Lattner} 10785921863d8f24084797863b5df37842113bac4352Chris Lattner 107960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXNewExpr(CXXNewExpr *E) { 10805921863d8f24084797863b5df37842113bac4352Chris Lattner VisitExpr(E); 10816ec278d1a354517e20f13a877481453ee7940c78John McCall E->GlobalNew = Record[Idx++]; 10826ec278d1a354517e20f13a877481453ee7940c78John McCall E->Initializer = Record[Idx++]; 10836ec278d1a354517e20f13a877481453ee7940c78John McCall E->UsualArrayDeleteWantsSize = Record[Idx++]; 10845921863d8f24084797863b5df37842113bac4352Chris Lattner bool isArray = Record[Idx++]; 10855921863d8f24084797863b5df37842113bac4352Chris Lattner unsigned NumPlacementArgs = Record[Idx++]; 10865921863d8f24084797863b5df37842113bac4352Chris Lattner unsigned NumCtorArgs = Record[Idx++]; 1087409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setOperatorNew(ReadDeclAs<FunctionDecl>(Record, Idx)); 1088409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setOperatorDelete(ReadDeclAs<FunctionDecl>(Record, Idx)); 1089409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setConstructor(ReadDeclAs<CXXConstructorDecl>(Record, Idx)); 1090c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->AllocatedTypeInfo = GetTypeSourceInfo(Record, Idx); 10914bd40318cbea15310a37343db46de96c4fcc15e6Douglas Gregor SourceRange TypeIdParens; 1092c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl TypeIdParens.setBegin(ReadSourceLocation(Record, Idx)); 1093c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl TypeIdParens.setEnd(ReadSourceLocation(Record, Idx)); 10944bd40318cbea15310a37343db46de96c4fcc15e6Douglas Gregor E->TypeIdParens = TypeIdParens; 1095428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->StartLoc = ReadSourceLocation(Record, Idx); 1096428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->EndLoc = ReadSourceLocation(Record, Idx); 1097428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->ConstructorLParen = ReadSourceLocation(Record, Idx); 1098428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->ConstructorRParen = ReadSourceLocation(Record, Idx); 1099428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth 11005921863d8f24084797863b5df37842113bac4352Chris Lattner E->AllocateArgsArray(*Reader.getContext(), isArray, NumPlacementArgs, 11015921863d8f24084797863b5df37842113bac4352Chris Lattner NumCtorArgs); 11025921863d8f24084797863b5df37842113bac4352Chris Lattner 11035921863d8f24084797863b5df37842113bac4352Chris Lattner // Install all the subexpressions. 11045921863d8f24084797863b5df37842113bac4352Chris Lattner for (CXXNewExpr::raw_arg_iterator I = E->raw_arg_begin(),e = E->raw_arg_end(); 11055921863d8f24084797863b5df37842113bac4352Chris Lattner I != e; ++I) 1106d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis *I = Reader.ReadSubStmt(); 11075921863d8f24084797863b5df37842113bac4352Chris Lattner} 11085921863d8f24084797863b5df37842113bac4352Chris Lattner 110960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXDeleteExpr(CXXDeleteExpr *E) { 111095fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis VisitExpr(E); 1111f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->GlobalDelete = Record[Idx++]; 1112f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->ArrayForm = Record[Idx++]; 11134076dacf1497fb95cb298b9d964fbdbdaf9bde6cArgyrios Kyrtzidis E->ArrayFormAsWritten = Record[Idx++]; 11146ec278d1a354517e20f13a877481453ee7940c78John McCall E->UsualArrayDeleteWantsSize = Record[Idx++]; 1115409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->OperatorDelete = ReadDeclAs<FunctionDecl>(Record, Idx); 1116f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->Argument = Reader.ReadSubExpr(); 1117c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Loc = ReadSourceLocation(Record, Idx); 111895fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis} 1119d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 112060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E) { 1121de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis VisitExpr(E); 1122de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 1123f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->Base = Reader.ReadSubExpr(); 1124f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->IsArrow = Record[Idx++]; 1125f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->OperatorLoc = ReadSourceLocation(Record, Idx); 1126f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx); 1127f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->ScopeType = GetTypeSourceInfo(Record, Idx); 1128f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->ColonColonLoc = ReadSourceLocation(Record, Idx); 1129f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->TildeLoc = ReadSourceLocation(Record, Idx); 1130de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 1131de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis IdentifierInfo *II = Reader.GetIdentifierInfo(Record, Idx); 1132de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis if (II) 1133c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setDestroyedType(II, ReadSourceLocation(Record, Idx)); 1134de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis else 1135c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setDestroyedType(GetTypeSourceInfo(Record, Idx)); 1136de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis} 1137de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 11384765fa05b5652fcc4356371c2f481d0ea9a1b007John McCallvoid ASTStmtReader::VisitExprWithCleanups(ExprWithCleanups *E) { 1139d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner VisitExpr(E); 1140d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner unsigned NumTemps = Record[Idx++]; 1141d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner if (NumTemps) { 1142d04ed416be7c55bddddab1fa3fd38a0113a6b3daTed Kremenek E->setNumTemporaries(*Reader.getContext(), NumTemps); 1143d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner for (unsigned i = 0; i != NumTemps; ++i) 1144409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setTemporary(i, Reader.ReadCXXTemporary(F, Record, Idx)); 1145d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner } 1146d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 1147030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner} 1148030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner 1149919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisvoid 115060adf4acf40b72227740bf966fb87eebddff3f37Sebastian RedlASTStmtReader::VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E){ 11518dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis VisitExpr(E); 11528dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 1153def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor if (Record[Idx++]) 1154096832c5ed5b9106fa177ebc148489760c3bc496John McCall ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 1155def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor Record[Idx++]); 11568dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 11577c3179cf463c3b3b8c21dbb955f933ba50b74f28Douglas Gregor E->Base = Reader.ReadSubExpr(); 1158393f249399fe30e9580e1529a7479489e90f3a57Douglas Gregor E->BaseType = Reader.readType(F, Record, Idx); 11597c3179cf463c3b3b8c21dbb955f933ba50b74f28Douglas Gregor E->IsArrow = Record[Idx++]; 11607c3179cf463c3b3b8c21dbb955f933ba50b74f28Douglas Gregor E->OperatorLoc = ReadSourceLocation(Record, Idx); 11617c3179cf463c3b3b8c21dbb955f933ba50b74f28Douglas Gregor E->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx); 1162409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->FirstQualifierFoundInScope = ReadDeclAs<NamedDecl>(Record, Idx); 11634045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameInfo(E->MemberNameInfo, Record, Idx); 11648dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis} 11658dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 1166919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisvoid 116760adf4acf40b72227740bf966fb87eebddff3f37Sebastian RedlASTStmtReader::VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) { 116812dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis VisitExpr(E); 116912dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 1170def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor if (Record[Idx++]) 1171def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 1172def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor Record[Idx++]); 117300cf3cc2718671aa48e8da264a523b0058a8591eDouglas Gregor 117400cf3cc2718671aa48e8da264a523b0058a8591eDouglas Gregor E->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx); 11754045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameInfo(E->NameInfo, Record, Idx); 117612dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis} 117712dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 1178919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisvoid 117960adf4acf40b72227740bf966fb87eebddff3f37Sebastian RedlASTStmtReader::VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E) { 11808dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis VisitExpr(E); 11818dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis assert(Record[Idx] == E->arg_size() && "Read wrong record during creation ?"); 11828dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis ++Idx; // NumArgs; 11838dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis for (unsigned I = 0, N = E->arg_size(); I != N; ++I) 1184d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 1185c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Type = GetTypeSourceInfo(Record, Idx); 1186c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 1187c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 11888dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis} 11898dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 119060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitOverloadExpr(OverloadExpr *E) { 1191a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis VisitExpr(E); 1192a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 1193def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor // Read the explicit template argument list, if available. 1194def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor if (Record[Idx++]) 1195919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 1196def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor Record[Idx++]); 1197a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 1198a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis unsigned NumDecls = Record[Idx++]; 1199a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis UnresolvedSet<8> Decls; 1200a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis for (unsigned i = 0; i != NumDecls; ++i) { 1201409448c832d27703146b70a1137d86b020f29863Douglas Gregor NamedDecl *D = ReadDeclAs<NamedDecl>(Record, Idx); 1202a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis AccessSpecifier AS = (AccessSpecifier)Record[Idx++]; 1203a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis Decls.addDecl(D, AS); 1204a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis } 1205a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis E->initializeResults(*Reader.getContext(), Decls.begin(), Decls.end()); 1206a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 12074045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameInfo(E->NameInfo, Record, Idx); 12084c9be89bb615ec07eb3ed507c8fa9d0baa8a5ad7Douglas Gregor E->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx); 1209a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis} 1210a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 121160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnresolvedMemberExpr(UnresolvedMemberExpr *E) { 1212919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitOverloadExpr(E); 12134c9be89bb615ec07eb3ed507c8fa9d0baa8a5ad7Douglas Gregor E->IsArrow = Record[Idx++]; 12144c9be89bb615ec07eb3ed507c8fa9d0baa8a5ad7Douglas Gregor E->HasUnresolvedUsing = Record[Idx++]; 12154c9be89bb615ec07eb3ed507c8fa9d0baa8a5ad7Douglas Gregor E->Base = Reader.ReadSubExpr(); 1216393f249399fe30e9580e1529a7479489e90f3a57Douglas Gregor E->BaseType = Reader.readType(F, Record, Idx); 12174c9be89bb615ec07eb3ed507c8fa9d0baa8a5ad7Douglas Gregor E->OperatorLoc = ReadSourceLocation(Record, Idx); 1218a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis} 1219a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 122060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E) { 1221919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitOverloadExpr(E); 12224c9be89bb615ec07eb3ed507c8fa9d0baa8a5ad7Douglas Gregor E->RequiresADL = Record[Idx++]; 1223ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith if (E->RequiresADL) 1224ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith E->StdIsAssociatedNamespace = Record[Idx++]; 12254c9be89bb615ec07eb3ed507c8fa9d0baa8a5ad7Douglas Gregor E->Overloaded = Record[Idx++]; 1226409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->NamingClass = ReadDeclAs<CXXRecordDecl>(Record, Idx); 1227bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis} 1228bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis 122960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnaryTypeTraitExpr(UnaryTypeTraitExpr *E) { 12306d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis VisitExpr(E); 12316d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->UTT = (UnaryTypeTrait)Record[Idx++]; 12320dfd848fa4c9664852ba8c929a8bd3fce93ddca2Sebastian Redl E->Value = (bool)Record[Idx++]; 1233c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceRange Range = ReadSourceRange(Record, Idx); 12346d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->Loc = Range.getBegin(); 12356d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->RParen = Range.getEnd(); 1236c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->QueriedType = GetTypeSourceInfo(Record, Idx); 12376d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis} 12386d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 12396ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichetvoid ASTStmtReader::VisitBinaryTypeTraitExpr(BinaryTypeTraitExpr *E) { 12406ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet VisitExpr(E); 12416ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->BTT = (BinaryTypeTrait)Record[Idx++]; 12426ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->Value = (bool)Record[Idx++]; 12436ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet SourceRange Range = ReadSourceRange(Record, Idx); 12446ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->Loc = Range.getBegin(); 12456ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->RParen = Range.getEnd(); 12466ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->LhsType = GetTypeSourceInfo(Record, Idx); 12476ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->RhsType = GetTypeSourceInfo(Record, Idx); 12486ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet} 12496ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet 125021ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegleyvoid ASTStmtReader::VisitArrayTypeTraitExpr(ArrayTypeTraitExpr *E) { 125121ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley VisitExpr(E); 125221ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley E->ATT = (ArrayTypeTrait)Record[Idx++]; 125321ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley E->Value = (unsigned int)Record[Idx++]; 125421ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley SourceRange Range = ReadSourceRange(Record, Idx); 125521ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley E->Loc = Range.getBegin(); 125621ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley E->RParen = Range.getEnd(); 125721ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley E->QueriedType = GetTypeSourceInfo(Record, Idx); 125821ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley} 125921ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley 1260552622067dc45013d240f73952fece703f5e63bdJohn Wiegleyvoid ASTStmtReader::VisitExpressionTraitExpr(ExpressionTraitExpr *E) { 1261552622067dc45013d240f73952fece703f5e63bdJohn Wiegley VisitExpr(E); 1262552622067dc45013d240f73952fece703f5e63bdJohn Wiegley E->ET = (ExpressionTrait)Record[Idx++]; 1263552622067dc45013d240f73952fece703f5e63bdJohn Wiegley E->Value = (bool)Record[Idx++]; 1264552622067dc45013d240f73952fece703f5e63bdJohn Wiegley SourceRange Range = ReadSourceRange(Record, Idx); 1265552622067dc45013d240f73952fece703f5e63bdJohn Wiegley E->QueriedExpression = Reader.ReadSubExpr(); 1266552622067dc45013d240f73952fece703f5e63bdJohn Wiegley E->Loc = Range.getBegin(); 1267552622067dc45013d240f73952fece703f5e63bdJohn Wiegley E->RParen = Range.getEnd(); 1268552622067dc45013d240f73952fece703f5e63bdJohn Wiegley} 1269552622067dc45013d240f73952fece703f5e63bdJohn Wiegley 12706b219d082434394c1ac401390ec1d1967727815aSebastian Redlvoid ASTStmtReader::VisitCXXNoexceptExpr(CXXNoexceptExpr *E) { 12716b219d082434394c1ac401390ec1d1967727815aSebastian Redl VisitExpr(E); 12725221d8f2da008689f7ff9476e6522bb2b63ec1a3Sebastian Redl E->Value = (bool)Record[Idx++]; 1273c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Range = ReadSourceRange(Record, Idx); 12745221d8f2da008689f7ff9476e6522bb2b63ec1a3Sebastian Redl E->Operand = Reader.ReadSubExpr(); 12756b219d082434394c1ac401390ec1d1967727815aSebastian Redl} 12766b219d082434394c1ac401390ec1d1967727815aSebastian Redl 1277be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregorvoid ASTStmtReader::VisitPackExpansionExpr(PackExpansionExpr *E) { 1278be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor VisitExpr(E); 1279be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor E->EllipsisLoc = ReadSourceLocation(Record, Idx); 128067fd1251aad51bb80d050b7fa5e506fef0ec8e02Douglas Gregor E->NumExpansions = Record[Idx++]; 1281be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor E->Pattern = Reader.ReadSubExpr(); 1282be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor} 1283be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor 1284ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregorvoid ASTStmtReader::VisitSizeOfPackExpr(SizeOfPackExpr *E) { 1285ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor VisitExpr(E); 1286ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor E->OperatorLoc = ReadSourceLocation(Record, Idx); 1287ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor E->PackLoc = ReadSourceLocation(Record, Idx); 1288ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor E->RParenLoc = ReadSourceLocation(Record, Idx); 1289ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor E->Length = Record[Idx++]; 1290409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->Pack = ReadDeclAs<NamedDecl>(Record, Idx); 1291ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor} 1292ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor 12937110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtReader::VisitSubstNonTypeTemplateParmExpr( 12947110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall SubstNonTypeTemplateParmExpr *E) { 12957110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitExpr(E); 1296409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->Param = ReadDeclAs<NonTypeTemplateParmDecl>(Record, Idx); 12977110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->NameLoc = ReadSourceLocation(Record, Idx); 12987110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->Replacement = Reader.ReadSubExpr(); 12997110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 13007110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 1301c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregorvoid ASTStmtReader::VisitSubstNonTypeTemplateParmPackExpr( 1302c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor SubstNonTypeTemplateParmPackExpr *E) { 1303c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor VisitExpr(E); 1304409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->Param = ReadDeclAs<NonTypeTemplateParmDecl>(Record, Idx); 1305c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor TemplateArgument ArgPack = Reader.ReadTemplateArgument(F, Record, Idx); 1306c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor if (ArgPack.getKind() != TemplateArgument::Pack) 1307c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor return; 1308c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor 1309c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor E->Arguments = ArgPack.pack_begin(); 1310c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor E->NumArguments = ArgPack.pack_size(); 1311c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor E->NameLoc = ReadSourceLocation(Record, Idx); 1312c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor} 1313c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor 131403e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregorvoid ASTStmtReader::VisitMaterializeTemporaryExpr(MaterializeTemporaryExpr *E) { 131503e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor VisitExpr(E); 131603e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor E->Temporary = Reader.ReadSubExpr(); 131703e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor} 131803e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor 13197cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCallvoid ASTStmtReader::VisitOpaqueValueExpr(OpaqueValueExpr *E) { 13207cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall VisitExpr(E); 132156ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall Idx++; // skip ID 1322b608b987718c6d841115464f79ab2d1820a63e17Douglas Gregor E->Loc = ReadSourceLocation(Record, Idx); 13237cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall} 13247cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall 1325e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne//===----------------------------------------------------------------------===// 13267110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall// Microsoft Expressions and Statements 13277110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall//===----------------------------------------------------------------------===// 13287110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtReader::VisitCXXUuidofExpr(CXXUuidofExpr *E) { 13297110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitExpr(E); 13307110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->setSourceRange(ReadSourceRange(Record, Idx)); 13317110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall if (E->isTypeOperand()) { // __uuidof(ComType) 13327110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->setTypeOperandSourceInfo( 13337110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall GetTypeSourceInfo(Record, Idx)); 13347110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall return; 13357110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall } 13367110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 13377110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall // __uuidof(expr) 13387110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->setExprOperand(Reader.ReadSubExpr()); 13397110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 13407110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 13417110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtReader::VisitSEHExceptStmt(SEHExceptStmt *S) { 13427110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitStmt(S); 13437110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->Loc = ReadSourceLocation(Record, Idx); 13447110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->Children[SEHExceptStmt::FILTER_EXPR] = Reader.ReadSubStmt(); 13457110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->Children[SEHExceptStmt::BLOCK] = Reader.ReadSubStmt(); 13467110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 13477110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 13487110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtReader::VisitSEHFinallyStmt(SEHFinallyStmt *S) { 13497110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitStmt(S); 13507110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->Loc = ReadSourceLocation(Record, Idx); 13517110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->Block = Reader.ReadSubStmt(); 13527110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 13537110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 13547110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtReader::VisitSEHTryStmt(SEHTryStmt *S) { 13557110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitStmt(S); 13567110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->IsCXXTry = Record[Idx++]; 13577110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->TryLoc = ReadSourceLocation(Record, Idx); 13587110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->Children[SEHTryStmt::TRY] = Reader.ReadSubStmt(); 13597110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->Children[SEHTryStmt::HANDLER] = Reader.ReadSubStmt(); 13607110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 13617110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 13627110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall//===----------------------------------------------------------------------===// 1363e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne// CUDA Expressions and Statements 1364e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne//===----------------------------------------------------------------------===// 1365e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne 1366e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbournevoid ASTStmtReader::VisitCUDAKernelCallExpr(CUDAKernelCallExpr *E) { 1367e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne VisitCallExpr(E); 1368e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne E->setConfig(cast<CallExpr>(Reader.ReadSubExpr())); 1369e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne} 1370e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne 13717110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall//===----------------------------------------------------------------------===// 13727110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall// OpenCL Expressions and Statements. 13737110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall//===----------------------------------------------------------------------===// 13747110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtReader::VisitAsTypeExpr(AsTypeExpr *E) { 13757110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitExpr(E); 13767110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->BuiltinLoc = ReadSourceLocation(Record, Idx); 13777110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->RParenLoc = ReadSourceLocation(Record, Idx); 13787110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->SrcExpr = Reader.ReadSubExpr(); 13797110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 13807110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 13817110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall//===----------------------------------------------------------------------===// 13827110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall// ASTReader Implementation 13837110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall//===----------------------------------------------------------------------===// 13847110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 138572a9ae18553bf8b6bdad84d2c54f73741a47e275Douglas GregorStmt *ASTReader::ReadStmt(Module &F) { 1386919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis switch (ReadingKind) { 1387919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis case Read_Decl: 1388919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis case Read_Type: 1389c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return ReadStmtFromStream(F); 1390919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis case Read_Stmt: 1391d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis return ReadSubStmt(); 1392919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis } 1393919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1394919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis llvm_unreachable("ReadingKind not set ?"); 1395919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis return 0; 1396919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis} 1397919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 139872a9ae18553bf8b6bdad84d2c54f73741a47e275Douglas GregorExpr *ASTReader::ReadExpr(Module &F) { 1399c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return cast_or_null<Expr>(ReadStmt(F)); 1400919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis} 1401030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner 1402c43b54cbc10654ed59de797898042e1a05265246Sebastian RedlExpr *ASTReader::ReadSubExpr() { 1403d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis return cast_or_null<Expr>(ReadSubStmt()); 1404d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis} 1405d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis 140652e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// Within the bitstream, expressions are stored in Reverse Polish 140752e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// Notation, with each of the subexpressions preceding the 1408919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis// expression they are stored in. Subexpressions are stored from last to first. 1409919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis// To evaluate expressions, we continue reading expressions and placing them on 1410919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis// the stack, with expressions having operands removing those operands from the 141152e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// stack. Evaluation terminates when we see a STMT_STOP record, and 141252e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// the single remaining expression on the stack is our result. 141372a9ae18553bf8b6bdad84d2c54f73741a47e275Douglas GregorStmt *ASTReader::ReadStmtFromStream(Module &F) { 1414919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1415919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis ReadingKindTracker ReadingKind(Read_Stmt, *this); 1416c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl llvm::BitstreamCursor &Cursor = F.DeclsCursor; 1417c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl 1418919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#ifndef NDEBUG 1419919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis unsigned PrevNumStmts = StmtStack.size(); 1420919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#endif 1421919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 14224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner RecordData Record; 14234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Idx; 1424c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ASTStmtReader Reader(*this, F, Cursor, Record, Idx); 14254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Stmt::EmptyShell Empty; 14264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner while (true) { 142852e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner unsigned Code = Cursor.ReadCode(); 14294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Code == llvm::bitc::END_BLOCK) { 143052e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner if (Cursor.ReadBlockEnd()) { 14313c7f4134603d04b44f997b43c0a9def270f25386Sebastian Redl Error("error at end of block in AST file"); 14324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner return 0; 14334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 14344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 14364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Code == llvm::bitc::ENTER_SUBBLOCK) { 14384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // No known subblocks, always skip them. 143952e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner Cursor.ReadSubBlockID(); 144052e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner if (Cursor.SkipBlock()) { 14413c7f4134603d04b44f997b43c0a9def270f25386Sebastian Redl Error("malformed block record in AST file"); 14424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner return 0; 14434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 14444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner continue; 14454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 14464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Code == llvm::bitc::DEFINE_ABBREV) { 144852e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner Cursor.ReadAbbrevRecord(); 14494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner continue; 14504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 14514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Stmt *S = 0; 14534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Idx = 0; 14544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Record.clear(); 14554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner bool Finished = false; 14568538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl switch ((StmtCode)Cursor.ReadRecord(Code, Record)) { 14578538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_STOP: 14584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Finished = true; 14594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14618538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_NULL_PTR: 14621eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump S = 0; 14634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14658538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_NULL: 14664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) NullStmt(Empty); 14674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14698538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_COMPOUND: 14704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CompoundStmt(Empty); 14714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14738538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CASE: 14744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CaseStmt(Empty); 14754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14778538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_DEFAULT: 14784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) DefaultStmt(Empty); 14794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14818538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_LABEL: 14824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) LabelStmt(Empty); 14834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14858538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_IF: 14864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) IfStmt(Empty); 14874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14898538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_SWITCH: 14904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) SwitchStmt(Empty); 14914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14938538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_WHILE: 14944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) WhileStmt(Empty); 14954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14978538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_DO: 14984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) DoStmt(Empty); 14994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15001eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15018538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_FOR: 15024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ForStmt(Empty); 15034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15058538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_GOTO: 15064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) GotoStmt(Empty); 15074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15098538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_INDIRECT_GOTO: 15104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) IndirectGotoStmt(Empty); 15114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15138538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CONTINUE: 15144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ContinueStmt(Empty); 15154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15178538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_BREAK: 15184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BreakStmt(Empty); 15194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15218538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_RETURN: 15224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ReturnStmt(Empty); 15234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15258538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_DECL: 15264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) DeclStmt(Empty); 15274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15298538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_ASM: 15304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) AsmStmt(Empty); 15314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15338538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_PREDEFINED: 15344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) PredefinedExpr(Empty); 15354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15361eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15378538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_DECL_REF: 15383aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth S = DeclRefExpr::CreateEmpty( 15393aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth *Context, 15403aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth /*HasQualifier=*/Record[ASTStmtReader::NumExprFields], 15413aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth /*HasFoundDecl=*/Record[ASTStmtReader::NumExprFields + 1], 15423aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth /*HasExplicitTemplateArgs=*/Record[ASTStmtReader::NumExprFields + 2], 15433aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields + 2] ? 15443aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth Record[ASTStmtReader::NumExprFields + 3] : 0); 15454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15478538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_INTEGER_LITERAL: 15489996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis S = IntegerLiteral::Create(*Context, Empty); 15494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15518538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_FLOATING_LITERAL: 15529996a7f06a3c5b4554692e7177930cf4e8ef09afArgyrios Kyrtzidis S = FloatingLiteral::Create(*Context, Empty); 15534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15558538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_IMAGINARY_LITERAL: 15564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ImaginaryLiteral(Empty); 15574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15598538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_STRING_LITERAL: 15601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump S = StringLiteral::CreateEmpty(*Context, 156160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields + 1]); 15624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15648538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CHARACTER_LITERAL: 15654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CharacterLiteral(Empty); 15664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15688538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_PAREN: 15694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ParenExpr(Empty); 15704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15728538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_PAREN_LIST: 157337bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis S = new (Context) ParenListExpr(Empty); 157437bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis break; 157537bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis 15768538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_UNARY_OPERATOR: 15774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) UnaryOperator(Empty); 15784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15808538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OFFSETOF: 15818ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor S = OffsetOfExpr::CreateEmpty(*Context, 158260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields], 158360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields + 1]); 15848ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 15858ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 15868538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_SIZEOF_ALIGN_OF: 1587f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbourne S = new (Context) UnaryExprOrTypeTraitExpr(Empty); 15884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15908538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_ARRAY_SUBSCRIPT: 15914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ArraySubscriptExpr(Empty); 15924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15948538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CALL: 1595ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis S = new (Context) CallExpr(*Context, Stmt::CallExprClass, Empty); 15964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15988538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_MEMBER: { 1599663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // We load everything here and fully initialize it at creation. 1600663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // That way we can use MemberExpr::Create and don't have to duplicate its 1601663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // logic with a MemberExpr::CreateEmpty. 1602663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1603663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis assert(Idx == 0); 160440d96a69c0e1e8c10f92d450c305a7aae696ca9cDouglas Gregor NestedNameSpecifierLoc QualifierLoc; 1605663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis if (Record[Idx++]) { // HasQualifier. 160640d96a69c0e1e8c10f92d450c305a7aae696ca9cDouglas Gregor QualifierLoc = ReadNestedNameSpecifierLoc(F, Record, Idx); 1607663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 1608663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1609663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis TemplateArgumentListInfo ArgInfo; 1610def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor bool HasExplicitTemplateArgs = Record[Idx++]; 1611def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor if (HasExplicitTemplateArgs) { 1612def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor unsigned NumTemplateArgs = Record[Idx++]; 1613c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.setLAngleLoc(ReadSourceLocation(F, Record, Idx)); 1614c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.setRAngleLoc(ReadSourceLocation(F, Record, Idx)); 1615663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis for (unsigned i = 0; i != NumTemplateArgs; ++i) 1616c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.addArgument(ReadTemplateArgumentLoc(F, Record, Idx)); 1617663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 1618663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1619409448c832d27703146b70a1137d86b020f29863Douglas Gregor NamedDecl *FoundD = ReadDeclAs<NamedDecl>(F, Record, Idx); 1620663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis AccessSpecifier AS = (AccessSpecifier)Record[Idx++]; 1621663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis DeclAccessPair FoundDecl = DeclAccessPair::make(FoundD, AS); 1622663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1623393f249399fe30e9580e1529a7479489e90f3a57Douglas Gregor QualType T = readType(F, Record, Idx); 1624f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall ExprValueKind VK = static_cast<ExprValueKind>(Record[Idx++]); 1625f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall ExprObjectKind OK = static_cast<ExprObjectKind>(Record[Idx++]); 1626663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis Expr *Base = ReadSubExpr(); 1627409448c832d27703146b70a1137d86b020f29863Douglas Gregor ValueDecl *MemberD = ReadDeclAs<ValueDecl>(F, Record, Idx); 1628c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation MemberLoc = ReadSourceLocation(F, Record, Idx); 16292577743c5650c646fb705df01403707e94f2df04Abramo Bagnara DeclarationNameInfo MemberNameInfo(MemberD->getDeclName(), MemberLoc); 1630663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis bool IsArrow = Record[Idx++]; 1631663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 163240d96a69c0e1e8c10f92d450c305a7aae696ca9cDouglas Gregor S = MemberExpr::Create(*Context, Base, IsArrow, QualifierLoc, 16332577743c5650c646fb705df01403707e94f2df04Abramo Bagnara MemberD, FoundDecl, MemberNameInfo, 1634def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor HasExplicitTemplateArgs ? &ArgInfo : 0, T, VK, OK); 16354045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameLoc(F, cast<MemberExpr>(S)->MemberDNLoc, 16364045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis MemberD->getDeclName(), Record, Idx); 16374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 1638663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 16394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16408538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_BINARY_OPERATOR: 16414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BinaryOperator(Empty); 16424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16448538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_COMPOUND_ASSIGN_OPERATOR: 16454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CompoundAssignOperator(Empty); 16464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16488538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CONDITIONAL_OPERATOR: 16494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ConditionalOperator(Empty); 16504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 165256ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall case EXPR_BINARY_CONDITIONAL_OPERATOR: 165356ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall S = new (Context) BinaryConditionalOperator(Empty); 165456ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall break; 165556ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 16568538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_IMPLICIT_CAST: 1657f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = ImplicitCastExpr::CreateEmpty(*Context, 165860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 16594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16618538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CSTYLE_CAST: 1662f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CStyleCastExpr::CreateEmpty(*Context, 166360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 16644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16668538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_COMPOUND_LITERAL: 16674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CompoundLiteralExpr(Empty); 16684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16708538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_EXT_VECTOR_ELEMENT: 16714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ExtVectorElementExpr(Empty); 16724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16748538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_INIT_LIST: 1675709210feee317b8d6690dd1d15c2b74cfe55e261Ted Kremenek S = new (Context) InitListExpr(*getContext(), Empty); 16764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16788538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_DESIGNATED_INIT: 1679d1d64a027554b635d644957ef071ec04ea1f7063Chris Lattner S = DesignatedInitExpr::CreateEmpty(*Context, 168060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields] - 1); 16811eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 16824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16848538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_IMPLICIT_VALUE_INIT: 16854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ImplicitValueInitExpr(Empty); 16864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16888538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_VA_ARG: 16894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) VAArgExpr(Empty); 16904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16928538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_ADDR_LABEL: 16934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) AddrLabelExpr(Empty); 16944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16968538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_STMT: 16974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) StmtExpr(Empty); 16984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17008538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CHOOSE: 17014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ChooseExpr(Empty); 17024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17048538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_GNU_NULL: 17054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) GNUNullExpr(Empty); 17064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17088538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_SHUFFLE_VECTOR: 17094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ShuffleVectorExpr(Empty); 17104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 17128538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_BLOCK: 17134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BlockExpr(Empty); 17144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17168538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_BLOCK_DECL_REF: 17174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BlockDeclRefExpr(Empty); 17184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1720f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne case EXPR_GENERIC_SELECTION: 1721f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne S = new (Context) GenericSelectionExpr(Empty); 1722f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne break; 1723f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne 17248538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_STRING_LITERAL: 17254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCStringLiteral(Empty); 17264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17278538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_ENCODE: 17284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCEncodeExpr(Empty); 17294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17308538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_SELECTOR_EXPR: 17314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCSelectorExpr(Empty); 17324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17338538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_PROTOCOL_EXPR: 17344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCProtocolExpr(Empty); 17354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17368538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_IVAR_REF_EXPR: 17374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCIvarRefExpr(Empty); 17384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17398538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_PROPERTY_REF_EXPR: 17404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCPropertyRefExpr(Empty); 17414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17428538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_KVC_REF_EXPR: 174312f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall llvm_unreachable("mismatching AST file"); 17444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17458538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_MESSAGE_EXPR: 174604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor S = ObjCMessageExpr::CreateEmpty(*Context, 174760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields]); 17484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17498538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_ISA: 1750f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff S = new (Context) ObjCIsaExpr(Empty); 1751f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff break; 1752f85e193739c953358c865005855253af4f68a497John McCall case EXPR_OBJC_INDIRECT_COPY_RESTORE: 1753f85e193739c953358c865005855253af4f68a497John McCall S = new (Context) ObjCIndirectCopyRestoreExpr(Empty); 1754f85e193739c953358c865005855253af4f68a497John McCall break; 1755f85e193739c953358c865005855253af4f68a497John McCall case EXPR_OBJC_BRIDGED_CAST: 1756f85e193739c953358c865005855253af4f68a497John McCall S = new (Context) ObjCBridgedCastExpr(Empty); 1757f85e193739c953358c865005855253af4f68a497John McCall break; 17588538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_FOR_COLLECTION: 17594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCForCollectionStmt(Empty); 17604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17618538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_CATCH: 17624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtCatchStmt(Empty); 17634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17648538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_FINALLY: 17654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtFinallyStmt(Empty); 17664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17678538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_AT_TRY: 17688f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor S = ObjCAtTryStmt::CreateEmpty(*Context, 176960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumStmtFields], 177060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumStmtFields + 1]); 17714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17728538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_AT_SYNCHRONIZED: 17734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtSynchronizedStmt(Empty); 17744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17758538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_AT_THROW: 17764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtThrowStmt(Empty); 17774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 1778f85e193739c953358c865005855253af4f68a497John McCall case STMT_OBJC_AUTORELEASE_POOL: 1779f85e193739c953358c865005855253af4f68a497John McCall S = new (Context) ObjCAutoreleasePoolStmt(Empty); 1780f85e193739c953358c865005855253af4f68a497John McCall break; 17817110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall case STMT_SEH_EXCEPT: 17827110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S = new (Context) SEHExceptStmt(Empty); 17837110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall break; 17847110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall case STMT_SEH_FINALLY: 17857110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S = new (Context) SEHFinallyStmt(Empty); 17867110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall break; 17877110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall case STMT_SEH_TRY: 17887110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S = new (Context) SEHTryStmt(Empty); 17897110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall break; 17908538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CXX_CATCH: 17917cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S = new (Context) CXXCatchStmt(Empty); 17927cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis break; 17937cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 17948538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CXX_TRY: 17957cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S = CXXTryStmt::Create(*Context, Empty, 179660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumHandlers=*/Record[ASTStmtReader::NumStmtFields]); 17977cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis break; 17987cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 1799ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith case STMT_CXX_FOR_RANGE: 1800ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S = new (Context) CXXForRangeStmt(Empty); 1801ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith break; 1802ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith 18038538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_OPERATOR_CALL: 1804ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis S = new (Context) CXXOperatorCallExpr(*Context, Empty); 1805ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis break; 18061817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner 18078538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_MEMBER_CALL: 18081817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner S = new (Context) CXXMemberCallExpr(*Context, Empty); 18091817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner break; 181039da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor 18118538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_CONSTRUCT: 18126d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis S = new (Context) CXXConstructExpr(Empty); 18136d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis break; 18146d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 18158538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_TEMPORARY_OBJECT: 18166d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis S = new (Context) CXXTemporaryObjectExpr(Empty); 181739da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor break; 1818ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 18198538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_STATIC_CAST: 1820f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXStaticCastExpr::CreateEmpty(*Context, 182160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1822ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1823ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 18248538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DYNAMIC_CAST: 1825f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXDynamicCastExpr::CreateEmpty(*Context, 182660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1827ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1828ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 18298538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_REINTERPRET_CAST: 1830f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXReinterpretCastExpr::CreateEmpty(*Context, 183160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1832ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1833ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 18348538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_CONST_CAST: 1835f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXConstCastExpr::CreateEmpty(*Context); 1836ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1837ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 18388538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_FUNCTIONAL_CAST: 1839f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall S = CXXFunctionalCastExpr::CreateEmpty(*Context, 184060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1841ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1842ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 18438538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_BOOL_LITERAL: 1844eb7f96141f754150a92433286fa385910a22f494Sam Weinig S = new (Context) CXXBoolLiteralExpr(Empty); 1845eb7f96141f754150a92433286fa385910a22f494Sam Weinig break; 1846ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 18478538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_NULL_PTR_LITERAL: 1848eb7f96141f754150a92433286fa385910a22f494Sam Weinig S = new (Context) CXXNullPtrLiteralExpr(Empty); 1849eb7f96141f754150a92433286fa385910a22f494Sam Weinig break; 18508538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_TYPEID_EXPR: 185114ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner S = new (Context) CXXTypeidExpr(Empty, true); 185214ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner break; 18538538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_TYPEID_TYPE: 185414ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner S = new (Context) CXXTypeidExpr(Empty, false); 185514ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner break; 185601b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet case EXPR_CXX_UUIDOF_EXPR: 185701b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet S = new (Context) CXXUuidofExpr(Empty, true); 185801b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet break; 185901b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet case EXPR_CXX_UUIDOF_TYPE: 186001b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet S = new (Context) CXXUuidofExpr(Empty, false); 186101b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet break; 18628538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_THIS: 18632fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner S = new (Context) CXXThisExpr(Empty); 18642fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner break; 18658538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_THROW: 18662fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner S = new (Context) CXXThrowExpr(Empty); 18672fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner break; 18688538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DEFAULT_ARG: { 186960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl bool HasOtherExprStored = Record[ASTStmtReader::NumExprFields]; 18708a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis if (HasOtherExprStored) { 18718a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis Expr *SubExpr = ReadSubExpr(); 18728a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis S = CXXDefaultArgExpr::Create(*Context, SourceLocation(), 0, SubExpr); 18738a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis } else 18748a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis S = new (Context) CXXDefaultArgExpr(Empty); 1875030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner break; 18768a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis } 18778538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_BIND_TEMPORARY: 1878d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner S = new (Context) CXXBindTemporaryExpr(Empty); 1879d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner break; 1880e2ca6d4a2f41876930fbd304caa706452d2569d8Douglas Gregor 18818538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_SCALAR_VALUE_INIT: 1882ed8abf18329df67b0abcbb3a10458bd8c1d2a595Douglas Gregor S = new (Context) CXXScalarValueInitExpr(Empty); 18835921863d8f24084797863b5df37842113bac4352Chris Lattner break; 18848538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_NEW: 18855921863d8f24084797863b5df37842113bac4352Chris Lattner S = new (Context) CXXNewExpr(Empty); 18865921863d8f24084797863b5df37842113bac4352Chris Lattner break; 18878538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DELETE: 188895fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis S = new (Context) CXXDeleteExpr(Empty); 188995fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis break; 18908538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_PSEUDO_DESTRUCTOR: 1891de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis S = new (Context) CXXPseudoDestructorExpr(Empty); 1892de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis break; 18935921863d8f24084797863b5df37842113bac4352Chris Lattner 18944765fa05b5652fcc4356371c2f481d0ea9a1b007John McCall case EXPR_EXPR_WITH_CLEANUPS: 18954765fa05b5652fcc4356371c2f481d0ea9a1b007John McCall S = new (Context) ExprWithCleanups(Empty); 1896d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner break; 18978dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 18988538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DEPENDENT_SCOPE_MEMBER: 18998dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis S = CXXDependentScopeMemberExpr::CreateEmpty(*Context, 1900def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*HasExplicitTemplateArgs=*/Record[ASTStmtReader::NumExprFields], 1901def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields] 1902def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ? Record[ASTStmtReader::NumExprFields + 1] 1903def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor : 0); 19048dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis break; 19058dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 19068538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DEPENDENT_SCOPE_DECL_REF: 190712dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis S = DependentScopeDeclRefExpr::CreateEmpty(*Context, 1908def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*HasExplicitTemplateArgs=*/Record[ASTStmtReader::NumExprFields], 1909def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields] 1910def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ? Record[ASTStmtReader::NumExprFields + 1] 1911def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor : 0); 191212dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis break; 191312dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 19148538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNRESOLVED_CONSTRUCT: 19158dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis S = CXXUnresolvedConstructExpr::CreateEmpty(*Context, 191660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumArgs=*/Record[ASTStmtReader::NumExprFields]); 1917a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis break; 1918a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 19198538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNRESOLVED_MEMBER: 1920a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis S = UnresolvedMemberExpr::CreateEmpty(*Context, 1921def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*HasExplicitTemplateArgs=*/Record[ASTStmtReader::NumExprFields], 1922def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields] 1923def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ? Record[ASTStmtReader::NumExprFields + 1] 1924def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor : 0); 19258dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis break; 1926bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis 19278538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNRESOLVED_LOOKUP: 1928bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis S = UnresolvedLookupExpr::CreateEmpty(*Context, 1929def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*HasExplicitTemplateArgs=*/Record[ASTStmtReader::NumExprFields], 1930def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields] 1931def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ? Record[ASTStmtReader::NumExprFields + 1] 1932def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor : 0); 1933bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis break; 19346d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 19358538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNARY_TYPE_TRAIT: 19366d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis S = new (Context) UnaryTypeTraitExpr(Empty); 19376d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis break; 19386b219d082434394c1ac401390ec1d1967727815aSebastian Redl 1939f187237d916afa97c491ac32fe98be7d335c5b63Francois Pichet case EXPR_BINARY_TYPE_TRAIT: 19406ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet S = new (Context) BinaryTypeTraitExpr(Empty); 19416ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet break; 19426ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet 194321ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley case EXPR_ARRAY_TYPE_TRAIT: 194421ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley S = new (Context) ArrayTypeTraitExpr(Empty); 194521ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley break; 194621ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley 1947552622067dc45013d240f73952fece703f5e63bdJohn Wiegley case EXPR_CXX_EXPRESSION_TRAIT: 1948552622067dc45013d240f73952fece703f5e63bdJohn Wiegley S = new (Context) ExpressionTraitExpr(Empty); 1949552622067dc45013d240f73952fece703f5e63bdJohn Wiegley break; 1950552622067dc45013d240f73952fece703f5e63bdJohn Wiegley 19516b219d082434394c1ac401390ec1d1967727815aSebastian Redl case EXPR_CXX_NOEXCEPT: 19526b219d082434394c1ac401390ec1d1967727815aSebastian Redl S = new (Context) CXXNoexceptExpr(Empty); 19536b219d082434394c1ac401390ec1d1967727815aSebastian Redl break; 19547cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall 1955be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor case EXPR_PACK_EXPANSION: 1956be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor S = new (Context) PackExpansionExpr(Empty); 1957be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor break; 1958be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor 1959ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor case EXPR_SIZEOF_PACK: 1960ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor S = new (Context) SizeOfPackExpr(Empty); 1961ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor break; 1962ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor 19637110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall case EXPR_SUBST_NON_TYPE_TEMPLATE_PARM: 19647110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S = new (Context) SubstNonTypeTemplateParmExpr(Empty); 19657110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall break; 19667110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 1967c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor case EXPR_SUBST_NON_TYPE_TEMPLATE_PARM_PACK: 1968c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor S = new (Context) SubstNonTypeTemplateParmPackExpr(Empty); 1969c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor break; 1970c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor 197103e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor case EXPR_MATERIALIZE_TEMPORARY: 197203e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor S = new (Context) MaterializeTemporaryExpr(Empty); 197303e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor break; 197403e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor 197556ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall case EXPR_OPAQUE_VALUE: { 197656ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall unsigned key = Record[ASTStmtReader::NumExprFields]; 197756ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall OpaqueValueExpr *&expr = OpaqueValueExprs[key]; 197856ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 197956ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall // If we already have an entry for this opaque value expression, 198056ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall // don't bother reading it again. 198156ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall if (expr) { 198256ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall StmtStack.push_back(expr); 198356ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall continue; 198456ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall } 198556ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 198656ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall S = expr = new (Context) OpaqueValueExpr(Empty); 19877cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall break; 198856ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall } 1989e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne 1990e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne case EXPR_CUDA_KERNEL_CALL: 1991e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne S = new (Context) CUDAKernelCallExpr(*Context, Empty); 1992e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne break; 199361eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner 199461eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner case EXPR_ASTYPE: 199561eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner S = new (Context) AsTypeExpr(Empty); 199661eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner break; 19974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 19986d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 19994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // We hit a STMT_STOP, so we're done with this expression. 20004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Finished) 20014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 20024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 20034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner ++NumStatementsRead; 20044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 2005919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis if (S) 2006919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Reader.Visit(S); 20074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 20084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(Idx == Record.size() && "Invalid deserialization of statement"); 20094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner StmtStack.push_back(S); 20104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 2011919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 2012919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#ifndef NDEBUG 2013919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis assert(StmtStack.size() > PrevNumStmts && "Read too many sub stmts!"); 2014919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis assert(StmtStack.size() == PrevNumStmts + 1 && "Extra expressions on stack!"); 2015919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#endif 2016919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 2017919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis return StmtStack.pop_back_val(); 20184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2019