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. 83b0c3e0909bb04af0bfb82ad01ab6909649d68ccaArgyrios Kyrtzidis void ReadExplicitTemplateArgumentList(ASTTemplateArgumentListInfo &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:: 94b0c3e0909bb04af0bfb82ad01ab6909649d68ccaArgyrios KyrtzidisReadExplicitTemplateArgumentList(ASTTemplateArgumentListInfo &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)); 112e2ca828119b8bff4a5c25c6db8ee4fec558451e7Argyrios Kyrtzidis S->HasLeadingEmptyMacro = 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()); 121359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor 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); 159359427794704666ff7a5a933ace11c5256fa3af7Douglas 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); 170359427794704666ff7a5a933ace11c5256fa3af7Douglas 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); 192359427794704666ff7a5a933ace11c5256fa3af7Douglas 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()); 213359427794704666ff7a5a933ace11c5256fa3af7Douglas 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)); 266359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor 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) { 29095eab176f51beed44a9bc14c0dcdd37844b23740Douglas Gregor Names.push_back(Reader.GetIdentifierInfo(F, 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 300359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor 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++]; 3307cc58b4c927fca539d43eaa58e00dca95946eb7cAbramo Bagnara E->DeclRefExprBits.HadMultipleCandidates = Record[Idx++]; 331b0ca137bf399d956a3424816c238bc2532250d17Anders Carlsson unsigned NumTemplateArgs = 0; 332cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth if (E->hasExplicitTemplateArgs()) 333b0ca137bf399d956a3424816c238bc2532250d17Anders Carlsson NumTemplateArgs = Record[Idx++]; 334b0ca137bf399d956a3424816c238bc2532250d17Anders Carlsson 335cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth if (E->hasQualifier()) 3366857c3e12c86fd0271eb46baab5b18756a94f4cbChandler Carruth E->getInternalQualifierLoc() 33740d96a69c0e1e8c10f92d450c305a7aae696ca9cDouglas Gregor = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx); 338663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 3393aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth if (E->hasFoundDecl()) 340409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->getInternalFoundDecl() = ReadDeclAs<NamedDecl>(Record, Idx); 3413aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth 342cb66cff8fdf641f57f85dedb515a5f3240e3a9bbChandler Carruth if (E->hasExplicitTemplateArgs()) 343096832c5ed5b9106fa177ebc148489760c3bc496John McCall ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 344663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis NumTemplateArgs); 345663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 346409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setDecl(ReadDeclAs<ValueDecl>(Record, Idx)); 347c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 3484045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameLoc(E->DNLoc, E->getDecl()->getDeclName(), Record, Idx); 3494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 35160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitIntegerLiteral(IntegerLiteral *E) { 3524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 353c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 354359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor E->setValue(Reader.getContext(), Reader.ReadAPInt(Record, Idx)); 3554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 35760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitFloatingLiteral(FloatingLiteral *E) { 3584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 359359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor E->setValue(Reader.getContext(), Reader.ReadAPFloat(Record, Idx)); 3604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setExact(Record[Idx++]); 361c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 3624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 36460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitImaginaryLiteral(ImaginaryLiteral *E) { 3654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 366d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 3674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 36960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitStringLiteral(StringLiteral *E) { 3704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 3714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Len = Record[Idx++]; 3721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump assert(Record[Idx] == E->getNumConcatenated() && 3734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner "Wrong number of concatenated tokens!"); 3744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner ++Idx; 3755cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor E->Kind = static_cast<StringLiteral::StringKind>(Record[Idx++]); 3763e2193ce5feb2feb092e5ae615e85148e06e9fd2Anders Carlsson E->IsPascal = Record[Idx++]; 3774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 3781eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // Read string data 379b648023da23e8b227cdda57a241db4c6f368726bDaniel Dunbar llvm::SmallString<16> Str(&Record[Idx], &Record[Idx] + Len); 380359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor E->setString(Reader.getContext(), Str.str()); 3814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Idx += Len; 3824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 3834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // Read source locations 3844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = E->getNumConcatenated(); I != N; ++I) 385c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setStrTokenLoc(I, ReadSourceLocation(Record, Idx)); 3864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 38860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCharacterLiteral(CharacterLiteral *E) { 3894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 3904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setValue(Record[Idx++]); 391c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 3925cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor E->setKind(static_cast<CharacterLiteral::CharacterKind>(Record[Idx++])); 3934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 3944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 39560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitParenExpr(ParenExpr *E) { 3964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 397c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParen(ReadSourceLocation(Record, Idx)); 398c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParen(ReadSourceLocation(Record, Idx)); 399d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 4004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 40260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitParenListExpr(ParenListExpr *E) { 40337bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis VisitExpr(E); 40437bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis unsigned NumExprs = Record[Idx++]; 405359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor E->Exprs = new (Reader.getContext()) Stmt*[NumExprs]; 40637bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis for (unsigned i = 0; i != NumExprs; ++i) 40737bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->Exprs[i] = Reader.ReadSubStmt(); 40837bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis E->NumExprs = NumExprs; 409c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->LParenLoc = ReadSourceLocation(Record, Idx); 410c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->RParenLoc = ReadSourceLocation(Record, Idx); 41137bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis} 41237bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis 41360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnaryOperator(UnaryOperator *E) { 4144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 415d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 4164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setOpcode((UnaryOperator::Opcode)Record[Idx++]); 417c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 4184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 42060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitOffsetOfExpr(OffsetOfExpr *E) { 4218ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor typedef OffsetOfExpr::OffsetOfNode Node; 4228ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor VisitExpr(E); 4238ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor assert(E->getNumComponents() == Record[Idx]); 4248ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor ++Idx; 4258ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor assert(E->getNumExpressions() == Record[Idx]); 4268ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor ++Idx; 427c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 428c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 429c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeSourceInfo(GetTypeSourceInfo(Record, Idx)); 4308ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor for (unsigned I = 0, N = E->getNumComponents(); I != N; ++I) { 4318ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Node::Kind Kind = static_cast<Node::Kind>(Record[Idx++]); 432c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation Start = ReadSourceLocation(Record, Idx); 433c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation End = ReadSourceLocation(Record, Idx); 4348ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor switch (Kind) { 4358ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case Node::Array: 4368ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor E->setComponent(I, Node(Start, Record[Idx++], End)); 4378ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 4388ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 4398ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case Node::Field: 440409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setComponent(I, Node(Start, ReadDeclAs<FieldDecl>(Record, Idx), End)); 4418ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 4428ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 4438ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case Node::Identifier: 44495eab176f51beed44a9bc14c0dcdd37844b23740Douglas Gregor E->setComponent(I, 44595eab176f51beed44a9bc14c0dcdd37844b23740Douglas Gregor Node(Start, 44695eab176f51beed44a9bc14c0dcdd37844b23740Douglas Gregor Reader.GetIdentifierInfo(F, Record, Idx), 44795eab176f51beed44a9bc14c0dcdd37844b23740Douglas Gregor End)); 4488ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 449cc8a5d5f90bbbbcb46f342117b851b7e07ec34f1Douglas Gregor 450afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis case Node::Base: { 451359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor CXXBaseSpecifier *Base = new (Reader.getContext()) CXXBaseSpecifier(); 452c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl *Base = Reader.ReadCXXBaseSpecifier(F, Record, Idx); 453afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis E->setComponent(I, Node(Base)); 454cc8a5d5f90bbbbcb46f342117b851b7e07ec34f1Douglas Gregor break; 4558ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor } 456afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis } 4578ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor } 4588ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 4598ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor for (unsigned I = 0, N = E->getNumExpressions(); I != N; ++I) 460d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setIndexExpr(I, Reader.ReadSubExpr()); 4618ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor} 4628ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 463f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbournevoid ASTStmtReader::VisitUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr *E) { 4644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 465f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbourne E->setKind(static_cast<UnaryExprOrTypeTrait>(Record[Idx++])); 4664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Record[Idx] == 0) { 467d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArgument(Reader.ReadSubExpr()); 4684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner ++Idx; 4694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } else { 470c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setArgument(GetTypeSourceInfo(Record, Idx)); 4714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 472c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 473c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 4744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 47660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitArraySubscriptExpr(ArraySubscriptExpr *E) { 4774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 478d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 479d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 480c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRBracketLoc(ReadSourceLocation(Record, Idx)); 4814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 48360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCallExpr(CallExpr *E) { 4844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 485359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor E->setNumArgs(Reader.getContext(), Record[Idx++]); 486c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 487d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setCallee(Reader.ReadSubExpr()); 4884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 489d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 4904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 4914c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 4927110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtReader::VisitCXXMemberCallExpr(CXXMemberCallExpr *E) { 4937110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitCallExpr(E); 4947110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 4957110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 49660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitMemberExpr(MemberExpr *E) { 497663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // Don't call VisitExpr, this is fully initialized at creation. 498663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis assert(E->getStmtClass() == Stmt::MemberExprClass && 499663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis "It's a subclass, we must advance Idx!"); 5004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 50260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCIsaExpr(ObjCIsaExpr *E) { 503f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff VisitExpr(E); 504d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 505c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setIsaMemberLoc(ReadSourceLocation(Record, Idx)); 506f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff E->setArrow(Record[Idx++]); 507f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff} 508f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff 509f85e193739c953358c865005855253af4f68a497John McCallvoid ASTStmtReader:: 510f85e193739c953358c865005855253af4f68a497John McCallVisitObjCIndirectCopyRestoreExpr(ObjCIndirectCopyRestoreExpr *E) { 511f85e193739c953358c865005855253af4f68a497John McCall VisitExpr(E); 512f85e193739c953358c865005855253af4f68a497John McCall E->Operand = Reader.ReadSubExpr(); 513f85e193739c953358c865005855253af4f68a497John McCall E->setShouldCopy(Record[Idx++]); 514f85e193739c953358c865005855253af4f68a497John McCall} 515f85e193739c953358c865005855253af4f68a497John McCall 516f85e193739c953358c865005855253af4f68a497John McCallvoid ASTStmtReader::VisitObjCBridgedCastExpr(ObjCBridgedCastExpr *E) { 517f85e193739c953358c865005855253af4f68a497John McCall VisitExplicitCastExpr(E); 518f85e193739c953358c865005855253af4f68a497John McCall E->LParenLoc = ReadSourceLocation(Record, Idx); 519f85e193739c953358c865005855253af4f68a497John McCall E->BridgeKeywordLoc = ReadSourceLocation(Record, Idx); 520f85e193739c953358c865005855253af4f68a497John McCall E->Kind = Record[Idx++]; 521f85e193739c953358c865005855253af4f68a497John McCall} 522f85e193739c953358c865005855253af4f68a497John McCall 52360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCastExpr(CastExpr *E) { 5244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 525f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall unsigned NumBaseSpecs = Record[Idx++]; 526f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall assert(NumBaseSpecs == E->path_size()); 527d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 528cdef2b75aa60cde1ca00e0aa3f89139ac89c6ae4Anders Carlsson E->setCastKind((CastExpr::CastKind)Record[Idx++]); 529f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall CastExpr::path_iterator BaseI = E->path_begin(); 5300745d0a648b75bd304045309276c70a755adaafbArgyrios Kyrtzidis while (NumBaseSpecs--) { 531359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor CXXBaseSpecifier *BaseSpec = new (Reader.getContext()) CXXBaseSpecifier; 532c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl *BaseSpec = Reader.ReadCXXBaseSpecifier(F, Record, Idx); 533f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall *BaseI++ = BaseSpec; 5340745d0a648b75bd304045309276c70a755adaafbArgyrios Kyrtzidis } 5354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 53760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBinaryOperator(BinaryOperator *E) { 5384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 539d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 540d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 5414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setOpcode((BinaryOperator::Opcode)Record[Idx++]); 542c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setOperatorLoc(ReadSourceLocation(Record, Idx)); 5434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 54560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCompoundAssignOperator(CompoundAssignOperator *E) { 5464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitBinaryOperator(E); 547393f249399fe30e9580e1529a7479489e90f3a57Douglas Gregor E->setComputationLHSType(Reader.readType(F, Record, Idx)); 548393f249399fe30e9580e1529a7479489e90f3a57Douglas Gregor E->setComputationResultType(Reader.readType(F, Record, Idx)); 5494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 55160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitConditionalOperator(ConditionalOperator *E) { 5524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 55356ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[ConditionalOperator::COND] = Reader.ReadSubExpr(); 55456ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[ConditionalOperator::LHS] = Reader.ReadSubExpr(); 55556ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[ConditionalOperator::RHS] = Reader.ReadSubExpr(); 55656ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->QuestionLoc = ReadSourceLocation(Record, Idx); 55756ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->ColonLoc = ReadSourceLocation(Record, Idx); 55856ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall} 55956ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 56056ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCallvoid 56156ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCallASTStmtReader::VisitBinaryConditionalOperator(BinaryConditionalOperator *E) { 56256ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall VisitExpr(E); 56356ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->OpaqueValue = cast<OpaqueValueExpr>(Reader.ReadSubExpr()); 56456ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[BinaryConditionalOperator::COMMON] = Reader.ReadSubExpr(); 56556ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[BinaryConditionalOperator::COND] = Reader.ReadSubExpr(); 56656ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[BinaryConditionalOperator::LHS] = Reader.ReadSubExpr(); 56756ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->SubExprs[BinaryConditionalOperator::RHS] = Reader.ReadSubExpr(); 56856ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->QuestionLoc = ReadSourceLocation(Record, Idx); 56956ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->ColonLoc = ReadSourceLocation(Record, Idx); 57056ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 57156ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall E->getOpaqueValue()->setSourceExpr(E->getCommon()); 5724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 57460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitImplicitCastExpr(ImplicitCastExpr *E) { 5754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitCastExpr(E); 5764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 57860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitExplicitCastExpr(ExplicitCastExpr *E) { 5794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitCastExpr(E); 580c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeInfoAsWritten(GetTypeSourceInfo(Record, Idx)); 5814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 58360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCStyleCastExpr(CStyleCastExpr *E) { 5844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExplicitCastExpr(E); 585c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 586c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 5874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 58960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) { 5904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 591c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 592c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeSourceInfo(GetTypeSourceInfo(Record, Idx)); 593d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setInitializer(Reader.ReadSubExpr()); 5944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setFileScope(Record[Idx++]); 5954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 5964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 59760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitExtVectorElementExpr(ExtVectorElementExpr *E) { 5984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 599d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 60095eab176f51beed44a9bc14c0dcdd37844b23740Douglas Gregor E->setAccessor(Reader.GetIdentifierInfo(F, Record, Idx)); 601c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAccessorLoc(ReadSourceLocation(Record, Idx)); 6024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 60460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitInitListExpr(InitListExpr *E) { 6054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 606d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSyntacticForm(cast_or_null<InitListExpr>(Reader.ReadSubStmt())); 607c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLBraceLoc(ReadSourceLocation(Record, Idx)); 608c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRBraceLoc(ReadSourceLocation(Record, Idx)); 6092ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis bool isArrayFiller = Record[Idx++]; 6102ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis Expr *filler = 0; 6112ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis if (isArrayFiller) { 6122ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis filler = Reader.ReadSubExpr(); 6132ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis E->ArrayFillerOrUnionFieldInit = filler; 6142ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis } else 615409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->ArrayFillerOrUnionFieldInit = ReadDeclAs<FieldDecl>(Record, Idx); 6164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->sawArrayRangeDesignator(Record[Idx++]); 6172ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis unsigned NumInits = Record[Idx++]; 618359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor E->reserveInits(Reader.getContext(), NumInits); 6192ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis if (isArrayFiller) { 6202ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis for (unsigned I = 0; I != NumInits; ++I) { 6212ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis Expr *init = Reader.ReadSubExpr(); 622359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor E->updateInit(Reader.getContext(), I, init ? init : filler); 6232ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis } 6242ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis } else { 6252ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis for (unsigned I = 0; I != NumInits; ++I) 626359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor E->updateInit(Reader.getContext(), I, Reader.ReadSubExpr()); 6272ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis } 6284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 63060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitDesignatedInitExpr(DesignatedInitExpr *E) { 6314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner typedef DesignatedInitExpr::Designator Designator; 6324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 6344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumSubExprs = Record[Idx++]; 6354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(NumSubExprs == E->getNumSubExprs() && "Wrong number of subexprs"); 6364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0; I != NumSubExprs; ++I) 637d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(I, Reader.ReadSubExpr()); 638c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setEqualOrColonLoc(ReadSourceLocation(Record, Idx)); 6394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setGNUSyntax(Record[Idx++]); 6404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6415f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner SmallVector<Designator, 4> Designators; 6424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner while (Idx < Record.size()) { 6438538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl switch ((DesignatorTypes)Record[Idx++]) { 6448538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_FIELD_DECL: { 645409448c832d27703146b70a1137d86b020f29863Douglas Gregor FieldDecl *Field = ReadDeclAs<FieldDecl>(Record, Idx); 6461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation DotLoc 647c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation FieldLoc 649c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump Designators.push_back(Designator(Field->getIdentifier(), DotLoc, 6514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner FieldLoc)); 6524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.back().setField(Field); 6534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 6544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 6554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6568538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_FIELD_NAME: { 65795eab176f51beed44a9bc14c0dcdd37844b23740Douglas Gregor const IdentifierInfo *Name = Reader.GetIdentifierInfo(F, Record, Idx); 6581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation DotLoc 659c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump SourceLocation FieldLoc 661c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.push_back(Designator(Name, DotLoc, FieldLoc)); 6634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 6644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 6651eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 6668538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_ARRAY: { 6674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Index = Record[Idx++]; 6684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation LBracketLoc 669c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6704c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation RBracketLoc 671c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.push_back(Designator(Index, LBracketLoc, RBracketLoc)); 6734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 6744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 6754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 6768538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case DESIG_ARRAY_RANGE: { 6774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Index = Record[Idx++]; 6784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation LBracketLoc 679c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation EllipsisLoc 681c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner SourceLocation RBracketLoc 683c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl = ReadSourceLocation(Record, Idx); 6844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Designators.push_back(Designator(Index, LBracketLoc, EllipsisLoc, 6854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner RBracketLoc)); 6864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 6874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 6884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 6894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 690359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor E->setDesignators(Reader.getContext(), 691319d57f21600dd2c4d52ccc27bd12ce260b174e7Douglas Gregor Designators.data(), Designators.size()); 6924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 69460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitImplicitValueInitExpr(ImplicitValueInitExpr *E) { 6954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 6964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 6974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 69860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitVAArgExpr(VAArgExpr *E) { 6994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 700d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 701c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setWrittenTypeInfo(GetTypeSourceInfo(Record, Idx)); 702c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setBuiltinLoc(ReadSourceLocation(Record, Idx)); 703c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 7044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 70660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitAddrLabelExpr(AddrLabelExpr *E) { 7074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 708c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAmpAmpLoc(ReadSourceLocation(Record, Idx)); 709c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLabelLoc(ReadSourceLocation(Record, Idx)); 710409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setLabel(ReadDeclAs<LabelDecl>(Record, Idx)); 7114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 71360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitStmtExpr(StmtExpr *E) { 7144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 715c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 716c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 717d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubStmt(cast_or_null<CompoundStmt>(Reader.ReadSubStmt())); 7184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 72060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitChooseExpr(ChooseExpr *E) { 7214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 722d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setCond(Reader.ReadSubExpr()); 723d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setLHS(Reader.ReadSubExpr()); 724d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setRHS(Reader.ReadSubExpr()); 725c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setBuiltinLoc(ReadSourceLocation(Record, Idx)); 726c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 7274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 72960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitGNUNullExpr(GNUNullExpr *E) { 7304c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 731c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTokenLocation(ReadSourceLocation(Record, Idx)); 7324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 73460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitShuffleVectorExpr(ShuffleVectorExpr *E) { 7354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 7365f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner SmallVector<Expr *, 16> Exprs; 7374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned NumExprs = Record[Idx++]; 738919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis while (NumExprs--) 739d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis Exprs.push_back(Reader.ReadSubExpr()); 740359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor E->setExprs(Reader.getContext(), Exprs.data(), Exprs.size()); 741c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setBuiltinLoc(ReadSourceLocation(Record, Idx)); 742c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 7434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 74560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBlockExpr(BlockExpr *E) { 7464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 747409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setBlockDecl(ReadDeclAs<BlockDecl>(Record, Idx)); 7484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 75060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitBlockDeclRefExpr(BlockDeclRefExpr *E) { 7514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 752409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setDecl(ReadDeclAs<VarDecl>(Record, Idx)); 753c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 7544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setByRef(Record[Idx++]); 7559b0b57c6f9996bfdb67248f6942dd23acfa36167Fariborz Jahanian E->setConstQualAdded(Record[Idx++]); 7564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 7574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 758f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbournevoid ASTStmtReader::VisitGenericSelectionExpr(GenericSelectionExpr *E) { 759f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne VisitExpr(E); 760f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->NumAssocs = Record[Idx++]; 761359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor E->AssocTypes = new (Reader.getContext()) TypeSourceInfo*[E->NumAssocs]; 762f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->SubExprs = 763359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor new(Reader.getContext()) Stmt*[GenericSelectionExpr::END_EXPR+E->NumAssocs]; 764f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne 765f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->SubExprs[GenericSelectionExpr::CONTROLLING] = Reader.ReadSubExpr(); 766f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne for (unsigned I = 0, N = E->getNumAssocs(); I != N; ++I) { 767f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->AssocTypes[I] = GetTypeSourceInfo(Record, Idx); 768f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->SubExprs[GenericSelectionExpr::END_EXPR+I] = Reader.ReadSubExpr(); 769f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne } 770f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->ResultIndex = Record[Idx++]; 771f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne 772f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->GenericLoc = ReadSourceLocation(Record, Idx); 773f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->DefaultLoc = ReadSourceLocation(Record, Idx); 774f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne E->RParenLoc = ReadSourceLocation(Record, Idx); 775f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne} 776f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne 777276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedmanvoid ASTStmtReader::VisitAtomicExpr(AtomicExpr *E) { 778276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman VisitExpr(E); 779276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman E->setOp(AtomicExpr::AtomicOp(Record[Idx++])); 780276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman E->setPtr(Reader.ReadSubExpr()); 781276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman E->setOrder(Reader.ReadSubExpr()); 782276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman E->setNumSubExprs(2); 783276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman if (E->getOp() != AtomicExpr::Load) { 784276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman E->setVal1(Reader.ReadSubExpr()); 785276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman E->setNumSubExprs(3); 786276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman } 787276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman if (E->isCmpXChg()) { 788276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman E->setOrderFail(Reader.ReadSubExpr()); 789276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman E->setVal2(Reader.ReadSubExpr()); 790276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman E->setNumSubExprs(5); 791276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman } 792276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman E->setBuiltinLoc(ReadSourceLocation(Record, Idx)); 793276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman E->setRParenLoc(ReadSourceLocation(Record, Idx)); 794276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman} 795276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman 7964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner//===----------------------------------------------------------------------===// 7974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner// Objective-C Expressions and Statements 7984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 79960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCStringLiteral(ObjCStringLiteral *E) { 8004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 801d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setString(cast<StringLiteral>(Reader.ReadSubStmt())); 802c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 8034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 80560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCEncodeExpr(ObjCEncodeExpr *E) { 8064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 807c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setEncodedTypeSourceInfo(GetTypeSourceInfo(Record, Idx)); 808c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 809c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 8104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 81260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCSelectorExpr(ObjCSelectorExpr *E) { 8134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 8142d2689ab787c6d54cb985c28ff3f16370bc01b0fDouglas Gregor E->setSelector(Reader.ReadSelector(F, Record, Idx)); 815c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 816c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 8174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 81960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCProtocolExpr(ObjCProtocolExpr *E) { 8204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 821409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setProtocol(ReadDeclAs<ObjCProtocolDecl>(Record, Idx)); 822c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setAtLoc(ReadSourceLocation(Record, Idx)); 823c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 8244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 82660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) { 8274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 828409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setDecl(ReadDeclAs<ObjCIvarDecl>(Record, Idx)); 829c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 830d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setBase(Reader.ReadSubExpr()); 8314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setIsArrow(Record[Idx++]); 8324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner E->setIsFreeIvar(Record[Idx++]); 8334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 83560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) { 8364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 83712f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall bool Implicit = Record[Idx++] != 0; 83812f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall if (Implicit) { 839409448c832d27703146b70a1137d86b020f29863Douglas Gregor ObjCMethodDecl *Getter = ReadDeclAs<ObjCMethodDecl>(Record, Idx); 840409448c832d27703146b70a1137d86b020f29863Douglas Gregor ObjCMethodDecl *Setter = ReadDeclAs<ObjCMethodDecl>(Record, Idx); 84112f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setImplicitProperty(Getter, Setter); 84212f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall } else { 843409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setExplicitProperty(ReadDeclAs<ObjCPropertyDecl>(Record, Idx)); 8448ac2d449820fd0df00fcbde5bf82165c1f49854dFariborz Jahanian } 845c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 84612f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setReceiverLocation(ReadSourceLocation(Record, Idx)); 84712f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall switch (Record[Idx++]) { 84812f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall case 0: 84912f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall E->setBase(Reader.ReadSubExpr()); 85012f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall break; 85112f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall case 1: 852393f249399fe30e9580e1529a7479489e90f3a57Douglas Gregor E->setSuperReceiver(Reader.readType(F, Record, Idx)); 85312f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall break; 85412f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall case 2: 855409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setClassReceiver(ReadDeclAs<ObjCInterfaceDecl>(Record, Idx)); 85612f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall break; 85712f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall } 8584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 8594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 86060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCMessageExpr(ObjCMessageExpr *E) { 8614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitExpr(E); 86204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor assert(Record[Idx] == E->getNumArgs()); 86304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor ++Idx; 864207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis unsigned NumStoredSelLocs = Record[Idx++]; 865207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis E->SelLocsKind = Record[Idx++]; 866f85e193739c953358c865005855253af4f68a497John McCall E->setDelegateInitCall(Record[Idx++]); 86704badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor ObjCMessageExpr::ReceiverKind Kind 86804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor = static_cast<ObjCMessageExpr::ReceiverKind>(Record[Idx++]); 86904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor switch (Kind) { 87004badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::Instance: 871d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setInstanceReceiver(Reader.ReadSubExpr()); 87204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 87304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 87404badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::Class: 875c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setClassReceiver(GetTypeSourceInfo(Record, Idx)); 87604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 87704badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 87804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::SuperClass: 87904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::SuperInstance: { 880393f249399fe30e9580e1529a7479489e90f3a57Douglas Gregor QualType T = Reader.readType(F, Record, Idx); 881c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation SuperLoc = ReadSourceLocation(Record, Idx); 88204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor E->setSuper(SuperLoc, T, Kind == ObjCMessageExpr::SuperInstance); 88304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 88404badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor } 8854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 8864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 88704badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor assert(Kind == E->getReceiverKind()); 88804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 88904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor if (Record[Idx++]) 890409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setMethodDecl(ReadDeclAs<ObjCMethodDecl>(Record, Idx)); 89104badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor else 8922d2689ab787c6d54cb985c28ff3f16370bc01b0fDouglas Gregor E->setSelector(Reader.ReadSelector(F, Record, Idx)); 89304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 894f40f0d5a382395e0301d7dcbeaa2b8e90b8973b1Argyrios Kyrtzidis E->LBracLoc = ReadSourceLocation(Record, Idx); 895f40f0d5a382395e0301d7dcbeaa2b8e90b8973b1Argyrios Kyrtzidis E->RBracLoc = ReadSourceLocation(Record, Idx); 89604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 8974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 898d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 899207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis 900207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis SourceLocation *Locs = E->getStoredSelLocs(); 901207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis for (unsigned I = 0; I != NumStoredSelLocs; ++I) 902207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis Locs[I] = ReadSourceLocation(Record, Idx); 9034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 90560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCForCollectionStmt(ObjCForCollectionStmt *S) { 9064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 907d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setElement(Reader.ReadSubStmt()); 908d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCollection(Reader.ReadSubExpr()); 909d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setBody(Reader.ReadSubStmt()); 910c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setForLoc(ReadSourceLocation(Record, Idx)); 911c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 9124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 91460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtCatchStmt(ObjCAtCatchStmt *S) { 9154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 916d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCatchBody(Reader.ReadSubStmt()); 917409448c832d27703146b70a1137d86b020f29863Douglas Gregor S->setCatchParamDecl(ReadDeclAs<VarDecl>(Record, Idx)); 918c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtCatchLoc(ReadSourceLocation(Record, Idx)); 919c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setRParenLoc(ReadSourceLocation(Record, Idx)); 9204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 92260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *S) { 9234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 924d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setFinallyBody(Reader.ReadSubStmt()); 925c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtFinallyLoc(ReadSourceLocation(Record, Idx)); 9264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 928f85e193739c953358c865005855253af4f68a497John McCallvoid ASTStmtReader::VisitObjCAutoreleasePoolStmt(ObjCAutoreleasePoolStmt *S) { 929f85e193739c953358c865005855253af4f68a497John McCall VisitStmt(S); 930f85e193739c953358c865005855253af4f68a497John McCall S->setSubStmt(Reader.ReadSubStmt()); 931f85e193739c953358c865005855253af4f68a497John McCall S->setAtLoc(ReadSourceLocation(Record, Idx)); 932f85e193739c953358c865005855253af4f68a497John McCall} 933f85e193739c953358c865005855253af4f68a497John McCall 93460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtTryStmt(ObjCAtTryStmt *S) { 9354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 9368f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor assert(Record[Idx] == S->getNumCatchStmts()); 9378f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor ++Idx; 9388f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor bool HasFinally = Record[Idx++]; 939d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setTryBody(Reader.ReadSubStmt()); 940919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis for (unsigned I = 0, N = S->getNumCatchStmts(); I != N; ++I) 941d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setCatchStmt(I, cast_or_null<ObjCAtCatchStmt>(Reader.ReadSubStmt())); 9428f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor 9438f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor if (HasFinally) 944d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setFinallyStmt(Reader.ReadSubStmt()); 945c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtTryLoc(ReadSourceLocation(Record, Idx)); 9464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 94860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *S) { 9494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 950d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSynchExpr(Reader.ReadSubStmt()); 951d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setSynchBody(Reader.ReadSubStmt()); 952c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setAtSynchronizedLoc(ReadSourceLocation(Record, Idx)); 9534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 95560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitObjCAtThrowStmt(ObjCAtThrowStmt *S) { 9564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner VisitStmt(S); 957d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis S->setThrowExpr(Reader.ReadSubStmt()); 958c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->setThrowLoc(ReadSourceLocation(Record, Idx)); 9594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 9604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 961ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 962ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis// C++ Expressions and Statements 9637cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 9647cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 96560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXCatchStmt(CXXCatchStmt *S) { 9667cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis VisitStmt(S); 967c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->CatchLoc = ReadSourceLocation(Record, Idx); 968409448c832d27703146b70a1137d86b020f29863Douglas Gregor S->ExceptionDecl = ReadDeclAs<VarDecl>(Record, Idx); 9697cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->HandlerBlock = Reader.ReadSubStmt(); 9707cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis} 9717cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 97260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXTryStmt(CXXTryStmt *S) { 9737cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis VisitStmt(S); 9747cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis assert(Record[Idx] == S->getNumHandlers() && "NumStmtFields is wrong ?"); 9757cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis ++Idx; 976c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl S->TryLoc = ReadSourceLocation(Record, Idx); 9777cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->getStmts()[0] = Reader.ReadSubStmt(); 9787cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis for (unsigned i = 0, e = S->getNumHandlers(); i != e; ++i) 9797cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S->getStmts()[i + 1] = Reader.ReadSubStmt(); 9807cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis} 981ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis 982ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smithvoid ASTStmtReader::VisitCXXForRangeStmt(CXXForRangeStmt *S) { 983ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith VisitStmt(S); 984ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setForLoc(ReadSourceLocation(Record, Idx)); 985ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setColonLoc(ReadSourceLocation(Record, Idx)); 986ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setRParenLoc(ReadSourceLocation(Record, Idx)); 987ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setRangeStmt(Reader.ReadSubStmt()); 988ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setBeginEndStmt(Reader.ReadSubStmt()); 989ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setCond(Reader.ReadSubExpr()); 990ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setInc(Reader.ReadSubExpr()); 991ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setLoopVarStmt(Reader.ReadSubStmt()); 992ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S->setBody(Reader.ReadSubStmt()); 993ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith} 994ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith 99560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) { 996919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitCallExpr(E); 997ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis E->setOperator((OverloadedOperatorKind)Record[Idx++]); 998ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis} 999ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis 100060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXConstructExpr(CXXConstructExpr *E) { 100139da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor VisitExpr(E); 10026d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->NumArgs = Record[Idx++]; 10036d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis if (E->NumArgs) 1004359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor E->Args = new (Reader.getContext()) Stmt*[E->NumArgs]; 10055e1b7c2f419544a88537f7ff4e32ed744ba7b44eArgyrios Kyrtzidis for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 1006d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 1007409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setConstructor(ReadDeclAs<CXXConstructorDecl>(Record, Idx)); 1008c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 10097cc58b4c927fca539d43eaa58e00dca95946eb7cAbramo Bagnara E->setElidable(Record[Idx++]); 10107cc58b4c927fca539d43eaa58e00dca95946eb7cAbramo Bagnara E->setHadMultipleCandidates(Record[Idx++]); 101116006c901315fa12a108b4e571f187f4b676e426Douglas Gregor E->setRequiresZeroInitialization(Record[Idx++]); 10123c9034cb7ff1d6c1e4ecd1b44c98f553df013c7cDouglas Gregor E->setConstructionKind((CXXConstructExpr::ConstructionKind)Record[Idx++]); 1013428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->ParenRange = ReadSourceRange(Record, Idx); 101439da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor} 10154c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 101660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E) { 10176d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis VisitCXXConstructExpr(E); 1018c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Type = GetTypeSourceInfo(Record, Idx); 10196d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis} 10206d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 102160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXNamedCastExpr(CXXNamedCastExpr *E) { 1022919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitExplicitCastExpr(E); 10231d5d0b9df6d2a3df338bc3e63000536406e7666cDouglas Gregor SourceRange R = ReadSourceRange(Record, Idx); 10241d5d0b9df6d2a3df338bc3e63000536406e7666cDouglas Gregor E->Loc = R.getBegin(); 10251d5d0b9df6d2a3df338bc3e63000536406e7666cDouglas Gregor E->RParenLoc = R.getEnd(); 1026ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1027ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 102860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXStaticCastExpr(CXXStaticCastExpr *E) { 1029ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1030ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1031ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 103260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXDynamicCastExpr(CXXDynamicCastExpr *E) { 1033ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1034ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1035ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 103660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXReinterpretCastExpr(CXXReinterpretCastExpr *E) { 1037ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1038ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1039ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 104060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXConstCastExpr(CXXConstCastExpr *E) { 1041ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig return VisitCXXNamedCastExpr(E); 1042ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1043ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 104460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *E) { 1045919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitExplicitCastExpr(E); 1046c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setTypeBeginLoc(ReadSourceLocation(Record, Idx)); 1047c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 1048ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1049ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 105060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E) { 1051eb7f96141f754150a92433286fa385910a22f494Sam Weinig VisitExpr(E); 1052eb7f96141f754150a92433286fa385910a22f494Sam Weinig E->setValue(Record[Idx++]); 1053c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 1054eb7f96141f754150a92433286fa385910a22f494Sam Weinig} 1055eb7f96141f754150a92433286fa385910a22f494Sam Weinig 105660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E) { 1057eb7f96141f754150a92433286fa385910a22f494Sam Weinig VisitExpr(E); 1058c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 1059eb7f96141f754150a92433286fa385910a22f494Sam Weinig} 1060eb7f96141f754150a92433286fa385910a22f494Sam Weinig 106160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXTypeidExpr(CXXTypeidExpr *E) { 106214ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner VisitExpr(E); 1063c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setSourceRange(ReadSourceRange(Record, Idx)); 106414ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner if (E->isTypeOperand()) { // typeid(int) 1065577d4796d358c0e72ebaa023113505226ab51b4fSebastian Redl E->setTypeOperandSourceInfo( 1066c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl GetTypeSourceInfo(Record, Idx)); 1067919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis return; 106814ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner } 106914ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 107014ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner // typeid(42+2) 1071d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setExprOperand(Reader.ReadSubExpr()); 107214ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner} 107314ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 107460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXThisExpr(CXXThisExpr *E) { 10752fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner VisitExpr(E); 1076c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLocation(ReadSourceLocation(Record, Idx)); 10772fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner E->setImplicit(Record[Idx++]); 10782fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner} 10792fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner 108060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXThrowExpr(CXXThrowExpr *E) { 10812fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner VisitExpr(E); 1082bca01b46850f867b2f4137f25c882022b58f8471Douglas Gregor E->ThrowLoc = ReadSourceLocation(Record, Idx); 1083bca01b46850f867b2f4137f25c882022b58f8471Douglas Gregor E->Op = Reader.ReadSubExpr(); 1084bca01b46850f867b2f4137f25c882022b58f8471Douglas Gregor E->IsThrownVariableInScope = Record[Idx++]; 10852fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner} 108614ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 108760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) { 1088030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner VisitExpr(E); 10898a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis 1090df2265591f7ce284160a3853611c43bc37170458Douglas Gregor assert((bool)Record[Idx] == E->Param.getInt() && "We messed up at creation ?"); 10918a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis ++Idx; // HasOtherExprStored and SubExpr was handled during creation. 1092409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->Param.setPointer(ReadDeclAs<ParmVarDecl>(Record, Idx)); 1093c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Loc = ReadSourceLocation(Record, Idx); 1094d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner} 1095d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 109660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E) { 1097d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner VisitExpr(E); 1098409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setTemporary(Reader.ReadCXXTemporary(F, Record, Idx)); 1099d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 1100d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner} 1101d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 110260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E) { 11035921863d8f24084797863b5df37842113bac4352Chris Lattner VisitExpr(E); 1104c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->TypeInfo = GetTypeSourceInfo(Record, Idx); 1105c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->RParenLoc = ReadSourceLocation(Record, Idx); 11065921863d8f24084797863b5df37842113bac4352Chris Lattner} 11075921863d8f24084797863b5df37842113bac4352Chris Lattner 110860adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXNewExpr(CXXNewExpr *E) { 11095921863d8f24084797863b5df37842113bac4352Chris Lattner VisitExpr(E); 11106ec278d1a354517e20f13a877481453ee7940c78John McCall E->GlobalNew = Record[Idx++]; 11116ec278d1a354517e20f13a877481453ee7940c78John McCall E->Initializer = Record[Idx++]; 11126ec278d1a354517e20f13a877481453ee7940c78John McCall E->UsualArrayDeleteWantsSize = Record[Idx++]; 11135921863d8f24084797863b5df37842113bac4352Chris Lattner bool isArray = Record[Idx++]; 11147cc58b4c927fca539d43eaa58e00dca95946eb7cAbramo Bagnara E->setHadMultipleCandidates(Record[Idx++]); 11155921863d8f24084797863b5df37842113bac4352Chris Lattner unsigned NumPlacementArgs = Record[Idx++]; 11165921863d8f24084797863b5df37842113bac4352Chris Lattner unsigned NumCtorArgs = Record[Idx++]; 1117409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setOperatorNew(ReadDeclAs<FunctionDecl>(Record, Idx)); 1118409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setOperatorDelete(ReadDeclAs<FunctionDecl>(Record, Idx)); 1119409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setConstructor(ReadDeclAs<CXXConstructorDecl>(Record, Idx)); 1120c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->AllocatedTypeInfo = GetTypeSourceInfo(Record, Idx); 11214bd40318cbea15310a37343db46de96c4fcc15e6Douglas Gregor SourceRange TypeIdParens; 1122c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl TypeIdParens.setBegin(ReadSourceLocation(Record, Idx)); 1123c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl TypeIdParens.setEnd(ReadSourceLocation(Record, Idx)); 11244bd40318cbea15310a37343db46de96c4fcc15e6Douglas Gregor E->TypeIdParens = TypeIdParens; 1125428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->StartLoc = ReadSourceLocation(Record, Idx); 1126428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->EndLoc = ReadSourceLocation(Record, Idx); 1127428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->ConstructorLParen = ReadSourceLocation(Record, Idx); 1128428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth E->ConstructorRParen = ReadSourceLocation(Record, Idx); 1129428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth 1130359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor E->AllocateArgsArray(Reader.getContext(), isArray, NumPlacementArgs, 11315921863d8f24084797863b5df37842113bac4352Chris Lattner NumCtorArgs); 11325921863d8f24084797863b5df37842113bac4352Chris Lattner 11335921863d8f24084797863b5df37842113bac4352Chris Lattner // Install all the subexpressions. 11345921863d8f24084797863b5df37842113bac4352Chris Lattner for (CXXNewExpr::raw_arg_iterator I = E->raw_arg_begin(),e = E->raw_arg_end(); 11355921863d8f24084797863b5df37842113bac4352Chris Lattner I != e; ++I) 1136d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis *I = Reader.ReadSubStmt(); 11375921863d8f24084797863b5df37842113bac4352Chris Lattner} 11385921863d8f24084797863b5df37842113bac4352Chris Lattner 113960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXDeleteExpr(CXXDeleteExpr *E) { 114095fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis VisitExpr(E); 1141f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->GlobalDelete = Record[Idx++]; 1142f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->ArrayForm = Record[Idx++]; 11434076dacf1497fb95cb298b9d964fbdbdaf9bde6cArgyrios Kyrtzidis E->ArrayFormAsWritten = Record[Idx++]; 11446ec278d1a354517e20f13a877481453ee7940c78John McCall E->UsualArrayDeleteWantsSize = Record[Idx++]; 1145409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->OperatorDelete = ReadDeclAs<FunctionDecl>(Record, Idx); 1146f1b8911d35bb2830a13267581d3cbde4b6b85db6Argyrios Kyrtzidis E->Argument = Reader.ReadSubExpr(); 1147c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Loc = ReadSourceLocation(Record, Idx); 114895fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis} 1149d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 115060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E) { 1151de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis VisitExpr(E); 1152de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 1153f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->Base = Reader.ReadSubExpr(); 1154f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->IsArrow = Record[Idx++]; 1155f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->OperatorLoc = ReadSourceLocation(Record, Idx); 1156f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx); 1157f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->ScopeType = GetTypeSourceInfo(Record, Idx); 1158f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->ColonColonLoc = ReadSourceLocation(Record, Idx); 1159f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor E->TildeLoc = ReadSourceLocation(Record, Idx); 1160de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 116195eab176f51beed44a9bc14c0dcdd37844b23740Douglas Gregor IdentifierInfo *II = Reader.GetIdentifierInfo(F, Record, Idx); 1162de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis if (II) 1163c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setDestroyedType(II, ReadSourceLocation(Record, Idx)); 1164de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis else 1165c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setDestroyedType(GetTypeSourceInfo(Record, Idx)); 1166de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis} 1167de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 11684765fa05b5652fcc4356371c2f481d0ea9a1b007John McCallvoid ASTStmtReader::VisitExprWithCleanups(ExprWithCleanups *E) { 1169d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner VisitExpr(E); 1170d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner unsigned NumTemps = Record[Idx++]; 1171d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner if (NumTemps) { 1172359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor E->setNumTemporaries(Reader.getContext(), NumTemps); 1173d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner for (unsigned i = 0; i != NumTemps; ++i) 1174409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->setTemporary(i, Reader.ReadCXXTemporary(F, Record, Idx)); 1175d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner } 1176d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setSubExpr(Reader.ReadSubExpr()); 1177030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner} 1178030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner 1179919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisvoid 118060adf4acf40b72227740bf966fb87eebddff3f37Sebastian RedlASTStmtReader::VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E){ 11818dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis VisitExpr(E); 11828dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 1183def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor if (Record[Idx++]) 1184096832c5ed5b9106fa177ebc148489760c3bc496John McCall ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 1185def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor Record[Idx++]); 11868dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 11877c3179cf463c3b3b8c21dbb955f933ba50b74f28Douglas Gregor E->Base = Reader.ReadSubExpr(); 1188393f249399fe30e9580e1529a7479489e90f3a57Douglas Gregor E->BaseType = Reader.readType(F, Record, Idx); 11897c3179cf463c3b3b8c21dbb955f933ba50b74f28Douglas Gregor E->IsArrow = Record[Idx++]; 11907c3179cf463c3b3b8c21dbb955f933ba50b74f28Douglas Gregor E->OperatorLoc = ReadSourceLocation(Record, Idx); 11917c3179cf463c3b3b8c21dbb955f933ba50b74f28Douglas Gregor E->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx); 1192409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->FirstQualifierFoundInScope = ReadDeclAs<NamedDecl>(Record, Idx); 11934045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameInfo(E->MemberNameInfo, Record, Idx); 11948dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis} 11958dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 1196919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisvoid 119760adf4acf40b72227740bf966fb87eebddff3f37Sebastian RedlASTStmtReader::VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) { 119812dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis VisitExpr(E); 119912dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 1200def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor if (Record[Idx++]) 1201def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 1202def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor Record[Idx++]); 120300cf3cc2718671aa48e8da264a523b0058a8591eDouglas Gregor 120400cf3cc2718671aa48e8da264a523b0058a8591eDouglas Gregor E->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx); 12054045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameInfo(E->NameInfo, Record, Idx); 120612dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis} 120712dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 1208919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidisvoid 120960adf4acf40b72227740bf966fb87eebddff3f37Sebastian RedlASTStmtReader::VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E) { 12108dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis VisitExpr(E); 12118dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis assert(Record[Idx] == E->arg_size() && "Read wrong record during creation ?"); 12128dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis ++Idx; // NumArgs; 12138dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis for (unsigned I = 0, N = E->arg_size(); I != N; ++I) 1214d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis E->setArg(I, Reader.ReadSubExpr()); 1215c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Type = GetTypeSourceInfo(Record, Idx); 1216c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setLParenLoc(ReadSourceLocation(Record, Idx)); 1217c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->setRParenLoc(ReadSourceLocation(Record, Idx)); 12188dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis} 12198dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 122060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitOverloadExpr(OverloadExpr *E) { 1221a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis VisitExpr(E); 1222a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 1223def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor // Read the explicit template argument list, if available. 1224def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor if (Record[Idx++]) 1225919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(), 1226def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor Record[Idx++]); 1227a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 1228a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis unsigned NumDecls = Record[Idx++]; 1229a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis UnresolvedSet<8> Decls; 1230a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis for (unsigned i = 0; i != NumDecls; ++i) { 1231409448c832d27703146b70a1137d86b020f29863Douglas Gregor NamedDecl *D = ReadDeclAs<NamedDecl>(Record, Idx); 1232a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis AccessSpecifier AS = (AccessSpecifier)Record[Idx++]; 1233a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis Decls.addDecl(D, AS); 1234a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis } 1235359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor E->initializeResults(Reader.getContext(), Decls.begin(), Decls.end()); 1236a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 12374045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameInfo(E->NameInfo, Record, Idx); 12384c9be89bb615ec07eb3ed507c8fa9d0baa8a5ad7Douglas Gregor E->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx); 1239a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis} 1240a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 124160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnresolvedMemberExpr(UnresolvedMemberExpr *E) { 1242919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitOverloadExpr(E); 12434c9be89bb615ec07eb3ed507c8fa9d0baa8a5ad7Douglas Gregor E->IsArrow = Record[Idx++]; 12444c9be89bb615ec07eb3ed507c8fa9d0baa8a5ad7Douglas Gregor E->HasUnresolvedUsing = Record[Idx++]; 12454c9be89bb615ec07eb3ed507c8fa9d0baa8a5ad7Douglas Gregor E->Base = Reader.ReadSubExpr(); 1246393f249399fe30e9580e1529a7479489e90f3a57Douglas Gregor E->BaseType = Reader.readType(F, Record, Idx); 12474c9be89bb615ec07eb3ed507c8fa9d0baa8a5ad7Douglas Gregor E->OperatorLoc = ReadSourceLocation(Record, Idx); 1248a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis} 1249a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 125060adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E) { 1251919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis VisitOverloadExpr(E); 12524c9be89bb615ec07eb3ed507c8fa9d0baa8a5ad7Douglas Gregor E->RequiresADL = Record[Idx++]; 1253ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith if (E->RequiresADL) 1254ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith E->StdIsAssociatedNamespace = Record[Idx++]; 12554c9be89bb615ec07eb3ed507c8fa9d0baa8a5ad7Douglas Gregor E->Overloaded = Record[Idx++]; 1256409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->NamingClass = ReadDeclAs<CXXRecordDecl>(Record, Idx); 1257bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis} 1258bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis 125960adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redlvoid ASTStmtReader::VisitUnaryTypeTraitExpr(UnaryTypeTraitExpr *E) { 12606d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis VisitExpr(E); 12616d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->UTT = (UnaryTypeTrait)Record[Idx++]; 12620dfd848fa4c9664852ba8c929a8bd3fce93ddca2Sebastian Redl E->Value = (bool)Record[Idx++]; 1263c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceRange Range = ReadSourceRange(Record, Idx); 12646d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->Loc = Range.getBegin(); 12656d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis E->RParen = Range.getEnd(); 1266c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->QueriedType = GetTypeSourceInfo(Record, Idx); 12676d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis} 12686d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 12696ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichetvoid ASTStmtReader::VisitBinaryTypeTraitExpr(BinaryTypeTraitExpr *E) { 12706ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet VisitExpr(E); 12716ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->BTT = (BinaryTypeTrait)Record[Idx++]; 12726ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->Value = (bool)Record[Idx++]; 12736ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet SourceRange Range = ReadSourceRange(Record, Idx); 12746ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->Loc = Range.getBegin(); 12756ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->RParen = Range.getEnd(); 12766ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->LhsType = GetTypeSourceInfo(Record, Idx); 12776ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet E->RhsType = GetTypeSourceInfo(Record, Idx); 12786ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet} 12796ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet 128021ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegleyvoid ASTStmtReader::VisitArrayTypeTraitExpr(ArrayTypeTraitExpr *E) { 128121ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley VisitExpr(E); 128221ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley E->ATT = (ArrayTypeTrait)Record[Idx++]; 128321ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley E->Value = (unsigned int)Record[Idx++]; 128421ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley SourceRange Range = ReadSourceRange(Record, Idx); 128521ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley E->Loc = Range.getBegin(); 128621ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley E->RParen = Range.getEnd(); 128721ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley E->QueriedType = GetTypeSourceInfo(Record, Idx); 128821ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley} 128921ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley 1290552622067dc45013d240f73952fece703f5e63bdJohn Wiegleyvoid ASTStmtReader::VisitExpressionTraitExpr(ExpressionTraitExpr *E) { 1291552622067dc45013d240f73952fece703f5e63bdJohn Wiegley VisitExpr(E); 1292552622067dc45013d240f73952fece703f5e63bdJohn Wiegley E->ET = (ExpressionTrait)Record[Idx++]; 1293552622067dc45013d240f73952fece703f5e63bdJohn Wiegley E->Value = (bool)Record[Idx++]; 1294552622067dc45013d240f73952fece703f5e63bdJohn Wiegley SourceRange Range = ReadSourceRange(Record, Idx); 1295552622067dc45013d240f73952fece703f5e63bdJohn Wiegley E->QueriedExpression = Reader.ReadSubExpr(); 1296552622067dc45013d240f73952fece703f5e63bdJohn Wiegley E->Loc = Range.getBegin(); 1297552622067dc45013d240f73952fece703f5e63bdJohn Wiegley E->RParen = Range.getEnd(); 1298552622067dc45013d240f73952fece703f5e63bdJohn Wiegley} 1299552622067dc45013d240f73952fece703f5e63bdJohn Wiegley 13006b219d082434394c1ac401390ec1d1967727815aSebastian Redlvoid ASTStmtReader::VisitCXXNoexceptExpr(CXXNoexceptExpr *E) { 13016b219d082434394c1ac401390ec1d1967727815aSebastian Redl VisitExpr(E); 13025221d8f2da008689f7ff9476e6522bb2b63ec1a3Sebastian Redl E->Value = (bool)Record[Idx++]; 1303c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl E->Range = ReadSourceRange(Record, Idx); 13045221d8f2da008689f7ff9476e6522bb2b63ec1a3Sebastian Redl E->Operand = Reader.ReadSubExpr(); 13056b219d082434394c1ac401390ec1d1967727815aSebastian Redl} 13066b219d082434394c1ac401390ec1d1967727815aSebastian Redl 1307be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregorvoid ASTStmtReader::VisitPackExpansionExpr(PackExpansionExpr *E) { 1308be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor VisitExpr(E); 1309be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor E->EllipsisLoc = ReadSourceLocation(Record, Idx); 131067fd1251aad51bb80d050b7fa5e506fef0ec8e02Douglas Gregor E->NumExpansions = Record[Idx++]; 1311be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor E->Pattern = Reader.ReadSubExpr(); 1312be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor} 1313be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor 1314ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregorvoid ASTStmtReader::VisitSizeOfPackExpr(SizeOfPackExpr *E) { 1315ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor VisitExpr(E); 1316ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor E->OperatorLoc = ReadSourceLocation(Record, Idx); 1317ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor E->PackLoc = ReadSourceLocation(Record, Idx); 1318ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor E->RParenLoc = ReadSourceLocation(Record, Idx); 1319ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor E->Length = Record[Idx++]; 1320409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->Pack = ReadDeclAs<NamedDecl>(Record, Idx); 1321ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor} 1322ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor 13237110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtReader::VisitSubstNonTypeTemplateParmExpr( 13247110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall SubstNonTypeTemplateParmExpr *E) { 13257110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitExpr(E); 1326409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->Param = ReadDeclAs<NonTypeTemplateParmDecl>(Record, Idx); 13277110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->NameLoc = ReadSourceLocation(Record, Idx); 13287110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->Replacement = Reader.ReadSubExpr(); 13297110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 13307110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 1331c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregorvoid ASTStmtReader::VisitSubstNonTypeTemplateParmPackExpr( 1332c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor SubstNonTypeTemplateParmPackExpr *E) { 1333c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor VisitExpr(E); 1334409448c832d27703146b70a1137d86b020f29863Douglas Gregor E->Param = ReadDeclAs<NonTypeTemplateParmDecl>(Record, Idx); 1335c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor TemplateArgument ArgPack = Reader.ReadTemplateArgument(F, Record, Idx); 1336c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor if (ArgPack.getKind() != TemplateArgument::Pack) 1337c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor return; 1338c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor 1339c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor E->Arguments = ArgPack.pack_begin(); 1340c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor E->NumArguments = ArgPack.pack_size(); 1341c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor E->NameLoc = ReadSourceLocation(Record, Idx); 1342c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor} 1343c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor 134403e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregorvoid ASTStmtReader::VisitMaterializeTemporaryExpr(MaterializeTemporaryExpr *E) { 134503e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor VisitExpr(E); 134603e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor E->Temporary = Reader.ReadSubExpr(); 134703e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor} 134803e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor 13497cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCallvoid ASTStmtReader::VisitOpaqueValueExpr(OpaqueValueExpr *E) { 13507cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall VisitExpr(E); 135156ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall Idx++; // skip ID 1352b608b987718c6d841115464f79ab2d1820a63e17Douglas Gregor E->Loc = ReadSourceLocation(Record, Idx); 13537cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall} 13547cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall 1355e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne//===----------------------------------------------------------------------===// 13567110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall// Microsoft Expressions and Statements 13577110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall//===----------------------------------------------------------------------===// 13587110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtReader::VisitCXXUuidofExpr(CXXUuidofExpr *E) { 13597110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitExpr(E); 13607110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->setSourceRange(ReadSourceRange(Record, Idx)); 13617110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall if (E->isTypeOperand()) { // __uuidof(ComType) 13627110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->setTypeOperandSourceInfo( 13637110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall GetTypeSourceInfo(Record, Idx)); 13647110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall return; 13657110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall } 13667110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 13677110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall // __uuidof(expr) 13687110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->setExprOperand(Reader.ReadSubExpr()); 13697110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 13707110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 13717110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtReader::VisitSEHExceptStmt(SEHExceptStmt *S) { 13727110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitStmt(S); 13737110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->Loc = ReadSourceLocation(Record, Idx); 13747110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->Children[SEHExceptStmt::FILTER_EXPR] = Reader.ReadSubStmt(); 13757110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->Children[SEHExceptStmt::BLOCK] = Reader.ReadSubStmt(); 13767110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 13777110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 13787110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtReader::VisitSEHFinallyStmt(SEHFinallyStmt *S) { 13797110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitStmt(S); 13807110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->Loc = ReadSourceLocation(Record, Idx); 13817110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->Block = Reader.ReadSubStmt(); 13827110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 13837110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 13847110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtReader::VisitSEHTryStmt(SEHTryStmt *S) { 13857110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitStmt(S); 13867110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->IsCXXTry = Record[Idx++]; 13877110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->TryLoc = ReadSourceLocation(Record, Idx); 13887110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->Children[SEHTryStmt::TRY] = Reader.ReadSubStmt(); 13897110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S->Children[SEHTryStmt::HANDLER] = Reader.ReadSubStmt(); 13907110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 13917110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 13927110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall//===----------------------------------------------------------------------===// 1393e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne// CUDA Expressions and Statements 1394e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne//===----------------------------------------------------------------------===// 1395e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne 1396e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbournevoid ASTStmtReader::VisitCUDAKernelCallExpr(CUDAKernelCallExpr *E) { 1397e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne VisitCallExpr(E); 1398e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne E->setConfig(cast<CallExpr>(Reader.ReadSubExpr())); 1399e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne} 1400e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne 14017110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall//===----------------------------------------------------------------------===// 14027110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall// OpenCL Expressions and Statements. 14037110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall//===----------------------------------------------------------------------===// 14047110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtReader::VisitAsTypeExpr(AsTypeExpr *E) { 14057110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitExpr(E); 14067110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->BuiltinLoc = ReadSourceLocation(Record, Idx); 14077110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->RParenLoc = ReadSourceLocation(Record, Idx); 14087110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall E->SrcExpr = Reader.ReadSubExpr(); 14097110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 14107110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 14117110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall//===----------------------------------------------------------------------===// 14127110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall// ASTReader Implementation 14137110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall//===----------------------------------------------------------------------===// 14147110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 141572a9ae18553bf8b6bdad84d2c54f73741a47e275Douglas GregorStmt *ASTReader::ReadStmt(Module &F) { 1416919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis switch (ReadingKind) { 1417919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis case Read_Decl: 1418919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis case Read_Type: 1419c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return ReadStmtFromStream(F); 1420919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis case Read_Stmt: 1421d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis return ReadSubStmt(); 1422919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis } 1423919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1424919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis llvm_unreachable("ReadingKind not set ?"); 1425919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis return 0; 1426919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis} 1427919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 142872a9ae18553bf8b6bdad84d2c54f73741a47e275Douglas GregorExpr *ASTReader::ReadExpr(Module &F) { 1429c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl return cast_or_null<Expr>(ReadStmt(F)); 1430919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis} 1431030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner 1432c43b54cbc10654ed59de797898042e1a05265246Sebastian RedlExpr *ASTReader::ReadSubExpr() { 1433d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis return cast_or_null<Expr>(ReadSubStmt()); 1434d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis} 1435d98a2ab9275f896df49e42ea4e4b8871610e0f45Argyrios Kyrtzidis 143652e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// Within the bitstream, expressions are stored in Reverse Polish 143752e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// Notation, with each of the subexpressions preceding the 1438919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis// expression they are stored in. Subexpressions are stored from last to first. 1439919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis// To evaluate expressions, we continue reading expressions and placing them on 1440919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis// the stack, with expressions having operands removing those operands from the 144152e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// stack. Evaluation terminates when we see a STMT_STOP record, and 144252e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner// the single remaining expression on the stack is our result. 144372a9ae18553bf8b6bdad84d2c54f73741a47e275Douglas GregorStmt *ASTReader::ReadStmtFromStream(Module &F) { 1444919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1445919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis ReadingKindTracker ReadingKind(Read_Stmt, *this); 1446c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl llvm::BitstreamCursor &Cursor = F.DeclsCursor; 1447c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl 1448919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#ifndef NDEBUG 1449919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis unsigned PrevNumStmts = StmtStack.size(); 1450919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#endif 1451919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 14524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner RecordData Record; 14534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner unsigned Idx; 1454c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ASTStmtReader Reader(*this, F, Cursor, Record, Idx); 14554c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Stmt::EmptyShell Empty; 14564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner while (true) { 145852e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner unsigned Code = Cursor.ReadCode(); 14594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Code == llvm::bitc::END_BLOCK) { 146052e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner if (Cursor.ReadBlockEnd()) { 14613c7f4134603d04b44f997b43c0a9def270f25386Sebastian Redl Error("error at end of block in AST file"); 14624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner return 0; 14634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 14644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 14664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14674c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Code == llvm::bitc::ENTER_SUBBLOCK) { 14684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // No known subblocks, always skip them. 146952e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner Cursor.ReadSubBlockID(); 147052e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner if (Cursor.SkipBlock()) { 14713c7f4134603d04b44f997b43c0a9def270f25386Sebastian Redl Error("malformed block record in AST file"); 14724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner return 0; 14734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 14744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner continue; 14754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 14764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Code == llvm::bitc::DEFINE_ABBREV) { 147852e97d1afc98cf4cf0a6cb8f43769dfd8acbab20Chris Lattner Cursor.ReadAbbrevRecord(); 14794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner continue; 14804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 14814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14824c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Stmt *S = 0; 14834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Idx = 0; 14844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Record.clear(); 14854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner bool Finished = false; 14868538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl switch ((StmtCode)Cursor.ReadRecord(Code, Record)) { 14878538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_STOP: 14884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner Finished = true; 14894c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14904c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14918538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_NULL_PTR: 14921eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump S = 0; 14934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14958538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_NULL: 14964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) NullStmt(Empty); 14974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 14984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 14998538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_COMPOUND: 15004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CompoundStmt(Empty); 15014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15038538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CASE: 15044c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CaseStmt(Empty); 15054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15078538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_DEFAULT: 15084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) DefaultStmt(Empty); 15094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15118538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_LABEL: 15124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) LabelStmt(Empty); 15134c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15144c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15158538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_IF: 15164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) IfStmt(Empty); 15174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15198538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_SWITCH: 15204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) SwitchStmt(Empty); 15214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15238538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_WHILE: 15244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) WhileStmt(Empty); 15254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15278538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_DO: 15284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) DoStmt(Empty); 15294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15301eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15318538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_FOR: 15324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ForStmt(Empty); 15334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15344c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15358538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_GOTO: 15364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) GotoStmt(Empty); 15374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15381eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15398538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_INDIRECT_GOTO: 15404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) IndirectGotoStmt(Empty); 15414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15438538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CONTINUE: 15444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ContinueStmt(Empty); 15454c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15478538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_BREAK: 15484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BreakStmt(Empty); 15494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15504c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15518538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_RETURN: 15524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ReturnStmt(Empty); 15534c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15544c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15558538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_DECL: 15564c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) DeclStmt(Empty); 15574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15584c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15598538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_ASM: 15604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) AsmStmt(Empty); 15614c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15638538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_PREDEFINED: 15644c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) PredefinedExpr(Empty); 15654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15661eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15678538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_DECL_REF: 15683aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth S = DeclRefExpr::CreateEmpty( 1569359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor Context, 15703aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth /*HasQualifier=*/Record[ASTStmtReader::NumExprFields], 15713aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth /*HasFoundDecl=*/Record[ASTStmtReader::NumExprFields + 1], 15723aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth /*HasExplicitTemplateArgs=*/Record[ASTStmtReader::NumExprFields + 2], 15733aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields + 2] ? 15747cc58b4c927fca539d43eaa58e00dca95946eb7cAbramo Bagnara Record[ASTStmtReader::NumExprFields + 4] : 0); 15754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15761eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15778538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_INTEGER_LITERAL: 1578359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = IntegerLiteral::Create(Context, Empty); 15794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15801eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15818538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_FLOATING_LITERAL: 1582359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = FloatingLiteral::Create(Context, Empty); 15834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 15858538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_IMAGINARY_LITERAL: 15864c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ImaginaryLiteral(Empty); 15874c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15884c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15898538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_STRING_LITERAL: 1590359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = StringLiteral::CreateEmpty(Context, 159160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields + 1]); 15924c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15948538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CHARACTER_LITERAL: 15954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CharacterLiteral(Empty); 15964c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 15974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 15988538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_PAREN: 15994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ParenExpr(Empty); 16004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16028538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_PAREN_LIST: 160337bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis S = new (Context) ParenListExpr(Empty); 160437bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis break; 160537bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis 16068538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_UNARY_OPERATOR: 16074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) UnaryOperator(Empty); 16084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16108538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OFFSETOF: 1611359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = OffsetOfExpr::CreateEmpty(Context, 161260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields], 161360adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields + 1]); 16148ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 16158ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 16168538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_SIZEOF_ALIGN_OF: 1617f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbourne S = new (Context) UnaryExprOrTypeTraitExpr(Empty); 16184c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16208538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_ARRAY_SUBSCRIPT: 16214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ArraySubscriptExpr(Empty); 16224c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16248538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CALL: 1625359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = new (Context) CallExpr(Context, Stmt::CallExprClass, Empty); 16264c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16288538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_MEMBER: { 1629663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // We load everything here and fully initialize it at creation. 1630663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // That way we can use MemberExpr::Create and don't have to duplicate its 1631663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // logic with a MemberExpr::CreateEmpty. 1632663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1633663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis assert(Idx == 0); 163440d96a69c0e1e8c10f92d450c305a7aae696ca9cDouglas Gregor NestedNameSpecifierLoc QualifierLoc; 1635663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis if (Record[Idx++]) { // HasQualifier. 163640d96a69c0e1e8c10f92d450c305a7aae696ca9cDouglas Gregor QualifierLoc = ReadNestedNameSpecifierLoc(F, Record, Idx); 1637663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 1638663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1639663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis TemplateArgumentListInfo ArgInfo; 1640def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor bool HasExplicitTemplateArgs = Record[Idx++]; 1641def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor if (HasExplicitTemplateArgs) { 1642def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor unsigned NumTemplateArgs = Record[Idx++]; 1643c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.setLAngleLoc(ReadSourceLocation(F, Record, Idx)); 1644c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.setRAngleLoc(ReadSourceLocation(F, Record, Idx)); 1645663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis for (unsigned i = 0; i != NumTemplateArgs; ++i) 1646c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl ArgInfo.addArgument(ReadTemplateArgumentLoc(F, Record, Idx)); 1647663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 16487cc58b4c927fca539d43eaa58e00dca95946eb7cAbramo Bagnara 16497cc58b4c927fca539d43eaa58e00dca95946eb7cAbramo Bagnara bool HadMultipleCandidates = Record[Idx++]; 16507cc58b4c927fca539d43eaa58e00dca95946eb7cAbramo Bagnara 1651409448c832d27703146b70a1137d86b020f29863Douglas Gregor NamedDecl *FoundD = ReadDeclAs<NamedDecl>(F, Record, Idx); 1652663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis AccessSpecifier AS = (AccessSpecifier)Record[Idx++]; 1653663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis DeclAccessPair FoundDecl = DeclAccessPair::make(FoundD, AS); 1654663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1655393f249399fe30e9580e1529a7479489e90f3a57Douglas Gregor QualType T = readType(F, Record, Idx); 1656f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall ExprValueKind VK = static_cast<ExprValueKind>(Record[Idx++]); 1657f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall ExprObjectKind OK = static_cast<ExprObjectKind>(Record[Idx++]); 1658663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis Expr *Base = ReadSubExpr(); 1659409448c832d27703146b70a1137d86b020f29863Douglas Gregor ValueDecl *MemberD = ReadDeclAs<ValueDecl>(F, Record, Idx); 1660c3632730cc83ed7b51f0ab5c38997ae5a9439b0cSebastian Redl SourceLocation MemberLoc = ReadSourceLocation(F, Record, Idx); 16612577743c5650c646fb705df01403707e94f2df04Abramo Bagnara DeclarationNameInfo MemberNameInfo(MemberD->getDeclName(), MemberLoc); 1662663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis bool IsArrow = Record[Idx++]; 1663663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 1664359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = MemberExpr::Create(Context, Base, IsArrow, QualifierLoc, 16652577743c5650c646fb705df01403707e94f2df04Abramo Bagnara MemberD, FoundDecl, MemberNameInfo, 1666def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor HasExplicitTemplateArgs ? &ArgInfo : 0, T, VK, OK); 16674045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis ReadDeclarationNameLoc(F, cast<MemberExpr>(S)->MemberDNLoc, 16684045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis MemberD->getDeclName(), Record, Idx); 16697cc58b4c927fca539d43eaa58e00dca95946eb7cAbramo Bagnara if (HadMultipleCandidates) 16707cc58b4c927fca539d43eaa58e00dca95946eb7cAbramo Bagnara cast<MemberExpr>(S)->setHadMultipleCandidates(true); 16714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 1672663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 16734c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16748538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_BINARY_OPERATOR: 16754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BinaryOperator(Empty); 16764c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16774c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16788538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_COMPOUND_ASSIGN_OPERATOR: 16794c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CompoundAssignOperator(Empty); 16804c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16814c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16828538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CONDITIONAL_OPERATOR: 16834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ConditionalOperator(Empty); 16844c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16854c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 168656ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall case EXPR_BINARY_CONDITIONAL_OPERATOR: 168756ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall S = new (Context) BinaryConditionalOperator(Empty); 168856ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall break; 168956ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 16908538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_IMPLICIT_CAST: 1691359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = ImplicitCastExpr::CreateEmpty(Context, 169260adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 16934c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 16958538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CSTYLE_CAST: 1696359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = CStyleCastExpr::CreateEmpty(Context, 169760adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 16984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 16994c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17008538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_COMPOUND_LITERAL: 17014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) CompoundLiteralExpr(Empty); 17024c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17034c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17048538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_EXT_VECTOR_ELEMENT: 17054c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ExtVectorElementExpr(Empty); 17064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17074c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17088538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_INIT_LIST: 1709359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = new (Context) InitListExpr(getContext(), Empty); 17104c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17128538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_DESIGNATED_INIT: 1713359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = DesignatedInitExpr::CreateEmpty(Context, 171460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumExprFields] - 1); 17151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 17164c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17174c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17188538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_IMPLICIT_VALUE_INIT: 17194c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ImplicitValueInitExpr(Empty); 17204c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17214c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17228538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_VA_ARG: 17234c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) VAArgExpr(Empty); 17244c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17254c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17268538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_ADDR_LABEL: 17274c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) AddrLabelExpr(Empty); 17284c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17294c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17308538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_STMT: 17314c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) StmtExpr(Empty); 17324c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17334c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17348538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CHOOSE: 17354c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ChooseExpr(Empty); 17364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17374c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17388538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_GNU_NULL: 17394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) GNUNullExpr(Empty); 17404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17428538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_SHUFFLE_VECTOR: 17434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ShuffleVectorExpr(Empty); 17444c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 17468538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_BLOCK: 17474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BlockExpr(Empty); 17484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 17508538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_BLOCK_DECL_REF: 17514c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) BlockDeclRefExpr(Empty); 17524c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17531eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1754f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne case EXPR_GENERIC_SELECTION: 1755f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne S = new (Context) GenericSelectionExpr(Empty); 1756f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne break; 1757f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne 17588538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_STRING_LITERAL: 17594c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCStringLiteral(Empty); 17604c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17618538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_ENCODE: 17624c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCEncodeExpr(Empty); 17634c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17648538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_SELECTOR_EXPR: 17654c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCSelectorExpr(Empty); 17664c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17678538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_PROTOCOL_EXPR: 17684c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCProtocolExpr(Empty); 17694c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17708538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_IVAR_REF_EXPR: 17714c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCIvarRefExpr(Empty); 17724c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17738538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_PROPERTY_REF_EXPR: 17744c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCPropertyRefExpr(Empty); 17754c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17768538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_KVC_REF_EXPR: 177712f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall llvm_unreachable("mismatching AST file"); 17784c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17798538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_MESSAGE_EXPR: 1780359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = ObjCMessageExpr::CreateEmpty(Context, 1781207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis Record[ASTStmtReader::NumExprFields], 1782207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis Record[ASTStmtReader::NumExprFields + 1]); 17834c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17848538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_OBJC_ISA: 1785f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff S = new (Context) ObjCIsaExpr(Empty); 1786f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff break; 1787f85e193739c953358c865005855253af4f68a497John McCall case EXPR_OBJC_INDIRECT_COPY_RESTORE: 1788f85e193739c953358c865005855253af4f68a497John McCall S = new (Context) ObjCIndirectCopyRestoreExpr(Empty); 1789f85e193739c953358c865005855253af4f68a497John McCall break; 1790f85e193739c953358c865005855253af4f68a497John McCall case EXPR_OBJC_BRIDGED_CAST: 1791f85e193739c953358c865005855253af4f68a497John McCall S = new (Context) ObjCBridgedCastExpr(Empty); 1792f85e193739c953358c865005855253af4f68a497John McCall break; 17938538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_FOR_COLLECTION: 17944c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCForCollectionStmt(Empty); 17954c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17968538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_CATCH: 17974c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtCatchStmt(Empty); 17984c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 17998538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_FINALLY: 18004c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtFinallyStmt(Empty); 18014c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 18028538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_AT_TRY: 1803359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = ObjCAtTryStmt::CreateEmpty(Context, 180460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumStmtFields], 180560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl Record[ASTStmtReader::NumStmtFields + 1]); 18064c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 18078538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_AT_SYNCHRONIZED: 18084c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtSynchronizedStmt(Empty); 18094c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 18108538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_OBJC_AT_THROW: 18114c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner S = new (Context) ObjCAtThrowStmt(Empty); 18124c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 1813f85e193739c953358c865005855253af4f68a497John McCall case STMT_OBJC_AUTORELEASE_POOL: 1814f85e193739c953358c865005855253af4f68a497John McCall S = new (Context) ObjCAutoreleasePoolStmt(Empty); 1815f85e193739c953358c865005855253af4f68a497John McCall break; 18167110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall case STMT_SEH_EXCEPT: 18177110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S = new (Context) SEHExceptStmt(Empty); 18187110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall break; 18197110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall case STMT_SEH_FINALLY: 18207110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S = new (Context) SEHFinallyStmt(Empty); 18217110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall break; 18227110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall case STMT_SEH_TRY: 18237110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S = new (Context) SEHTryStmt(Empty); 18247110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall break; 18258538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CXX_CATCH: 18267cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis S = new (Context) CXXCatchStmt(Empty); 18277cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis break; 18287cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 18298538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case STMT_CXX_TRY: 1830359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = CXXTryStmt::Create(Context, Empty, 183160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumHandlers=*/Record[ASTStmtReader::NumStmtFields]); 18327cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis break; 18337cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 1834ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith case STMT_CXX_FOR_RANGE: 1835ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith S = new (Context) CXXForRangeStmt(Empty); 1836ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith break; 1837ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith 18388538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_OPERATOR_CALL: 1839359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = new (Context) CXXOperatorCallExpr(Context, Empty); 1840ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis break; 18411817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner 18428538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_MEMBER_CALL: 1843359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = new (Context) CXXMemberCallExpr(Context, Empty); 18441817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner break; 184539da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor 18468538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_CONSTRUCT: 18476d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis S = new (Context) CXXConstructExpr(Empty); 18486d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis break; 18496d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 18508538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_TEMPORARY_OBJECT: 18516d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis S = new (Context) CXXTemporaryObjectExpr(Empty); 185239da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor break; 1853ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 18548538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_STATIC_CAST: 1855359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = CXXStaticCastExpr::CreateEmpty(Context, 185660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1857ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1858ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 18598538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DYNAMIC_CAST: 1860359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = CXXDynamicCastExpr::CreateEmpty(Context, 186160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1862ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1863ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 18648538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_REINTERPRET_CAST: 1865359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = CXXReinterpretCastExpr::CreateEmpty(Context, 186660adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1867ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1868ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 18698538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_CONST_CAST: 1870359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = CXXConstCastExpr::CreateEmpty(Context); 1871ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1872ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 18738538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_FUNCTIONAL_CAST: 1874359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = CXXFunctionalCastExpr::CreateEmpty(Context, 187560adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 1876ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig break; 1877ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 18788538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_BOOL_LITERAL: 1879eb7f96141f754150a92433286fa385910a22f494Sam Weinig S = new (Context) CXXBoolLiteralExpr(Empty); 1880eb7f96141f754150a92433286fa385910a22f494Sam Weinig break; 1881ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 18828538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_NULL_PTR_LITERAL: 1883eb7f96141f754150a92433286fa385910a22f494Sam Weinig S = new (Context) CXXNullPtrLiteralExpr(Empty); 1884eb7f96141f754150a92433286fa385910a22f494Sam Weinig break; 18858538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_TYPEID_EXPR: 188614ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner S = new (Context) CXXTypeidExpr(Empty, true); 188714ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner break; 18888538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_TYPEID_TYPE: 188914ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner S = new (Context) CXXTypeidExpr(Empty, false); 189014ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner break; 189101b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet case EXPR_CXX_UUIDOF_EXPR: 189201b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet S = new (Context) CXXUuidofExpr(Empty, true); 189301b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet break; 189401b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet case EXPR_CXX_UUIDOF_TYPE: 189501b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet S = new (Context) CXXUuidofExpr(Empty, false); 189601b7c3028da5bbcb9f8e52ba67e4613070de0e60Francois Pichet break; 18978538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_THIS: 18982fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner S = new (Context) CXXThisExpr(Empty); 18992fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner break; 19008538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_THROW: 19012fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner S = new (Context) CXXThrowExpr(Empty); 19022fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner break; 19038538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DEFAULT_ARG: { 190460adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl bool HasOtherExprStored = Record[ASTStmtReader::NumExprFields]; 19058a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis if (HasOtherExprStored) { 19068a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis Expr *SubExpr = ReadSubExpr(); 1907359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = CXXDefaultArgExpr::Create(Context, SourceLocation(), 0, SubExpr); 19088a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis } else 19098a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis S = new (Context) CXXDefaultArgExpr(Empty); 1910030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner break; 19118a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis } 19128538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_BIND_TEMPORARY: 1913d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner S = new (Context) CXXBindTemporaryExpr(Empty); 1914d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner break; 1915e2ca6d4a2f41876930fbd304caa706452d2569d8Douglas Gregor 19168538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_SCALAR_VALUE_INIT: 1917ed8abf18329df67b0abcbb3a10458bd8c1d2a595Douglas Gregor S = new (Context) CXXScalarValueInitExpr(Empty); 19185921863d8f24084797863b5df37842113bac4352Chris Lattner break; 19198538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_NEW: 19205921863d8f24084797863b5df37842113bac4352Chris Lattner S = new (Context) CXXNewExpr(Empty); 19215921863d8f24084797863b5df37842113bac4352Chris Lattner break; 19228538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DELETE: 192395fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis S = new (Context) CXXDeleteExpr(Empty); 192495fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis break; 19258538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_PSEUDO_DESTRUCTOR: 1926de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis S = new (Context) CXXPseudoDestructorExpr(Empty); 1927de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis break; 19285921863d8f24084797863b5df37842113bac4352Chris Lattner 19294765fa05b5652fcc4356371c2f481d0ea9a1b007John McCall case EXPR_EXPR_WITH_CLEANUPS: 19304765fa05b5652fcc4356371c2f481d0ea9a1b007John McCall S = new (Context) ExprWithCleanups(Empty); 1931d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner break; 19328dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 19338538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DEPENDENT_SCOPE_MEMBER: 1934359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = CXXDependentScopeMemberExpr::CreateEmpty(Context, 1935def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*HasExplicitTemplateArgs=*/Record[ASTStmtReader::NumExprFields], 1936def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields] 1937def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ? Record[ASTStmtReader::NumExprFields + 1] 1938def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor : 0); 19398dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis break; 19408dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 19418538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_DEPENDENT_SCOPE_DECL_REF: 1942359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = DependentScopeDeclRefExpr::CreateEmpty(Context, 1943def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*HasExplicitTemplateArgs=*/Record[ASTStmtReader::NumExprFields], 1944def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields] 1945def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ? Record[ASTStmtReader::NumExprFields + 1] 1946def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor : 0); 194712dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis break; 194812dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 19498538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNRESOLVED_CONSTRUCT: 1950359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = CXXUnresolvedConstructExpr::CreateEmpty(Context, 195160adf4acf40b72227740bf966fb87eebddff3f37Sebastian Redl /*NumArgs=*/Record[ASTStmtReader::NumExprFields]); 1952a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis break; 1953a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 19548538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNRESOLVED_MEMBER: 1955359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = UnresolvedMemberExpr::CreateEmpty(Context, 1956def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*HasExplicitTemplateArgs=*/Record[ASTStmtReader::NumExprFields], 1957def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields] 1958def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ? Record[ASTStmtReader::NumExprFields + 1] 1959def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor : 0); 19608dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis break; 1961bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis 19628538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNRESOLVED_LOOKUP: 1963359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = UnresolvedLookupExpr::CreateEmpty(Context, 1964def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*HasExplicitTemplateArgs=*/Record[ASTStmtReader::NumExprFields], 1965def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields] 1966def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor ? Record[ASTStmtReader::NumExprFields + 1] 1967def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor : 0); 1968bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis break; 19696d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 19708538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl case EXPR_CXX_UNARY_TYPE_TRAIT: 19716d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis S = new (Context) UnaryTypeTraitExpr(Empty); 19726d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis break; 19736b219d082434394c1ac401390ec1d1967727815aSebastian Redl 1974f187237d916afa97c491ac32fe98be7d335c5b63Francois Pichet case EXPR_BINARY_TYPE_TRAIT: 19756ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet S = new (Context) BinaryTypeTraitExpr(Empty); 19766ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet break; 19776ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet 197821ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley case EXPR_ARRAY_TYPE_TRAIT: 197921ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley S = new (Context) ArrayTypeTraitExpr(Empty); 198021ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley break; 198121ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley 1982552622067dc45013d240f73952fece703f5e63bdJohn Wiegley case EXPR_CXX_EXPRESSION_TRAIT: 1983552622067dc45013d240f73952fece703f5e63bdJohn Wiegley S = new (Context) ExpressionTraitExpr(Empty); 1984552622067dc45013d240f73952fece703f5e63bdJohn Wiegley break; 1985552622067dc45013d240f73952fece703f5e63bdJohn Wiegley 19866b219d082434394c1ac401390ec1d1967727815aSebastian Redl case EXPR_CXX_NOEXCEPT: 19876b219d082434394c1ac401390ec1d1967727815aSebastian Redl S = new (Context) CXXNoexceptExpr(Empty); 19886b219d082434394c1ac401390ec1d1967727815aSebastian Redl break; 19897cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall 1990be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor case EXPR_PACK_EXPANSION: 1991be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor S = new (Context) PackExpansionExpr(Empty); 1992be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor break; 1993be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor 1994ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor case EXPR_SIZEOF_PACK: 1995ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor S = new (Context) SizeOfPackExpr(Empty); 1996ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor break; 1997ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor 19987110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall case EXPR_SUBST_NON_TYPE_TEMPLATE_PARM: 19997110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall S = new (Context) SubstNonTypeTemplateParmExpr(Empty); 20007110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall break; 20017110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 2002c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor case EXPR_SUBST_NON_TYPE_TEMPLATE_PARM_PACK: 2003c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor S = new (Context) SubstNonTypeTemplateParmPackExpr(Empty); 2004c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor break; 2005c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor 200603e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor case EXPR_MATERIALIZE_TEMPORARY: 200703e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor S = new (Context) MaterializeTemporaryExpr(Empty); 200803e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor break; 200903e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor 201056ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall case EXPR_OPAQUE_VALUE: { 201156ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall unsigned key = Record[ASTStmtReader::NumExprFields]; 201256ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall OpaqueValueExpr *&expr = OpaqueValueExprs[key]; 201356ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 201456ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall // If we already have an entry for this opaque value expression, 201556ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall // don't bother reading it again. 201656ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall if (expr) { 201756ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall StmtStack.push_back(expr); 201856ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall continue; 201956ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall } 202056ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 202156ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall S = expr = new (Context) OpaqueValueExpr(Empty); 20227cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall break; 202356ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall } 2024e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne 2025e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne case EXPR_CUDA_KERNEL_CALL: 2026359427794704666ff7a5a933ace11c5256fa3af7Douglas Gregor S = new (Context) CUDAKernelCallExpr(Context, Empty); 2027e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne break; 202861eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner 202961eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner case EXPR_ASTYPE: 203061eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner S = new (Context) AsTypeExpr(Empty); 203161eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner break; 2032276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman 2033276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman case EXPR_ATOMIC: 2034276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman S = new (Context) AtomicExpr(Empty); 2035276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman break; 20364c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 20376d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 20384c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner // We hit a STMT_STOP, so we're done with this expression. 20394c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner if (Finished) 20404c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner break; 20414c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 20424c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner ++NumStatementsRead; 20434c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 2044919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis if (S) 2045919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Reader.Visit(S); 20464c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner 20474c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner assert(Idx == Record.size() && "Invalid deserialization of statement"); 20484c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner StmtStack.push_back(S); 20494c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner } 2050919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 2051919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#ifndef NDEBUG 2052919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis assert(StmtStack.size() > PrevNumStmts && "Read too many sub stmts!"); 2053919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis assert(StmtStack.size() == PrevNumStmts + 1 && "Extra expressions on stack!"); 2054919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis#endif 2055919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 2056919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis return StmtStack.pop_back_val(); 20574c6f952b70abd69e52fa567393c60295edb8a1a5Chris Lattner} 2058