14ee2ad04344446e610172a0e73949212923014dfSebastian Redl//===--- ASTWriterStmt.cpp - Statement and Expression Serialization -------===// 263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner// 363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner// The LLVM Compiler Infrastructure 463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner// 563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner// This file is distributed under the University of Illinois Open Source 663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner// License. See LICENSE.TXT for details. 763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner// 863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner//===----------------------------------------------------------------------===// 963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner// 1063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner// This file implements serialization for Statements and Expressions. 1163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner// 1263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner//===----------------------------------------------------------------------===// 1363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 147faa2ec03a7ef120ac165bb45b6c70a8b20c9f1cSebastian Redl#include "clang/Serialization/ASTWriter.h" 15471c8b49982d1132f30b0b0da27fef94fd6e4f67Benjamin Kramer#include "clang/AST/ASTContext.h" 1639da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor#include "clang/AST/DeclCXX.h" 1763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner#include "clang/AST/DeclObjC.h" 18c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor#include "clang/AST/DeclTemplate.h" 1963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner#include "clang/AST/StmtVisitor.h" 20aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall#include "clang/Lex/Token.h" 2163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner#include "llvm/Bitcode/BitstreamWriter.h" 2263377d56de98cfef089a5758e8d4c7597a30269eChris Lattnerusing namespace clang; 2363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 2463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner//===----------------------------------------------------------------------===// 2563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner// Statement/expression serialization 2663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner//===----------------------------------------------------------------------===// 2763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 2837bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidisnamespace clang { 294fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev 303397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl class ASTStmtWriter : public StmtVisitor<ASTStmtWriter, void> { 314fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev friend class OMPClauseWriter; 32a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl ASTWriter &Writer; 33a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl ASTWriter::RecordData &Record; 3463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 3563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner public: 368538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl serialization::StmtCode Code; 37a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor unsigned AbbrevToUse; 3863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 393397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl ASTStmtWriter(ASTWriter &Writer, ASTWriter::RecordData &Record) 4063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner : Writer(Writer), Record(Record) { } 41e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara 42e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara void AddTemplateKWAndArgsInfo(const ASTTemplateKWAndArgsInfo &Args); 4363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 4463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner void VisitStmt(Stmt *S); 457110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall#define STMT(Type, Base) \ 467110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall void Visit##Type(Type *); 477110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall#include "clang/AST/StmtNodes.inc" 4863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner }; 4963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 5063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 513397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter:: 52e4b92761b43ced611c417ae478568610f1ad7b1eAbramo BagnaraAddTemplateKWAndArgsInfo(const ASTTemplateKWAndArgsInfo &Args) { 53e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara Writer.AddSourceLocation(Args.getTemplateKeywordLoc(), Record); 5436c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis Writer.AddSourceLocation(Args.LAngleLoc, Record); 5536c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis Writer.AddSourceLocation(Args.RAngleLoc, Record); 5636c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis for (unsigned i=0; i != Args.NumTemplateArgs; ++i) 5736c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis Writer.AddTemplateArgumentLoc(Args.getTemplateArgs()[i], Record); 5836c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis} 5936c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis 603397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitStmt(Stmt *S) { 6163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 6263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 633397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitNullStmt(NullStmt *S) { 6463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 6563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getSemiLoc(), Record); 66e2ca828119b8bff4a5c25c6db8ee4fec558451e7Argyrios Kyrtzidis Record.push_back(S->HasLeadingEmptyMacro); 678538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_NULL; 6863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 6963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 703397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCompoundStmt(CompoundStmt *S) { 7163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 7263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(S->size()); 7363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner for (CompoundStmt::body_iterator CS = S->body_begin(), CSEnd = S->body_end(); 7463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner CS != CSEnd; ++CS) 75919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(*CS); 7663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getLBracLoc(), Record); 7763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getRBracLoc(), Record); 788538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_COMPOUND; 7963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 8063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 813397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitSwitchCase(SwitchCase *S) { 8263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 83919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Record.push_back(Writer.getSwitchCaseID(S)); 8481cc2f1ecd31d8e3bca2c936fb9538a9d9c39695Argyrios Kyrtzidis Writer.AddSourceLocation(S->getKeywordLoc(), Record); 8581cc2f1ecd31d8e3bca2c936fb9538a9d9c39695Argyrios Kyrtzidis Writer.AddSourceLocation(S->getColonLoc(), Record); 8663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 8763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 883397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCaseStmt(CaseStmt *S) { 8963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitSwitchCase(S); 90919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getLHS()); 91919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getRHS()); 92919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getSubStmt()); 93dbb26db1d426fb6caaaf1b4fa47b46d1947c12c9Douglas Gregor Writer.AddSourceLocation(S->getEllipsisLoc(), Record); 948538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_CASE; 9563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 9663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 973397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitDefaultStmt(DefaultStmt *S) { 9863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitSwitchCase(S); 99919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getSubStmt()); 1008538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_DEFAULT; 10163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 10263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 1033397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitLabelStmt(LabelStmt *S) { 10463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 105ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner Writer.AddDeclRef(S->getDecl(), Record); 106919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getSubStmt()); 10763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getIdentLoc(), Record); 1088538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_LABEL; 10963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 11063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 111534986f2b21e6050bf00163cd6423fd92155a6edRichard Smithvoid ASTStmtWriter::VisitAttributedStmt(AttributedStmt *S) { 112534986f2b21e6050bf00163cd6423fd92155a6edRichard Smith VisitStmt(S); 1134990890fc9428f98bef90ba349203a648c592778Alexander Kornienko Record.push_back(S->getAttrs().size()); 114534986f2b21e6050bf00163cd6423fd92155a6edRichard Smith Writer.WriteAttributes(S->getAttrs(), Record); 115534986f2b21e6050bf00163cd6423fd92155a6edRichard Smith Writer.AddStmt(S->getSubStmt()); 116534986f2b21e6050bf00163cd6423fd92155a6edRichard Smith Writer.AddSourceLocation(S->getAttrLoc(), Record); 117534986f2b21e6050bf00163cd6423fd92155a6edRichard Smith Code = serialization::STMT_ATTRIBUTED; 118534986f2b21e6050bf00163cd6423fd92155a6edRichard Smith} 119534986f2b21e6050bf00163cd6423fd92155a6edRichard Smith 1203397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitIfStmt(IfStmt *S) { 12163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 1228cfe5a784133d90bf329fd20801824a6f71bb8caDouglas Gregor Writer.AddDeclRef(S->getConditionVariable(), Record); 123919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getCond()); 124919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getThen()); 125919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getElse()); 12663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getIfLoc(), Record); 127d06f6ca61062f85926eb9d409eb3d4f8afcf93c7Douglas Gregor Writer.AddSourceLocation(S->getElseLoc(), Record); 1288538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_IF; 12963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 13063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 1313397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitSwitchStmt(SwitchStmt *S) { 13263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 133d3d5301c44138b92bf01286183f5bf310cdd37cfDouglas Gregor Writer.AddDeclRef(S->getConditionVariable(), Record); 134919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getCond()); 135919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getBody()); 13663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getSwitchLoc(), Record); 137559fb554602bedb57dbbf3cc14ac8a38264b4547Ted Kremenek Record.push_back(S->isAllEnumCasesCovered()); 1381eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump for (SwitchCase *SC = S->getSwitchCaseList(); SC; 13963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner SC = SC->getNextSwitchCase()) 140919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Record.push_back(Writer.RecordSwitchCaseID(SC)); 1418538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_SWITCH; 14263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 14363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 1443397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitWhileStmt(WhileStmt *S) { 14563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 1465656e14d91405417182171a705ed3e3d2d6d7aa3Douglas Gregor Writer.AddDeclRef(S->getConditionVariable(), Record); 147919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getCond()); 148919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getBody()); 14963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getWhileLoc(), Record); 1508538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_WHILE; 15163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 15263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 1533397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitDoStmt(DoStmt *S) { 15463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 155919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getCond()); 156919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getBody()); 15763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getDoLoc(), Record); 1589f3ca2a7747bd47f14d7693f333103fac29a24d2Douglas Gregor Writer.AddSourceLocation(S->getWhileLoc(), Record); 159989135901c750af61ef012b6b0a0368be415bc46Chris Lattner Writer.AddSourceLocation(S->getRParenLoc(), Record); 1608538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_DO; 16163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 16263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 1633397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitForStmt(ForStmt *S) { 16463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 165919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getInit()); 166919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getCond()); 16799e9b4d172f6877e6ba5ebe75bb8238721f5e01cDouglas Gregor Writer.AddDeclRef(S->getConditionVariable(), Record); 168919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getInc()); 169919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getBody()); 17063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getForLoc(), Record); 1715831c6a1efc47e6a19d82fe3dd25b5b8fef6979dDouglas Gregor Writer.AddSourceLocation(S->getLParenLoc(), Record); 1725831c6a1efc47e6a19d82fe3dd25b5b8fef6979dDouglas Gregor Writer.AddSourceLocation(S->getRParenLoc(), Record); 1738538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_FOR; 17463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 17563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 1763397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitGotoStmt(GotoStmt *S) { 17763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 178ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner Writer.AddDeclRef(S->getLabel(), Record); 17963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getGotoLoc(), Record); 18063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getLabelLoc(), Record); 1818538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_GOTO; 18263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 18363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 1843397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitIndirectGotoStmt(IndirectGotoStmt *S) { 18563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 18663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getGotoLoc(), Record); 1875f1b9e689fa5c101512aef99225f2afea1673449Douglas Gregor Writer.AddSourceLocation(S->getStarLoc(), Record); 188919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getTarget()); 1898538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_INDIRECT_GOTO; 19063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 19163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 1923397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitContinueStmt(ContinueStmt *S) { 19363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 19463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getContinueLoc(), Record); 1958538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_CONTINUE; 19663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 19763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 1983397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitBreakStmt(BreakStmt *S) { 19963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 20063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getBreakLoc(), Record); 2018538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_BREAK; 20263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 20363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 2043397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitReturnStmt(ReturnStmt *S) { 20563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 206919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getRetValue()); 20763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getReturnLoc(), Record); 2085077c3876beeaed32280af88244e8050078619a8Douglas Gregor Writer.AddDeclRef(S->getNRVOCandidate(), Record); 2098538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_RETURN; 21063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 21163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 2123397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitDeclStmt(DeclStmt *S) { 21363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 21463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getStartLoc(), Record); 21563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getEndLoc(), Record); 21663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner DeclGroupRef DG = S->getDeclGroup(); 21763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner for (DeclGroupRef::iterator D = DG.begin(), DEnd = DG.end(); D != DEnd; ++D) 21863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddDeclRef(*D, Record); 2198538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_DECL; 22063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 22163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 222aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCallvoid ASTStmtWriter::VisitAsmStmt(AsmStmt *S) { 22363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 22463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(S->getNumOutputs()); 22563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(S->getNumInputs()); 22663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(S->getNumClobbers()); 22763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getAsmLoc(), Record); 22863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(S->isVolatile()); 22963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(S->isSimple()); 230aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall} 231aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall 232aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCallvoid ASTStmtWriter::VisitGCCAsmStmt(GCCAsmStmt *S) { 233aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall VisitAsmStmt(S); 234aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall Writer.AddSourceLocation(S->getRParenLoc(), Record); 235919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getAsmString()); 23663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 23763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner // Outputs 238ff93dbd887e40588ed55d135037bb9287488b285Anders Carlsson for (unsigned I = 0, N = S->getNumOutputs(); I != N; ++I) { 239ff93dbd887e40588ed55d135037bb9287488b285Anders Carlsson Writer.AddIdentifierRef(S->getOutputIdentifier(I), Record); 240919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getOutputConstraintLiteral(I)); 241919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getOutputExpr(I)); 24263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner } 24363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 24463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner // Inputs 24563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner for (unsigned I = 0, N = S->getNumInputs(); I != N; ++I) { 246ff93dbd887e40588ed55d135037bb9287488b285Anders Carlsson Writer.AddIdentifierRef(S->getInputIdentifier(I), Record); 247919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getInputConstraintLiteral(I)); 248919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getInputExpr(I)); 24963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner } 25063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 25163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner // Clobbers 25263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner for (unsigned I = 0, N = S->getNumClobbers(); I != N; ++I) 2535c7f59445ae68109c7ffee731aca2ce32db587c7Chad Rosier Writer.AddStmt(S->getClobberStringLiteral(I)); 25463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 255df5faf5e7ae6823d0af0b801c4ac26d47f2cee97Chad Rosier Code = serialization::STMT_GCCASM; 25663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 25763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 2588cd64b4c5553fa6284d248336cb7c82dc960a394Chad Rosiervoid ASTStmtWriter::VisitMSAsmStmt(MSAsmStmt *S) { 259aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall VisitAsmStmt(S); 260aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall Writer.AddSourceLocation(S->getLBraceLoc(), Record); 261aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall Writer.AddSourceLocation(S->getEndLoc(), Record); 262aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall Record.push_back(S->getNumAsmToks()); 263aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall Writer.AddString(S->getAsmString(), Record); 264aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall 265aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall // Tokens 266aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall for (unsigned I = 0, N = S->getNumAsmToks(); I != N; ++I) { 267aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall Writer.AddToken(S->getAsmToks()[I], Record); 268aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall } 269aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall 270aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall // Clobbers 271aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall for (unsigned I = 0, N = S->getNumClobbers(); I != N; ++I) { 272aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall Writer.AddString(S->getClobber(I), Record); 273aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall } 274aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall 275aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall // Outputs 276aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall for (unsigned I = 0, N = S->getNumOutputs(); I != N; ++I) { 277aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall Writer.AddStmt(S->getOutputExpr(I)); 278aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall Writer.AddString(S->getOutputConstraint(I), Record); 279aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall } 280aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall 281aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall // Inputs 282aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall for (unsigned I = 0, N = S->getNumInputs(); I != N; ++I) { 283aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall Writer.AddStmt(S->getInputExpr(I)); 284aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall Writer.AddString(S->getInputConstraint(I), Record); 285aeeacf725c9e0ddd64ea9764bd008e5b6873ce51John McCall } 286cd518a0ebc7c0a6aa41d717c360462540ef80a76Chad Rosier 287cd518a0ebc7c0a6aa41d717c360462540ef80a76Chad Rosier Code = serialization::STMT_MSASM; 2888cd64b4c5553fa6284d248336cb7c82dc960a394Chad Rosier} 2898cd64b4c5553fa6284d248336cb7c82dc960a394Chad Rosier 290051303ce09291dfbed537fa33b0d8a4d92c82b75Tareq A. Sirajvoid ASTStmtWriter::VisitCapturedStmt(CapturedStmt *S) { 291051303ce09291dfbed537fa33b0d8a4d92c82b75Tareq A. Siraj VisitStmt(S); 292dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir // NumCaptures 293dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir Record.push_back(std::distance(S->capture_begin(), S->capture_end())); 294dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir 2959fd6b8f5a73788f288edd01fa99d434d1e6588adWei Pan // CapturedDecl and captured region kind 296dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir Writer.AddDeclRef(S->getCapturedDecl(), Record); 2979fd6b8f5a73788f288edd01fa99d434d1e6588adWei Pan Record.push_back(S->getCapturedRegionKind()); 2989fd6b8f5a73788f288edd01fa99d434d1e6588adWei Pan 299dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir Writer.AddDeclRef(S->getCapturedRecordDecl(), Record); 300dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir 301dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir // Capture inits 302dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir for (CapturedStmt::capture_init_iterator I = S->capture_init_begin(), 303dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir E = S->capture_init_end(); 304dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir I != E; ++I) 305dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir Writer.AddStmt(*I); 306dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir 307dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir // Body 308dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir Writer.AddStmt(S->getCapturedStmt()); 309dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir 310dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir // Captures 311dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir for (CapturedStmt::capture_iterator I = S->capture_begin(), 312dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir E = S->capture_end(); 313dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir I != E; ++I) { 314dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir if (I->capturesThis()) 315dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir Writer.AddDeclRef(0, Record); 316dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir else 317dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir Writer.AddDeclRef(I->getCapturedVar(), Record); 318dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir Record.push_back(I->getCaptureKind()); 319dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir Writer.AddSourceLocation(I->getLocation(), Record); 320dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir } 321051303ce09291dfbed537fa33b0d8a4d92c82b75Tareq A. Siraj 322dc5be4f54d6415cb88b2f8a7c5bc9011e332b9b8Ben Langmuir Code = serialization::STMT_CAPTURED; 323051303ce09291dfbed537fa33b0d8a4d92c82b75Tareq A. Siraj} 324051303ce09291dfbed537fa33b0d8a4d92c82b75Tareq A. Siraj 3253397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitExpr(Expr *E) { 32663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(E); 32763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddTypeRef(E->getType(), Record); 32863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->isTypeDependent()); 32963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->isValueDependent()); 330561f81243f665cf2001caadc45df505f826b72d6Douglas Gregor Record.push_back(E->isInstantiationDependent()); 331d0937224f383c7cc72c947119380f9713a070c73Douglas Gregor Record.push_back(E->containsUnexpandedParameterPack()); 332f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall Record.push_back(E->getValueKind()); 333f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall Record.push_back(E->getObjectKind()); 33463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 33563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 3363397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitPredefinedExpr(PredefinedExpr *E) { 33763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 33863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getLocation(), Record); 33963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->getIdentType()); // FIXME: stable encoding 3408538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_PREDEFINED; 34163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 34263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 3433397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitDeclRefExpr(DeclRefExpr *E) { 34463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 345663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 346663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis Record.push_back(E->hasQualifier()); 3473aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth Record.push_back(E->getDecl() != E->getFoundDecl()); 348e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara Record.push_back(E->hasTemplateKWAndArgsInfo()); 3497cc58b4c927fca539d43eaa58e00dca95946eb7cAbramo Bagnara Record.push_back(E->hadMultipleCandidates()); 350f4b88a45902af1802a1cb42ba48b1c474474f228John McCall Record.push_back(E->refersToEnclosingLocal()); 351663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 352e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara if (E->hasTemplateKWAndArgsInfo()) { 353def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor unsigned NumTemplateArgs = E->getNumTemplateArgs(); 354def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor Record.push_back(NumTemplateArgs); 355def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor } 356663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 357a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor DeclarationName::NameKind nk = (E->getDecl()->getDeclName().getNameKind()); 358a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor 359e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara if ((!E->hasTemplateKWAndArgsInfo()) && (!E->hasQualifier()) && 360a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor (E->getDecl() == E->getFoundDecl()) && 361a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor nk == DeclarationName::Identifier) { 362a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor AbbrevToUse = Writer.getDeclRefExprAbbrev(); 363a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor } 364a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor 365b0ca137bf399d956a3424816c238bc2532250d17Anders Carlsson if (E->hasQualifier()) 366b0ca137bf399d956a3424816c238bc2532250d17Anders Carlsson Writer.AddNestedNameSpecifierLoc(E->getQualifierLoc(), Record); 367b0ca137bf399d956a3424816c238bc2532250d17Anders Carlsson 3683aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth if (E->getDecl() != E->getFoundDecl()) 3693aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth Writer.AddDeclRef(E->getFoundDecl(), Record); 3703aa8140bde5b9bedf13e46ec0a668daa54814196Chandler Carruth 371e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara if (E->hasTemplateKWAndArgsInfo()) 372e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara AddTemplateKWAndArgsInfo(*E->getTemplateKWAndArgsInfo()); 373b0ca137bf399d956a3424816c238bc2532250d17Anders Carlsson 37463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddDeclRef(E->getDecl(), Record); 37563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getLocation(), Record); 3764045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis Writer.AddDeclarationNameLoc(E->DNLoc, E->getDecl()->getDeclName(), Record); 3778538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_DECL_REF; 37863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 37963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 3803397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitIntegerLiteral(IntegerLiteral *E) { 38163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 38263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getLocation(), Record); 38363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddAPInt(E->getValue(), Record); 384a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor 385a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor if (E->getValue().getBitWidth() == 32) { 386a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor AbbrevToUse = Writer.getIntegerLiteralAbbrev(); 387a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor } 388a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor 3898538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_INTEGER_LITERAL; 39063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 39163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 3923397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitFloatingLiteral(FloatingLiteral *E) { 39363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 3949ec55f24b8f848bb37a9971100cf2fca379d5572Tim Northover Record.push_back(E->getRawSemantics()); 39563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->isExact()); 3969ec55f24b8f848bb37a9971100cf2fca379d5572Tim Northover Writer.AddAPFloat(E->getValue(), Record); 39763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getLocation(), Record); 3988538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_FLOATING_LITERAL; 39963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 40063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 4013397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitImaginaryLiteral(ImaginaryLiteral *E) { 40263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 403919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getSubExpr()); 4048538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_IMAGINARY_LITERAL; 40563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 40663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 4073397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitStringLiteral(StringLiteral *E) { 40863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 40963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->getByteLength()); 41063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->getNumConcatenated()); 4115cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor Record.push_back(E->getKind()); 4123e2193ce5feb2feb092e5ae615e85148e06e9fd2Anders Carlsson Record.push_back(E->isPascal()); 41363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner // FIXME: String data should be stored as a blob at the end of the 41463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner // StringLiteral. However, we can't do so now because we have no 41563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner // provision for coping with abbreviations when we're jumping around 4163397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl // the AST file during deserialization. 41764f45a24b19eb89ff88f7c3ff0df9be8e861ac97Eli Friedman Record.append(E->getBytes().begin(), E->getBytes().end()); 41863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner for (unsigned I = 0, N = E->getNumConcatenated(); I != N; ++I) 41963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getStrTokenLoc(I), Record); 4208538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_STRING_LITERAL; 42163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 42263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 4233397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCharacterLiteral(CharacterLiteral *E) { 42463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 42563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->getValue()); 426018d8e0596dd57401eeddcf11ac84ff0a065fbbeChris Lattner Writer.AddSourceLocation(E->getLocation(), Record); 4275cee1195584fa8672253139c86e922daeda69b9eDouglas Gregor Record.push_back(E->getKind()); 428a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor 429a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor AbbrevToUse = Writer.getCharacterLiteralAbbrev(); 430a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor 4318538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CHARACTER_LITERAL; 43263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 43363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 4343397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitParenExpr(ParenExpr *E) { 43563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 43663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getLParen(), Record); 43763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getRParen(), Record); 438919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getSubExpr()); 4398538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_PAREN; 44063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 44163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 4423397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitParenListExpr(ParenListExpr *E) { 44337bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis VisitExpr(E); 44437bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis Record.push_back(E->NumExprs); 44537bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis for (unsigned i=0; i != E->NumExprs; ++i) 44637bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis Writer.AddStmt(E->Exprs[i]); 44737bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis Writer.AddSourceLocation(E->LParenLoc, Record); 44837bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis Writer.AddSourceLocation(E->RParenLoc, Record); 4498538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_PAREN_LIST; 45037bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis} 45137bdfe284ad365f753741d1d89c078c148b3f4afArgyrios Kyrtzidis 4523397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitUnaryOperator(UnaryOperator *E) { 45363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 454919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getSubExpr()); 45563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->getOpcode()); // FIXME: stable encoding 45663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getOperatorLoc(), Record); 4578538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_UNARY_OPERATOR; 45863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 45963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 4603397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitOffsetOfExpr(OffsetOfExpr *E) { 4618ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor VisitExpr(E); 4628ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Record.push_back(E->getNumComponents()); 4638ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Record.push_back(E->getNumExpressions()); 4648ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Writer.AddSourceLocation(E->getOperatorLoc(), Record); 4658ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Writer.AddSourceLocation(E->getRParenLoc(), Record); 4668ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Writer.AddTypeSourceInfo(E->getTypeSourceInfo(), Record); 4678ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor for (unsigned I = 0, N = E->getNumComponents(); I != N; ++I) { 4688ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor const OffsetOfExpr::OffsetOfNode &ON = E->getComponent(I); 4698ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Record.push_back(ON.getKind()); // FIXME: Stable encoding 47006dec892b5300b43263d25c5476b506c9d6cfbadAbramo Bagnara Writer.AddSourceLocation(ON.getSourceRange().getBegin(), Record); 47106dec892b5300b43263d25c5476b506c9d6cfbadAbramo Bagnara Writer.AddSourceLocation(ON.getSourceRange().getEnd(), Record); 4728ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor switch (ON.getKind()) { 4738ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case OffsetOfExpr::OffsetOfNode::Array: 4748ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Record.push_back(ON.getArrayExprIndex()); 4758ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 4768ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 4778ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case OffsetOfExpr::OffsetOfNode::Field: 4788ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Writer.AddDeclRef(ON.getField(), Record); 4798ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 4808ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 4818ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor case OffsetOfExpr::OffsetOfNode::Identifier: 4828ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor Writer.AddIdentifierRef(ON.getFieldName(), Record); 4838ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor break; 484cc8a5d5f90bbbbcb46f342117b851b7e07ec34f1Douglas Gregor 485cc8a5d5f90bbbbcb46f342117b851b7e07ec34f1Douglas Gregor case OffsetOfExpr::OffsetOfNode::Base: 486afbf3127cbdebc7d3d8711c51b1d013afa57e849Argyrios Kyrtzidis Writer.AddCXXBaseSpecifier(*ON.getBase(), Record); 487cc8a5d5f90bbbbcb46f342117b851b7e07ec34f1Douglas Gregor break; 4888ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor } 4898ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor } 4908ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor for (unsigned I = 0, N = E->getNumExpressions(); I != N; ++I) 491919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getIndexExpr(I)); 4928538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_OFFSETOF; 4938ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor} 4948ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 495f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbournevoid ASTStmtWriter::VisitUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr *E) { 49663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 497f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbourne Record.push_back(E->getKind()); 49863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner if (E->isArgumentType()) 499a93c934af4fbf97cbe8e649d82e68ccacfe57c95John McCall Writer.AddTypeSourceInfo(E->getArgumentTypeInfo(), Record); 50063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner else { 50163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(0); 502919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getArgumentExpr()); 50363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner } 50463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getOperatorLoc(), Record); 50563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getRParenLoc(), Record); 5068538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_SIZEOF_ALIGN_OF; 50763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 50863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 5093397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitArraySubscriptExpr(ArraySubscriptExpr *E) { 51063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 511919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getLHS()); 512919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getRHS()); 51363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getRBracketLoc(), Record); 5148538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_ARRAY_SUBSCRIPT; 51563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 51663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 5173397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCallExpr(CallExpr *E) { 51863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 51963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->getNumArgs()); 52063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getRParenLoc(), Record); 521919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getCallee()); 52263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner for (CallExpr::arg_iterator Arg = E->arg_begin(), ArgEnd = E->arg_end(); 52363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Arg != ArgEnd; ++Arg) 524919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(*Arg); 5258538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CALL; 52663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 52763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 5283397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitMemberExpr(MemberExpr *E) { 529663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis // Don't call VisitExpr, we'll write everything here. 530663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 531663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis Record.push_back(E->hasQualifier()); 53240d96a69c0e1e8c10f92d450c305a7aae696ca9cDouglas Gregor if (E->hasQualifier()) 53340d96a69c0e1e8c10f92d450c305a7aae696ca9cDouglas Gregor Writer.AddNestedNameSpecifierLoc(E->getQualifierLoc(), Record); 534663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 535e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara Record.push_back(E->HasTemplateKWAndArgsInfo); 536e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara if (E->HasTemplateKWAndArgsInfo) { 537e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara Writer.AddSourceLocation(E->getTemplateKeywordLoc(), Record); 538def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor unsigned NumTemplateArgs = E->getNumTemplateArgs(); 539def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor Record.push_back(NumTemplateArgs); 540663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis Writer.AddSourceLocation(E->getLAngleLoc(), Record); 541663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis Writer.AddSourceLocation(E->getRAngleLoc(), Record); 542663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis for (unsigned i=0; i != NumTemplateArgs; ++i) 543663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis Writer.AddTemplateArgumentLoc(E->getTemplateArgs()[i], Record); 544663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis } 5457cc58b4c927fca539d43eaa58e00dca95946eb7cAbramo Bagnara 5467cc58b4c927fca539d43eaa58e00dca95946eb7cAbramo Bagnara Record.push_back(E->hadMultipleCandidates()); 5477cc58b4c927fca539d43eaa58e00dca95946eb7cAbramo Bagnara 548663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis DeclAccessPair FoundDecl = E->getFoundDecl(); 549663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis Writer.AddDeclRef(FoundDecl.getDecl(), Record); 550663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis Record.push_back(FoundDecl.getAccess()); 551663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis 552663e380d7b2de2bbf20e886e05371195bea9adc4Argyrios Kyrtzidis Writer.AddTypeRef(E->getType(), Record); 553f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall Record.push_back(E->getValueKind()); 554f89e55ab1bfb3ea997f8b02997c611a02254eb2dJohn McCall Record.push_back(E->getObjectKind()); 555919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getBase()); 55663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddDeclRef(E->getMemberDecl(), Record); 55763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getMemberLoc(), Record); 55863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->isArrow()); 5594045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis Writer.AddDeclarationNameLoc(E->MemberDNLoc, 5604045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis E->getMemberDecl()->getDeclName(), Record); 5618538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_MEMBER; 562f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff} 563f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff 5643397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitObjCIsaExpr(ObjCIsaExpr *E) { 565f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff VisitExpr(E); 566919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getBase()); 567f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff Writer.AddSourceLocation(E->getIsaMemberLoc(), Record); 568ec8deba768e7ba93ad9974763dc3902896924a3cFariborz Jahanian Writer.AddSourceLocation(E->getOpLoc(), Record); 569f242b1b0c4e998911cb96b2ba7e27ab4a5abaed3Steve Naroff Record.push_back(E->isArrow()); 5708538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_OBJC_ISA; 57163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 57263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 573f85e193739c953358c865005855253af4f68a497John McCallvoid ASTStmtWriter:: 574f85e193739c953358c865005855253af4f68a497John McCallVisitObjCIndirectCopyRestoreExpr(ObjCIndirectCopyRestoreExpr *E) { 575f85e193739c953358c865005855253af4f68a497John McCall VisitExpr(E); 576f85e193739c953358c865005855253af4f68a497John McCall Writer.AddStmt(E->getSubExpr()); 577f85e193739c953358c865005855253af4f68a497John McCall Record.push_back(E->shouldCopy()); 578f85e193739c953358c865005855253af4f68a497John McCall Code = serialization::EXPR_OBJC_INDIRECT_COPY_RESTORE; 579f85e193739c953358c865005855253af4f68a497John McCall} 580f85e193739c953358c865005855253af4f68a497John McCall 581f85e193739c953358c865005855253af4f68a497John McCallvoid ASTStmtWriter::VisitObjCBridgedCastExpr(ObjCBridgedCastExpr *E) { 582f85e193739c953358c865005855253af4f68a497John McCall VisitExplicitCastExpr(E); 583f85e193739c953358c865005855253af4f68a497John McCall Writer.AddSourceLocation(E->getLParenLoc(), Record); 584f85e193739c953358c865005855253af4f68a497John McCall Writer.AddSourceLocation(E->getBridgeKeywordLoc(), Record); 585f85e193739c953358c865005855253af4f68a497John McCall Record.push_back(E->getBridgeKind()); // FIXME: Stable encoding 586f85e193739c953358c865005855253af4f68a497John McCall Code = serialization::EXPR_OBJC_BRIDGED_CAST; 587f85e193739c953358c865005855253af4f68a497John McCall} 588f85e193739c953358c865005855253af4f68a497John McCall 5893397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCastExpr(CastExpr *E) { 59063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 591f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall Record.push_back(E->path_size()); 592919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getSubExpr()); 593cdef2b75aa60cde1ca00e0aa3f89139ac89c6ae4Anders Carlsson Record.push_back(E->getCastKind()); // FIXME: stable encoding 594f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall 595f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall for (CastExpr::path_iterator 596f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall PI = E->path_begin(), PE = E->path_end(); PI != PE; ++PI) 597f871d0cc377a1367b519a6cce26be74607566ebaJohn McCall Writer.AddCXXBaseSpecifier(**PI, Record); 59863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 59963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 6003397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitBinaryOperator(BinaryOperator *E) { 60163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 602919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getLHS()); 603919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getRHS()); 60463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->getOpcode()); // FIXME: stable encoding 60563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getOperatorLoc(), Record); 606be9af1288881110e406b87914162eaa59f1e5918Lang Hames Record.push_back(E->isFPContractable()); 6078538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_BINARY_OPERATOR; 60863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 60963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 6103397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCompoundAssignOperator(CompoundAssignOperator *E) { 61163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitBinaryOperator(E); 61263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddTypeRef(E->getComputationLHSType(), Record); 61363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddTypeRef(E->getComputationResultType(), Record); 6148538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_COMPOUND_ASSIGN_OPERATOR; 61563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 61663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 6173397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitConditionalOperator(ConditionalOperator *E) { 61863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 619919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getCond()); 620919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getLHS()); 621919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getRHS()); 62247e1f7c68bf375cac470fdb2b599ddbb395aeb52Douglas Gregor Writer.AddSourceLocation(E->getQuestionLoc(), Record); 62347e1f7c68bf375cac470fdb2b599ddbb395aeb52Douglas Gregor Writer.AddSourceLocation(E->getColonLoc(), Record); 6248538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CONDITIONAL_OPERATOR; 62563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 62663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 62756ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCallvoid 62856ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCallASTStmtWriter::VisitBinaryConditionalOperator(BinaryConditionalOperator *E) { 62956ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall VisitExpr(E); 63056ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall Writer.AddStmt(E->getOpaqueValue()); 63156ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall Writer.AddStmt(E->getCommon()); 63256ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall Writer.AddStmt(E->getCond()); 63356ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall Writer.AddStmt(E->getTrueExpr()); 63456ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall Writer.AddStmt(E->getFalseExpr()); 63556ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall Writer.AddSourceLocation(E->getQuestionLoc(), Record); 63656ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall Writer.AddSourceLocation(E->getColonLoc(), Record); 63756ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall Code = serialization::EXPR_BINARY_CONDITIONAL_OPERATOR; 63856ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall} 63956ca35d396d8692c384c785f9aeebcf22563fe1eJohn McCall 6403397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitImplicitCastExpr(ImplicitCastExpr *E) { 64163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitCastExpr(E); 6428538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_IMPLICIT_CAST; 64363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 64463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 6453397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitExplicitCastExpr(ExplicitCastExpr *E) { 64663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitCastExpr(E); 6479d125033a9853f3b572a4c9e2f9e2d4e5e346973John McCall Writer.AddTypeSourceInfo(E->getTypeInfoAsWritten(), Record); 64863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 64963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 6503397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCStyleCastExpr(CStyleCastExpr *E) { 65163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExplicitCastExpr(E); 65263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getLParenLoc(), Record); 65363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getRParenLoc(), Record); 6548538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CSTYLE_CAST; 65563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 65663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 6573397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) { 65863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 65963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getLParenLoc(), Record); 66042f56b50062cd3b3c6b23fdb9053578ae9145664John McCall Writer.AddTypeSourceInfo(E->getTypeSourceInfo(), Record); 661919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getInitializer()); 66263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->isFileScope()); 6638538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_COMPOUND_LITERAL; 66463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 66563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 6663397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitExtVectorElementExpr(ExtVectorElementExpr *E) { 66763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 668919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getBase()); 66963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddIdentifierRef(&E->getAccessor(), Record); 67063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getAccessorLoc(), Record); 6718538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_EXT_VECTOR_ELEMENT; 67263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 67363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 6743397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitInitListExpr(InitListExpr *E) { 67563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 67623700f083fb72f5c6792e253f203a43aba3cef86Abramo Bagnara // NOTE: only add the (possibly null) syntactic form. 67723700f083fb72f5c6792e253f203a43aba3cef86Abramo Bagnara // No need to serialize the isSemanticForm flag and the semantic form. 678919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getSyntacticForm()); 67963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getLBraceLoc(), Record); 68063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getRBraceLoc(), Record); 6814423ac0282acb8ba801eb05b38712438dc0c1e3eArgyrios Kyrtzidis bool isArrayFiller = E->ArrayFillerOrUnionFieldInit.is<Expr*>(); 6824423ac0282acb8ba801eb05b38712438dc0c1e3eArgyrios Kyrtzidis Record.push_back(isArrayFiller); 6834423ac0282acb8ba801eb05b38712438dc0c1e3eArgyrios Kyrtzidis if (isArrayFiller) 6844423ac0282acb8ba801eb05b38712438dc0c1e3eArgyrios Kyrtzidis Writer.AddStmt(E->getArrayFiller()); 6854423ac0282acb8ba801eb05b38712438dc0c1e3eArgyrios Kyrtzidis else 6864423ac0282acb8ba801eb05b38712438dc0c1e3eArgyrios Kyrtzidis Writer.AddDeclRef(E->getInitializedFieldInUnion(), Record); 68763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->hadArrayRangeDesignator()); 6882ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis Record.push_back(E->getNumInits()); 6892ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis if (isArrayFiller) { 6902ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis // ArrayFiller may have filled "holes" due to designated initializer. 6912ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis // Replace them by 0 to indicate that the filler goes in that place. 6922ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis Expr *filler = E->getArrayFiller(); 6932ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis for (unsigned I = 0, N = E->getNumInits(); I != N; ++I) 6942ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis Writer.AddStmt(E->getInit(I) != filler ? E->getInit(I) : 0); 6952ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis } else { 6962ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis for (unsigned I = 0, N = E->getNumInits(); I != N; ++I) 6972ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis Writer.AddStmt(E->getInit(I)); 6982ac0b7a2f10f64503b74f96a11993459805dd2f8Argyrios Kyrtzidis } 6998538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_INIT_LIST; 70063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 70163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 7023397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitDesignatedInitExpr(DesignatedInitExpr *E) { 70363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 70463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->getNumSubExprs()); 70563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner for (unsigned I = 0, N = E->getNumSubExprs(); I != N; ++I) 706919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getSubExpr(I)); 70763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getEqualOrColonLoc(), Record); 70863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->usesGNUSyntax()); 70963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner for (DesignatedInitExpr::designators_iterator D = E->designators_begin(), 71063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner DEnd = E->designators_end(); 71163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner D != DEnd; ++D) { 71263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner if (D->isFieldDesignator()) { 71363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner if (FieldDecl *Field = D->getField()) { 7148538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Record.push_back(serialization::DESIG_FIELD_DECL); 71563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddDeclRef(Field, Record); 71663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner } else { 7178538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Record.push_back(serialization::DESIG_FIELD_NAME); 71863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddIdentifierRef(D->getFieldName(), Record); 71963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner } 72063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(D->getDotLoc(), Record); 72163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(D->getFieldLoc(), Record); 72263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner } else if (D->isArrayDesignator()) { 7238538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Record.push_back(serialization::DESIG_ARRAY); 72463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(D->getFirstExprIndex()); 72563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(D->getLBracketLoc(), Record); 72663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(D->getRBracketLoc(), Record); 72763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner } else { 72863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner assert(D->isArrayRangeDesignator() && "Unknown designator"); 7298538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Record.push_back(serialization::DESIG_ARRAY_RANGE); 73063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(D->getFirstExprIndex()); 73163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(D->getLBracketLoc(), Record); 73263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(D->getEllipsisLoc(), Record); 73363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(D->getRBracketLoc(), Record); 73463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner } 73563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner } 7368538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_DESIGNATED_INIT; 73763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 73863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 7393397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitImplicitValueInitExpr(ImplicitValueInitExpr *E) { 74063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 7418538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_IMPLICIT_VALUE_INIT; 74263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 74363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 7443397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitVAArgExpr(VAArgExpr *E) { 74563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 746919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getSubExpr()); 7472cad900202561cdda18ea6cc51ddbf3e20e3c23aAbramo Bagnara Writer.AddTypeSourceInfo(E->getWrittenTypeInfo(), Record); 74863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getBuiltinLoc(), Record); 74963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getRParenLoc(), Record); 7508538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_VA_ARG; 75163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 75263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 7533397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitAddrLabelExpr(AddrLabelExpr *E) { 75463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 75563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getAmpAmpLoc(), Record); 75663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getLabelLoc(), Record); 757ad8dcf4a9df0e24051dc31bf9e6f3cd138a34298Chris Lattner Writer.AddDeclRef(E->getLabel(), Record); 7588538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_ADDR_LABEL; 75963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 76063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 7613397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitStmtExpr(StmtExpr *E) { 76263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 763919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getSubStmt()); 76463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getLParenLoc(), Record); 76563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getRParenLoc(), Record); 7668538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_STMT; 76763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 76863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 7693397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitChooseExpr(ChooseExpr *E) { 77063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 771919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getCond()); 772919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getLHS()); 773919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getRHS()); 77463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getBuiltinLoc(), Record); 77563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getRParenLoc(), Record); 776a5e660188a3c654cf0c88ed1093b28207e870b2bEli Friedman Record.push_back(E->isConditionDependent() ? false : E->isConditionTrue()); 7778538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CHOOSE; 77863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 77963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 7803397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitGNUNullExpr(GNUNullExpr *E) { 78163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 78263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getTokenLocation(), Record); 7838538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_GNU_NULL; 78463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 78563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 7863397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitShuffleVectorExpr(ShuffleVectorExpr *E) { 78763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 78863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->getNumSubExprs()); 78963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner for (unsigned I = 0, N = E->getNumSubExprs(); I != N; ++I) 790919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getExpr(I)); 79163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getBuiltinLoc(), Record); 79263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getRParenLoc(), Record); 7938538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_SHUFFLE_VECTOR; 79463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 79563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 7963397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitBlockExpr(BlockExpr *E) { 79763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 79863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddDeclRef(E->getBlockDecl(), Record); 7998538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_BLOCK; 80063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 80163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 802f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbournevoid ASTStmtWriter::VisitGenericSelectionExpr(GenericSelectionExpr *E) { 803f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne VisitExpr(E); 804f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne Record.push_back(E->getNumAssocs()); 805f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne 806f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne Writer.AddStmt(E->getControllingExpr()); 807f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne for (unsigned I = 0, N = E->getNumAssocs(); I != N; ++I) { 808f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne Writer.AddTypeSourceInfo(E->getAssocTypeSourceInfo(I), Record); 809f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne Writer.AddStmt(E->getAssocExpr(I)); 810f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne } 811f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne Record.push_back(E->isResultDependent() ? -1U : E->getResultIndex()); 812f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne 813f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne Writer.AddSourceLocation(E->getGenericLoc(), Record); 814f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne Writer.AddSourceLocation(E->getDefaultLoc(), Record); 815f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne Writer.AddSourceLocation(E->getRParenLoc(), Record); 816f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne Code = serialization::EXPR_GENERIC_SELECTION; 817f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne} 818f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne 8194b9c2d235fb9449e249d74f48ecfec601650de93John McCallvoid ASTStmtWriter::VisitPseudoObjectExpr(PseudoObjectExpr *E) { 8204b9c2d235fb9449e249d74f48ecfec601650de93John McCall VisitExpr(E); 8214b9c2d235fb9449e249d74f48ecfec601650de93John McCall Record.push_back(E->getNumSemanticExprs()); 8224b9c2d235fb9449e249d74f48ecfec601650de93John McCall 8234b9c2d235fb9449e249d74f48ecfec601650de93John McCall // Push the result index. Currently, this needs to exactly match 8244b9c2d235fb9449e249d74f48ecfec601650de93John McCall // the encoding used internally for ResultIndex. 8254b9c2d235fb9449e249d74f48ecfec601650de93John McCall unsigned result = E->getResultExprIndex(); 8264b9c2d235fb9449e249d74f48ecfec601650de93John McCall result = (result == PseudoObjectExpr::NoResult ? 0 : result + 1); 8274b9c2d235fb9449e249d74f48ecfec601650de93John McCall Record.push_back(result); 8284b9c2d235fb9449e249d74f48ecfec601650de93John McCall 8294b9c2d235fb9449e249d74f48ecfec601650de93John McCall Writer.AddStmt(E->getSyntacticForm()); 8304b9c2d235fb9449e249d74f48ecfec601650de93John McCall for (PseudoObjectExpr::semantics_iterator 8314b9c2d235fb9449e249d74f48ecfec601650de93John McCall i = E->semantics_begin(), e = E->semantics_end(); i != e; ++i) { 8324b9c2d235fb9449e249d74f48ecfec601650de93John McCall Writer.AddStmt(*i); 8334b9c2d235fb9449e249d74f48ecfec601650de93John McCall } 83464482c6ddba162c0c4df07ed4791fb08736d5a4cArgyrios Kyrtzidis Code = serialization::EXPR_PSEUDO_OBJECT; 8354b9c2d235fb9449e249d74f48ecfec601650de93John McCall} 8364b9c2d235fb9449e249d74f48ecfec601650de93John McCall 837276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedmanvoid ASTStmtWriter::VisitAtomicExpr(AtomicExpr *E) { 838276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman VisitExpr(E); 839276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman Record.push_back(E->getOp()); 840e1b2abc2ed3f2c98985b06b4ad01c977bd584020Richard Smith for (unsigned I = 0, N = E->getNumSubExprs(); I != N; ++I) 841e1b2abc2ed3f2c98985b06b4ad01c977bd584020Richard Smith Writer.AddStmt(E->getSubExprs()[I]); 842276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman Writer.AddSourceLocation(E->getBuiltinLoc(), Record); 843276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman Writer.AddSourceLocation(E->getRParenLoc(), Record); 84464482c6ddba162c0c4df07ed4791fb08736d5a4cArgyrios Kyrtzidis Code = serialization::EXPR_ATOMIC; 845276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman} 846276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman 84763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner//===----------------------------------------------------------------------===// 84863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner// Objective-C Expressions and Statements. 84963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner//===----------------------------------------------------------------------===// 85063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 8513397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitObjCStringLiteral(ObjCStringLiteral *E) { 85263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 853919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getString()); 85463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getAtLoc(), Record); 8558538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_OBJC_STRING_LITERAL; 85663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 85763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 858eb382ec1507cf2c8c12d7443d0b67c076223aec6Patrick Beardvoid ASTStmtWriter::VisitObjCBoxedExpr(ObjCBoxedExpr *E) { 859ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek VisitExpr(E); 860eb382ec1507cf2c8c12d7443d0b67c076223aec6Patrick Beard Writer.AddStmt(E->getSubExpr()); 861eb382ec1507cf2c8c12d7443d0b67c076223aec6Patrick Beard Writer.AddDeclRef(E->getBoxingMethod(), Record); 862eb382ec1507cf2c8c12d7443d0b67c076223aec6Patrick Beard Writer.AddSourceRange(E->getSourceRange(), Record); 863eb382ec1507cf2c8c12d7443d0b67c076223aec6Patrick Beard Code = serialization::EXPR_OBJC_BOXED_EXPRESSION; 864ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek} 865ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek 866ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenekvoid ASTStmtWriter::VisitObjCArrayLiteral(ObjCArrayLiteral *E) { 867ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek VisitExpr(E); 868ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Record.push_back(E->getNumElements()); 869ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek for (unsigned i = 0; i < E->getNumElements(); i++) 870ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Writer.AddStmt(E->getElement(i)); 871ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Writer.AddDeclRef(E->getArrayWithObjectsMethod(), Record); 872ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Writer.AddSourceRange(E->getSourceRange(), Record); 873ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Code = serialization::EXPR_OBJC_ARRAY_LITERAL; 874ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek} 875ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek 876ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenekvoid ASTStmtWriter::VisitObjCDictionaryLiteral(ObjCDictionaryLiteral *E) { 877ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek VisitExpr(E); 878ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Record.push_back(E->getNumElements()); 879ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Record.push_back(E->HasPackExpansions); 880ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek for (unsigned i = 0; i < E->getNumElements(); i++) { 881ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek ObjCDictionaryElement Element = E->getKeyValueElement(i); 882ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Writer.AddStmt(Element.Key); 883ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Writer.AddStmt(Element.Value); 884ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek if (E->HasPackExpansions) { 885ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Writer.AddSourceLocation(Element.EllipsisLoc, Record); 886ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek unsigned NumExpansions = 0; 887ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek if (Element.NumExpansions) 888ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek NumExpansions = *Element.NumExpansions + 1; 889ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Record.push_back(NumExpansions); 890ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek } 891ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek } 892ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek 893ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Writer.AddDeclRef(E->getDictWithObjectsMethod(), Record); 894ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Writer.AddSourceRange(E->getSourceRange(), Record); 895ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Code = serialization::EXPR_OBJC_DICTIONARY_LITERAL; 896ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek} 897ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek 8983397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitObjCEncodeExpr(ObjCEncodeExpr *E) { 89963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 90081d3466d037dc5844234c7a93dab21a6ad986e7dDouglas Gregor Writer.AddTypeSourceInfo(E->getEncodedTypeSourceInfo(), Record); 90163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getAtLoc(), Record); 90263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getRParenLoc(), Record); 9038538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_OBJC_ENCODE; 90463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 90563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 9063397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitObjCSelectorExpr(ObjCSelectorExpr *E) { 90763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 90863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSelectorRef(E->getSelector(), Record); 90963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getAtLoc(), Record); 91063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getRParenLoc(), Record); 9118538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_OBJC_SELECTOR_EXPR; 91263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 91363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 9143397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitObjCProtocolExpr(ObjCProtocolExpr *E) { 91563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 91663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddDeclRef(E->getProtocol(), Record); 91763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getAtLoc(), Record); 9187d24e289bea2accaaed79c6ca3e5cdd0c204ddc1Argyrios Kyrtzidis Writer.AddSourceLocation(E->ProtoLoc, Record); 91963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getRParenLoc(), Record); 9208538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_OBJC_PROTOCOL_EXPR; 92163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 92263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 9233397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) { 92463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 92563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddDeclRef(E->getDecl(), Record); 92663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getLocation(), Record); 9270c70181854a95fca0e0d56dfa1203eb2216052eaFariborz Jahanian Writer.AddSourceLocation(E->getOpLoc(), Record); 928919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getBase()); 92963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->isArrow()); 93063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->isFreeIvar()); 9318538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_OBJC_IVAR_REF_EXPR; 93263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 93363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 9343397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) { 93563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 936b085d898bdfe35097eba45f4072b0f6865f561dcArgyrios Kyrtzidis Record.push_back(E->SetterAndMethodRefFlags.getInt()); 93712f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall Record.push_back(E->isImplicitProperty()); 93812f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall if (E->isImplicitProperty()) { 93912f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall Writer.AddDeclRef(E->getImplicitPropertyGetter(), Record); 94012f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall Writer.AddDeclRef(E->getImplicitPropertySetter(), Record); 94112f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall } else { 94212f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall Writer.AddDeclRef(E->getExplicitProperty(), Record); 94312f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall } 94463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getLocation(), Record); 94512f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall Writer.AddSourceLocation(E->getReceiverLocation(), Record); 94612f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall if (E->isObjectReceiver()) { 94712f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall Record.push_back(0); 9488ac2d449820fd0df00fcbde5bf82165c1f49854dFariborz Jahanian Writer.AddStmt(E->getBase()); 94912f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall } else if (E->isSuperReceiver()) { 95012f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall Record.push_back(1); 95112f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall Writer.AddTypeRef(E->getSuperReceiverType(), Record); 95212f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall } else { 95312f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall Record.push_back(2); 95412f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall Writer.AddDeclRef(E->getClassReceiver(), Record); 95512f78a6741a4cb3d904340f8d3d2714568b50e7aJohn McCall } 9568ac2d449820fd0df00fcbde5bf82165c1f49854dFariborz Jahanian 9578538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_OBJC_PROPERTY_REF_EXPR; 95863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 95963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 960ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenekvoid ASTStmtWriter::VisitObjCSubscriptRefExpr(ObjCSubscriptRefExpr *E) { 961ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek VisitExpr(E); 962ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Writer.AddSourceLocation(E->getRBracket(), Record); 963ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Writer.AddStmt(E->getBaseExpr()); 964ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Writer.AddStmt(E->getKeyExpr()); 965ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Writer.AddDeclRef(E->getAtIndexMethodDecl(), Record); 966ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Writer.AddDeclRef(E->setAtIndexMethodDecl(), Record); 967ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek 968ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Code = serialization::EXPR_OBJC_SUBSCRIPT_REF_EXPR; 969ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek} 970ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek 9713397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitObjCMessageExpr(ObjCMessageExpr *E) { 97263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitExpr(E); 97363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Record.push_back(E->getNumArgs()); 974207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis Record.push_back(E->getNumStoredSelLocs()); 975207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis Record.push_back(E->SelLocsKind); 976f85e193739c953358c865005855253af4f68a497John McCall Record.push_back(E->isDelegateInitCall()); 977746f5bcbfde5b25269169c63c66492311673b67dArgyrios Kyrtzidis Record.push_back(E->IsImplicit); 97804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor Record.push_back((unsigned)E->getReceiverKind()); // FIXME: stable encoding 97904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor switch (E->getReceiverKind()) { 98004badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::Instance: 981919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getInstanceReceiver()); 98204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 98304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 98404badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::Class: 98504badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor Writer.AddTypeSourceInfo(E->getClassReceiverTypeInfo(), Record); 98604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 98704badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 98804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::SuperClass: 98904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor case ObjCMessageExpr::SuperInstance: 99004badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor Writer.AddTypeRef(E->getSuperType(), Record); 99104badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor Writer.AddSourceLocation(E->getSuperLoc(), Record); 99204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor break; 99304badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor } 99404badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 99504badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor if (E->getMethodDecl()) { 99604badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor Record.push_back(1); 99704badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor Writer.AddDeclRef(E->getMethodDecl(), Record); 99804badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor } else { 99904badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor Record.push_back(0); 100004badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor Writer.AddSelectorRef(E->getSelector(), Record); 100104badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor } 100204badcf84c8d504d8491c7c7e29b58f52cb16640Douglas Gregor 100363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getLeftLoc(), Record); 100463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(E->getRightLoc(), Record); 100563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 100663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner for (CallExpr::arg_iterator Arg = E->arg_begin(), ArgEnd = E->arg_end(); 100763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Arg != ArgEnd; ++Arg) 1008919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(*Arg); 1009207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis 1010207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis SourceLocation *Locs = E->getStoredSelLocs(); 1011207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis for (unsigned i = 0, e = E->getNumStoredSelLocs(); i != e; ++i) 1012207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis Writer.AddSourceLocation(Locs[i], Record); 1013207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis 10148538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_OBJC_MESSAGE_EXPR; 101563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 101663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 10173397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitObjCForCollectionStmt(ObjCForCollectionStmt *S) { 101863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner VisitStmt(S); 1019919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getElement()); 1020919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getCollection()); 1021919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getBody()); 102263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getForLoc(), Record); 102363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getRParenLoc(), Record); 10248538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_OBJC_FOR_COLLECTION; 102563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 102663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 10273397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitObjCAtCatchStmt(ObjCAtCatchStmt *S) { 1028919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getCatchBody()); 102963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddDeclRef(S->getCatchParamDecl(), Record); 103063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getAtCatchLoc(), Record); 103163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getRParenLoc(), Record); 10328538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_OBJC_CATCH; 103363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 103463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 10353397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *S) { 1036919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getFinallyBody()); 103763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getAtFinallyLoc(), Record); 10388538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_OBJC_FINALLY; 103963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 104063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 1041f85e193739c953358c865005855253af4f68a497John McCallvoid ASTStmtWriter::VisitObjCAutoreleasePoolStmt(ObjCAutoreleasePoolStmt *S) { 1042f85e193739c953358c865005855253af4f68a497John McCall Writer.AddStmt(S->getSubStmt()); 1043f85e193739c953358c865005855253af4f68a497John McCall Writer.AddSourceLocation(S->getAtLoc(), Record); 1044f85e193739c953358c865005855253af4f68a497John McCall Code = serialization::STMT_OBJC_AUTORELEASE_POOL; 1045f85e193739c953358c865005855253af4f68a497John McCall} 1046f85e193739c953358c865005855253af4f68a497John McCall 10473397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitObjCAtTryStmt(ObjCAtTryStmt *S) { 10488f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor Record.push_back(S->getNumCatchStmts()); 10498f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor Record.push_back(S->getFinallyStmt() != 0); 1050919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getTryBody()); 10518f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor for (unsigned I = 0, N = S->getNumCatchStmts(); I != N; ++I) 1052919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getCatchStmt(I)); 10538f5e3dd32e443768d9dbbad7191e123e6733750cDouglas Gregor if (S->getFinallyStmt()) 1054919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getFinallyStmt()); 105563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getAtTryLoc(), Record); 10568538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_OBJC_AT_TRY; 105763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 105863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 10593397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *S) { 1060919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getSynchExpr()); 1061919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getSynchBody()); 106263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getAtSynchronizedLoc(), Record); 10638538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_OBJC_AT_SYNCHRONIZED; 106463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 106563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 10663397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitObjCAtThrowStmt(ObjCAtThrowStmt *S) { 1067919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(S->getThrowExpr()); 106863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.AddSourceLocation(S->getThrowLoc(), Record); 10698538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_OBJC_AT_THROW; 107063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 107163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 1072ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenekvoid ASTStmtWriter::VisitObjCBoolLiteralExpr(ObjCBoolLiteralExpr *E) { 1073ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek VisitExpr(E); 1074ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Record.push_back(E->getValue()); 1075ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Writer.AddSourceLocation(E->getLocation(), Record); 1076ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek Code = serialization::EXPR_OBJC_BOOL_LITERAL; 1077ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek} 1078ebcb57a8d298862c65043e88b2429591ab3c58d3Ted Kremenek 107963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner//===----------------------------------------------------------------------===// 1080ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis// C++ Expressions and Statements. 1081ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 1082ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis 10833397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXCatchStmt(CXXCatchStmt *S) { 10847cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis VisitStmt(S); 10857cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis Writer.AddSourceLocation(S->getCatchLoc(), Record); 10867cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis Writer.AddDeclRef(S->getExceptionDecl(), Record); 10877cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis Writer.AddStmt(S->getHandlerBlock()); 10888538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_CXX_CATCH; 10897cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis} 10907cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 10913397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXTryStmt(CXXTryStmt *S) { 10927cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis VisitStmt(S); 10937cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis Record.push_back(S->getNumHandlers()); 10947cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis Writer.AddSourceLocation(S->getTryLoc(), Record); 10957cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis Writer.AddStmt(S->getTryBlock()); 10967cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis for (unsigned i = 0, e = S->getNumHandlers(); i != e; ++i) 10977cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis Writer.AddStmt(S->getHandler(i)); 10988538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::STMT_CXX_TRY; 10997cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis} 11007cb45e37b6f924d9ddbc53ac023bbaadb4ca3534Argyrios Kyrtzidis 1101ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smithvoid ASTStmtWriter::VisitCXXForRangeStmt(CXXForRangeStmt *S) { 1102ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith VisitStmt(S); 1103ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith Writer.AddSourceLocation(S->getForLoc(), Record); 1104ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith Writer.AddSourceLocation(S->getColonLoc(), Record); 1105ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith Writer.AddSourceLocation(S->getRParenLoc(), Record); 1106ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith Writer.AddStmt(S->getRangeStmt()); 1107ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith Writer.AddStmt(S->getBeginEndStmt()); 1108ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith Writer.AddStmt(S->getCond()); 1109ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith Writer.AddStmt(S->getInc()); 1110ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith Writer.AddStmt(S->getLoopVarStmt()); 1111ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith Writer.AddStmt(S->getBody()); 1112ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith Code = serialization::STMT_CXX_FOR_RANGE; 1113ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith} 1114ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith 1115ba0513de93d2fab6db5ab30b6927209fcc883078Douglas Gregorvoid ASTStmtWriter::VisitMSDependentExistsStmt(MSDependentExistsStmt *S) { 1116ba0513de93d2fab6db5ab30b6927209fcc883078Douglas Gregor VisitStmt(S); 1117ba0513de93d2fab6db5ab30b6927209fcc883078Douglas Gregor Writer.AddSourceLocation(S->getKeywordLoc(), Record); 1118ba0513de93d2fab6db5ab30b6927209fcc883078Douglas Gregor Record.push_back(S->isIfExists()); 1119ba0513de93d2fab6db5ab30b6927209fcc883078Douglas Gregor Writer.AddNestedNameSpecifierLoc(S->getQualifierLoc(), Record); 1120ba0513de93d2fab6db5ab30b6927209fcc883078Douglas Gregor Writer.AddDeclarationNameInfo(S->getNameInfo(), Record); 1121ba0513de93d2fab6db5ab30b6927209fcc883078Douglas Gregor Writer.AddStmt(S->getSubStmt()); 1122ba0513de93d2fab6db5ab30b6927209fcc883078Douglas Gregor Code = serialization::STMT_MS_DEPENDENT_EXISTS; 1123ba0513de93d2fab6db5ab30b6927209fcc883078Douglas Gregor} 1124ba0513de93d2fab6db5ab30b6927209fcc883078Douglas Gregor 11253397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) { 1126ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis VisitCallExpr(E); 1127ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis Record.push_back(E->getOperator()); 11284548ca2912e5f2b78a20e50c58d8a1a9c5e9e67cArgyrios Kyrtzidis Writer.AddSourceRange(E->Range, Record); 1129be9af1288881110e406b87914162eaa59f1e5918Lang Hames Record.push_back(E->isFPContractable()); 11308538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_OPERATOR_CALL; 1131ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis} 1132ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis 11333397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXMemberCallExpr(CXXMemberCallExpr *E) { 11341817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner VisitCallExpr(E); 11358538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_MEMBER_CALL; 11361817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner} 11371817bd483b538fd3f4530649f5cb900bad9e8a76Chris Lattner 11383397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXConstructExpr(CXXConstructExpr *E) { 113939da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor VisitExpr(E); 11405e1b7c2f419544a88537f7ff4e32ed744ba7b44eArgyrios Kyrtzidis Record.push_back(E->getNumArgs()); 11415e1b7c2f419544a88537f7ff4e32ed744ba7b44eArgyrios Kyrtzidis for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 1142919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getArg(I)); 114339da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor Writer.AddDeclRef(E->getConstructor(), Record); 114499a2e600f9e2e51d3ce10fb6f27191677ac65b2aDouglas Gregor Writer.AddSourceLocation(E->getLocation(), Record); 114539da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor Record.push_back(E->isElidable()); 11467cc58b4c927fca539d43eaa58e00dca95946eb7cAbramo Bagnara Record.push_back(E->hadMultipleCandidates()); 1147c83c2300e1946fea78ecd3c2e93d9c2dd2638a2bRichard Smith Record.push_back(E->isListInitialization()); 114816006c901315fa12a108b4e571f187f4b676e426Douglas Gregor Record.push_back(E->requiresZeroInitialization()); 11493c9034cb7ff1d6c1e4ecd1b44c98f553df013c7cDouglas Gregor Record.push_back(E->getConstructionKind()); // FIXME: stable encoding 1150428edafa9eb80e01dd40aab31d4166a787a741e1Chandler Carruth Writer.AddSourceRange(E->getParenRange(), Record); 11518538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_CONSTRUCT; 115239da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor} 115339da0b8145eaec7da7004f9b3645c5c9f4f63b1dDouglas Gregor 11543397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E) { 11556d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis VisitCXXConstructExpr(E); 1156ab6677ec401cfd2c82b34e4cdfebd55a9dc25778Douglas Gregor Writer.AddTypeSourceInfo(E->getTypeSourceInfo(), Record); 11578538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_TEMPORARY_OBJECT; 11586d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis} 11596d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 116001d08018b7cf5ce1601707cfd7a84d22015fc04eDouglas Gregorvoid ASTStmtWriter::VisitLambdaExpr(LambdaExpr *E) { 116101d08018b7cf5ce1601707cfd7a84d22015fc04eDouglas Gregor VisitExpr(E); 11629d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor Record.push_back(E->NumCaptures); 11639d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor unsigned NumArrayIndexVars = 0; 11649d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor if (E->HasArrayIndexVars) 11659d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor NumArrayIndexVars = E->getArrayIndexStarts()[E->NumCaptures]; 11669d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor Record.push_back(NumArrayIndexVars); 11679d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor Writer.AddSourceRange(E->IntroducerRange, Record); 11689d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor Record.push_back(E->CaptureDefault); // FIXME: stable encoding 11699d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor Record.push_back(E->ExplicitParams); 11709d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor Record.push_back(E->ExplicitResultType); 11719d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor Writer.AddSourceLocation(E->ClosingBrace, Record); 11729d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor 11739d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor // Add capture initializers. 11749d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor for (LambdaExpr::capture_init_iterator C = E->capture_init_begin(), 11759d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor CEnd = E->capture_init_end(); 11769d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor C != CEnd; ++C) { 11779d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor Writer.AddStmt(*C); 11789d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor } 11799d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor 11809d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor // Add array index variables, if any. 11819d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor if (NumArrayIndexVars) { 11829d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor Record.append(E->getArrayIndexStarts(), 11839d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor E->getArrayIndexStarts() + E->NumCaptures + 1); 11849d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor VarDecl **ArrayIndexVars = E->getArrayIndexVars(); 11859d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor for (unsigned I = 0; I != NumArrayIndexVars; ++I) 11869d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor Writer.AddDeclRef(ArrayIndexVars[I], Record); 11879d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor } 11889d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor 11899d36f5dc4121f0f931211ea2d0a74d299eb82b23Douglas Gregor Code = serialization::EXPR_LAMBDA; 119001d08018b7cf5ce1601707cfd7a84d22015fc04eDouglas Gregor} 119101d08018b7cf5ce1601707cfd7a84d22015fc04eDouglas Gregor 11927c3e615f01e8f9f587315800fdaf2305ed824568Richard Smithvoid ASTStmtWriter::VisitCXXStdInitializerListExpr(CXXStdInitializerListExpr *E) { 11937c3e615f01e8f9f587315800fdaf2305ed824568Richard Smith VisitExpr(E); 11947c3e615f01e8f9f587315800fdaf2305ed824568Richard Smith Writer.AddStmt(E->getSubExpr()); 11957c3e615f01e8f9f587315800fdaf2305ed824568Richard Smith Code = serialization::EXPR_CXX_STD_INITIALIZER_LIST; 11967c3e615f01e8f9f587315800fdaf2305ed824568Richard Smith} 11977c3e615f01e8f9f587315800fdaf2305ed824568Richard Smith 11983397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXNamedCastExpr(CXXNamedCastExpr *E) { 1199ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig VisitExplicitCastExpr(E); 12001d5d0b9df6d2a3df338bc3e63000536406e7666cDouglas Gregor Writer.AddSourceRange(SourceRange(E->getOperatorLoc(), E->getRParenLoc()), 12011d5d0b9df6d2a3df338bc3e63000536406e7666cDouglas Gregor Record); 1202f799ae1afb897151a84a7170951e367d8307ae04Fariborz Jahanian Writer.AddSourceRange(E->getAngleBrackets(), Record); 1203ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1204ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 12053397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXStaticCastExpr(CXXStaticCastExpr *E) { 1206ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig VisitCXXNamedCastExpr(E); 12078538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_STATIC_CAST; 1208ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1209ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 12103397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXDynamicCastExpr(CXXDynamicCastExpr *E) { 1211ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig VisitCXXNamedCastExpr(E); 12128538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_DYNAMIC_CAST; 1213ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1214ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 12153397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXReinterpretCastExpr(CXXReinterpretCastExpr *E) { 1216ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig VisitCXXNamedCastExpr(E); 12178538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_REINTERPRET_CAST; 1218ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1219ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 12203397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXConstCastExpr(CXXConstCastExpr *E) { 1221ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig VisitCXXNamedCastExpr(E); 12228538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_CONST_CAST; 1223ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1224ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 12253397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *E) { 1226ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig VisitExplicitCastExpr(E); 1227ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig Writer.AddSourceLocation(E->getTypeBeginLoc(), Record); 1228ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig Writer.AddSourceLocation(E->getRParenLoc(), Record); 12298538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_FUNCTIONAL_CAST; 1230ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig} 1231ce757a7a1ee905f87551996a69da3e95e8afeeb7Sam Weinig 12329fcce65e7e1307b5b8da9be13e4092d6bb94dc1dRichard Smithvoid ASTStmtWriter::VisitUserDefinedLiteral(UserDefinedLiteral *E) { 12339fcce65e7e1307b5b8da9be13e4092d6bb94dc1dRichard Smith VisitCallExpr(E); 12349fcce65e7e1307b5b8da9be13e4092d6bb94dc1dRichard Smith Writer.AddSourceLocation(E->UDSuffixLoc, Record); 12359fcce65e7e1307b5b8da9be13e4092d6bb94dc1dRichard Smith Code = serialization::EXPR_USER_DEFINED_LITERAL; 12369fcce65e7e1307b5b8da9be13e4092d6bb94dc1dRichard Smith} 12379fcce65e7e1307b5b8da9be13e4092d6bb94dc1dRichard Smith 12383397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E) { 1239eb7f96141f754150a92433286fa385910a22f494Sam Weinig VisitExpr(E); 1240eb7f96141f754150a92433286fa385910a22f494Sam Weinig Record.push_back(E->getValue()); 1241eb7f96141f754150a92433286fa385910a22f494Sam Weinig Writer.AddSourceLocation(E->getLocation(), Record); 12428538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_BOOL_LITERAL; 1243eb7f96141f754150a92433286fa385910a22f494Sam Weinig} 1244eb7f96141f754150a92433286fa385910a22f494Sam Weinig 12453397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E) { 1246eb7f96141f754150a92433286fa385910a22f494Sam Weinig VisitExpr(E); 1247eb7f96141f754150a92433286fa385910a22f494Sam Weinig Writer.AddSourceLocation(E->getLocation(), Record); 12488538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_NULL_PTR_LITERAL; 1249eb7f96141f754150a92433286fa385910a22f494Sam Weinig} 1250eb7f96141f754150a92433286fa385910a22f494Sam Weinig 12513397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXTypeidExpr(CXXTypeidExpr *E) { 125214ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner VisitExpr(E); 125314ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner Writer.AddSourceRange(E->getSourceRange(), Record); 125414ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner if (E->isTypeOperand()) { 125514ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner Writer.AddTypeSourceInfo(E->getTypeOperandSourceInfo(), Record); 12568538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_TYPEID_TYPE; 125714ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner } else { 1258919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getExprOperand()); 12598538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_TYPEID_EXPR; 126014ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner } 126114ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner} 126214ab24f01e36d495fce183aa67b41e45cdd54f39Chris Lattner 12633397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXThisExpr(CXXThisExpr *E) { 12642fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner VisitExpr(E); 12652fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner Writer.AddSourceLocation(E->getLocation(), Record); 12662fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner Record.push_back(E->isImplicit()); 12678538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_THIS; 12682fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner} 12692fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner 12703397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXThrowExpr(CXXThrowExpr *E) { 1271030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner VisitExpr(E); 12722fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner Writer.AddSourceLocation(E->getThrowLoc(), Record); 1273919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getSubExpr()); 1274bca01b46850f867b2f4137f25c882022b58f8471Douglas Gregor Record.push_back(E->isThrownVariableInScope()); 12758538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_THROW; 12762fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner} 12772fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner 12783397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) { 1279030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner VisitExpr(E); 12808a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis 12818a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis bool HasOtherExprStored = E->Param.getInt(); 12828a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis // Store these first, the reader reads them before creation. 12838a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis Record.push_back(HasOtherExprStored); 12848a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis if (HasOtherExprStored) 1285919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getExpr()); 12868a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis Writer.AddDeclRef(E->getParam(), Record); 12878a50733034edd6a349b34e2b9f0c8d0a874846d3Argyrios Kyrtzidis Writer.AddSourceLocation(E->getUsedLocation(), Record); 1288030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner 12898538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_DEFAULT_ARG; 1290030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner} 1291030854b95f7bfd86aaa8afd9ae1aff9768a37e9aChris Lattner 1292c3bf52ced9652f555aa0767bb822ec4c64546212Richard Smithvoid ASTStmtWriter::VisitCXXDefaultInitExpr(CXXDefaultInitExpr *E) { 1293c3bf52ced9652f555aa0767bb822ec4c64546212Richard Smith VisitExpr(E); 1294c3bf52ced9652f555aa0767bb822ec4c64546212Richard Smith Writer.AddDeclRef(E->getField(), Record); 1295c3bf52ced9652f555aa0767bb822ec4c64546212Richard Smith Writer.AddSourceLocation(E->getExprLoc(), Record); 1296c3bf52ced9652f555aa0767bb822ec4c64546212Richard Smith Code = serialization::EXPR_CXX_DEFAULT_INIT; 1297c3bf52ced9652f555aa0767bb822ec4c64546212Richard Smith} 1298c3bf52ced9652f555aa0767bb822ec4c64546212Richard Smith 12993397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E) { 1300d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner VisitExpr(E); 1301d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner Writer.AddCXXTemporary(E->getTemporary(), Record); 1302919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getSubExpr()); 13038538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_BIND_TEMPORARY; 1304d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner} 1305d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 13063397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E) { 13075921863d8f24084797863b5df37842113bac4352Chris Lattner VisitExpr(E); 1308ab6677ec401cfd2c82b34e4cdfebd55a9dc25778Douglas Gregor Writer.AddTypeSourceInfo(E->getTypeSourceInfo(), Record); 13095921863d8f24084797863b5df37842113bac4352Chris Lattner Writer.AddSourceLocation(E->getRParenLoc(), Record); 13108538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_SCALAR_VALUE_INIT; 13115921863d8f24084797863b5df37842113bac4352Chris Lattner} 13125921863d8f24084797863b5df37842113bac4352Chris Lattner 13133397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXNewExpr(CXXNewExpr *E) { 13145921863d8f24084797863b5df37842113bac4352Chris Lattner VisitExpr(E); 13155921863d8f24084797863b5df37842113bac4352Chris Lattner Record.push_back(E->isGlobalNew()); 13161548d14f4092a817f7d90ad3e7a65266dc85fbc5Sebastian Redl Record.push_back(E->isArray()); 13172aed8b88613863f3c439cdfb205bdf8b608fb205Sebastian Redl Record.push_back(E->doesUsualArrayDeleteWantSize()); 13185921863d8f24084797863b5df37842113bac4352Chris Lattner Record.push_back(E->getNumPlacementArgs()); 13192aed8b88613863f3c439cdfb205bdf8b608fb205Sebastian Redl Record.push_back(E->StoredInitializationStyle); 13205921863d8f24084797863b5df37842113bac4352Chris Lattner Writer.AddDeclRef(E->getOperatorNew(), Record); 13215921863d8f24084797863b5df37842113bac4352Chris Lattner Writer.AddDeclRef(E->getOperatorDelete(), Record); 13221bb2a93ab7b1499dda6f6b58865bd0dce1864228Douglas Gregor Writer.AddTypeSourceInfo(E->getAllocatedTypeSourceInfo(), Record); 13234bd40318cbea15310a37343db46de96c4fcc15e6Douglas Gregor Writer.AddSourceRange(E->getTypeIdParens(), Record); 1324530564196fe7e2e30fbc2b0edae45975447583e0David Blaikie Writer.AddSourceRange(E->getSourceRange(), Record); 13252aed8b88613863f3c439cdfb205bdf8b608fb205Sebastian Redl Writer.AddSourceRange(E->getDirectInitRange(), Record); 13265921863d8f24084797863b5df37842113bac4352Chris Lattner for (CXXNewExpr::arg_iterator I = E->raw_arg_begin(), e = E->raw_arg_end(); 13275921863d8f24084797863b5df37842113bac4352Chris Lattner I != e; ++I) 1328919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(*I); 13292aed8b88613863f3c439cdfb205bdf8b608fb205Sebastian Redl 13308538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_NEW; 13315921863d8f24084797863b5df37842113bac4352Chris Lattner} 13325921863d8f24084797863b5df37842113bac4352Chris Lattner 13333397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXDeleteExpr(CXXDeleteExpr *E) { 133495fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis VisitExpr(E); 133595fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis Record.push_back(E->isGlobalDelete()); 133695fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis Record.push_back(E->isArrayForm()); 13374076dacf1497fb95cb298b9d964fbdbdaf9bde6cArgyrios Kyrtzidis Record.push_back(E->isArrayFormAsWritten()); 13386ec278d1a354517e20f13a877481453ee7940c78John McCall Record.push_back(E->doesUsualArrayDeleteWantSize()); 133995fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis Writer.AddDeclRef(E->getOperatorDelete(), Record); 1340919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getArgument()); 134195fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis Writer.AddSourceLocation(E->getSourceRange().getBegin(), Record); 134295fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis 13438538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_DELETE; 134495fc98ce95d4faa4f1bb2783384150530404ea6fArgyrios Kyrtzidis} 13455921863d8f24084797863b5df37842113bac4352Chris Lattner 13463397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E) { 1347de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis VisitExpr(E); 1348de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 1349de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis Writer.AddStmt(E->getBase()); 1350de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis Record.push_back(E->isArrow()); 1351de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis Writer.AddSourceLocation(E->getOperatorLoc(), Record); 1352f3db29fff6a583ecda823cf909ab7737d8d30129Douglas Gregor Writer.AddNestedNameSpecifierLoc(E->getQualifierLoc(), Record); 1353de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis Writer.AddTypeSourceInfo(E->getScopeTypeInfo(), Record); 1354de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis Writer.AddSourceLocation(E->getColonColonLoc(), Record); 1355de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis Writer.AddSourceLocation(E->getTildeLoc(), Record); 1356de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 1357de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis // PseudoDestructorTypeStorage. 1358de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis Writer.AddIdentifierRef(E->getDestroyedTypeIdentifier(), Record); 1359de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis if (E->getDestroyedTypeIdentifier()) 1360de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis Writer.AddSourceLocation(E->getDestroyedTypeLoc(), Record); 1361de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis else 1362de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis Writer.AddTypeSourceInfo(E->getDestroyedTypeInfo(), Record); 1363de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 13648538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_PSEUDO_DESTRUCTOR; 1365de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis} 1366de4bd18bb45a1db68996cfb949db3015fc25d10dArgyrios Kyrtzidis 13674765fa05b5652fcc4356371c2f481d0ea9a1b007John McCallvoid ASTStmtWriter::VisitExprWithCleanups(ExprWithCleanups *E) { 1368d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner VisitExpr(E); 136980ee6e878a169e6255d4686a91bb696151ff229fJohn McCall Record.push_back(E->getNumObjects()); 137080ee6e878a169e6255d4686a91bb696151ff229fJohn McCall for (unsigned i = 0, e = E->getNumObjects(); i != e; ++i) 137180ee6e878a169e6255d4686a91bb696151ff229fJohn McCall Writer.AddDeclRef(E->getObject(i), Record); 1372d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 1373919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getSubExpr()); 13744765fa05b5652fcc4356371c2f481d0ea9a1b007John McCall Code = serialization::EXPR_EXPR_WITH_CLEANUPS; 1375d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner} 1376d2598368876cfe40bc8465540033bc5b5e58d8afChris Lattner 13778dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidisvoid 13783397c5570369f19b2d6c52e898f708d75ceede1fSebastian RedlASTStmtWriter::VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E){ 13798dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis VisitExpr(E); 1380e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara 1381e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara // Don't emit anything here, HasTemplateKWAndArgsInfo must be 1382def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor // emitted first. 13838dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 1384e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara Record.push_back(E->HasTemplateKWAndArgsInfo); 1385e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara if (E->HasTemplateKWAndArgsInfo) { 1386e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara const ASTTemplateKWAndArgsInfo &Args = *E->getTemplateKWAndArgsInfo(); 138736c76f0bea0d3595a25a5362225c642019cc3176Argyrios Kyrtzidis Record.push_back(Args.NumTemplateArgs); 1388e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara AddTemplateKWAndArgsInfo(Args); 13898dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis } 1390e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara 13918dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis if (!E->isImplicitAccess()) 1392919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(E->getBase()); 13938dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis else 1394919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(0); 13958dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis Writer.AddTypeRef(E->getBaseType(), Record); 13968dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis Record.push_back(E->isArrow()); 13978dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis Writer.AddSourceLocation(E->getOperatorLoc(), Record); 13987c3179cf463c3b3b8c21dbb955f933ba50b74f28Douglas Gregor Writer.AddNestedNameSpecifierLoc(E->getQualifierLoc(), Record); 13998dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis Writer.AddDeclRef(E->getFirstQualifierFoundInScope(), Record); 14004045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis Writer.AddDeclarationNameInfo(E->MemberNameInfo, Record); 14018538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_DEPENDENT_SCOPE_MEMBER; 14028dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis} 14038dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis 14048dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidisvoid 14053397c5570369f19b2d6c52e898f708d75ceede1fSebastian RedlASTStmtWriter::VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) { 140612dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis VisitExpr(E); 1407e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara 1408e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara // Don't emit anything here, HasTemplateKWAndArgsInfo must be 1409def0354384d9c4431f7b58b664b59896d4623028Douglas Gregor // emitted first. 1410e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara 1411e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara Record.push_back(E->HasTemplateKWAndArgsInfo); 1412e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara if (E->HasTemplateKWAndArgsInfo) { 1413e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara const ASTTemplateKWAndArgsInfo &Args = *E->getTemplateKWAndArgsInfo(); 141412dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis Record.push_back(Args.NumTemplateArgs); 1415e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara AddTemplateKWAndArgsInfo(Args); 141612dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis } 141712dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 141800cf3cc2718671aa48e8da264a523b0058a8591eDouglas Gregor Writer.AddNestedNameSpecifierLoc(E->getQualifierLoc(), Record); 14194045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis Writer.AddDeclarationNameInfo(E->NameInfo, Record); 14208538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_DEPENDENT_SCOPE_DECL_REF; 142112dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis} 142212dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis 142312dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidisvoid 14243397c5570369f19b2d6c52e898f708d75ceede1fSebastian RedlASTStmtWriter::VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E) { 14258dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis VisitExpr(E); 14268dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis Record.push_back(E->arg_size()); 14278dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis for (CXXUnresolvedConstructExpr::arg_iterator 14288dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis ArgI = E->arg_begin(), ArgE = E->arg_end(); ArgI != ArgE; ++ArgI) 1429919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(*ArgI); 1430ab6677ec401cfd2c82b34e4cdfebd55a9dc25778Douglas Gregor Writer.AddTypeSourceInfo(E->getTypeSourceInfo(), Record); 14318dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis Writer.AddSourceLocation(E->getLParenLoc(), Record); 14328dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis Writer.AddSourceLocation(E->getRParenLoc(), Record); 14338538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_UNRESOLVED_CONSTRUCT; 14348dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis} 14352fbdfcdf3bbf7b941853d38b123930755e837437Chris Lattner 14363397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitOverloadExpr(OverloadExpr *E) { 1437a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis VisitExpr(E); 1438e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara 1439e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara // Don't emit anything here, HasTemplateKWAndArgsInfo must be 1440e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara // emitted first. 1441e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara 1442e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara Record.push_back(E->HasTemplateKWAndArgsInfo); 1443e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara if (E->HasTemplateKWAndArgsInfo) { 1444e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara const ASTTemplateKWAndArgsInfo &Args = *E->getTemplateKWAndArgsInfo(); 1445a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis Record.push_back(Args.NumTemplateArgs); 1446e4b92761b43ced611c417ae478568610f1ad7b1eAbramo Bagnara AddTemplateKWAndArgsInfo(Args); 1447a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis } 1448a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 1449a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis Record.push_back(E->getNumDecls()); 1450a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis for (OverloadExpr::decls_iterator 1451a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis OvI = E->decls_begin(), OvE = E->decls_end(); OvI != OvE; ++OvI) { 1452a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis Writer.AddDeclRef(OvI.getDecl(), Record); 1453a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis Record.push_back(OvI.getAccess()); 1454a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis } 1455a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 14564045107b7384fd68eed5e3e2f06fc2a47e7be0a6Argyrios Kyrtzidis Writer.AddDeclarationNameInfo(E->NameInfo, Record); 14574c9be89bb615ec07eb3ed507c8fa9d0baa8a5ad7Douglas Gregor Writer.AddNestedNameSpecifierLoc(E->getQualifierLoc(), Record); 1458a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis} 1459a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 14603397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitUnresolvedMemberExpr(UnresolvedMemberExpr *E) { 1461a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis VisitOverloadExpr(E); 1462a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis Record.push_back(E->isArrow()); 1463a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis Record.push_back(E->hasUnresolvedUsing()); 1464919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis Writer.AddStmt(!E->isImplicitAccess() ? E->getBase() : 0); 1465a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis Writer.AddTypeRef(E->getBaseType(), Record); 1466a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis Writer.AddSourceLocation(E->getOperatorLoc(), Record); 14678538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_UNRESOLVED_MEMBER; 1468a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis} 1469a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis 14703397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E) { 1471bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis VisitOverloadExpr(E); 1472bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis Record.push_back(E->requiresADL()); 1473bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis Record.push_back(E->isOverloaded()); 1474bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis Writer.AddDeclRef(E->getNamingClass(), Record); 14758538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_UNRESOLVED_LOOKUP; 1476bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis} 1477bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis 14783397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlvoid ASTStmtWriter::VisitUnaryTypeTraitExpr(UnaryTypeTraitExpr *E) { 14796d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis VisitExpr(E); 14806d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis Record.push_back(E->getTrait()); 14810dfd848fa4c9664852ba8c929a8bd3fce93ddca2Sebastian Redl Record.push_back(E->getValue()); 14826d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis Writer.AddSourceRange(E->getSourceRange(), Record); 14833d37c0ada0e46b87be0a10e8d52d990a97d3907aDouglas Gregor Writer.AddTypeSourceInfo(E->getQueriedTypeSourceInfo(), Record); 14848538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Code = serialization::EXPR_CXX_UNARY_TYPE_TRAIT; 14856d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis} 14866d00c1365dd3601f6d93bbda9162913c57ae788fArgyrios Kyrtzidis 14876ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichetvoid ASTStmtWriter::VisitBinaryTypeTraitExpr(BinaryTypeTraitExpr *E) { 14886ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet VisitExpr(E); 14896ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet Record.push_back(E->getTrait()); 14906ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet Record.push_back(E->getValue()); 14916ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet Writer.AddSourceRange(E->getSourceRange(), Record); 14926ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet Writer.AddTypeSourceInfo(E->getLhsTypeSourceInfo(), Record); 14936ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet Writer.AddTypeSourceInfo(E->getRhsTypeSourceInfo(), Record); 1494f187237d916afa97c491ac32fe98be7d335c5b63Francois Pichet Code = serialization::EXPR_BINARY_TYPE_TRAIT; 14956ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet} 14966ad6f2848d7652ab2991286eb48be440d3493b28Francois Pichet 14974ca8ac2e61c37ddadf37024af86f3e1019af8532Douglas Gregorvoid ASTStmtWriter::VisitTypeTraitExpr(TypeTraitExpr *E) { 14984ca8ac2e61c37ddadf37024af86f3e1019af8532Douglas Gregor VisitExpr(E); 14994ca8ac2e61c37ddadf37024af86f3e1019af8532Douglas Gregor Record.push_back(E->TypeTraitExprBits.NumArgs); 15004ca8ac2e61c37ddadf37024af86f3e1019af8532Douglas Gregor Record.push_back(E->TypeTraitExprBits.Kind); // FIXME: Stable encoding 15014ca8ac2e61c37ddadf37024af86f3e1019af8532Douglas Gregor Record.push_back(E->TypeTraitExprBits.Value); 15024ca8ac2e61c37ddadf37024af86f3e1019af8532Douglas Gregor for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 15034ca8ac2e61c37ddadf37024af86f3e1019af8532Douglas Gregor Writer.AddTypeSourceInfo(E->getArg(I), Record); 15044ca8ac2e61c37ddadf37024af86f3e1019af8532Douglas Gregor Code = serialization::EXPR_TYPE_TRAIT; 15054ca8ac2e61c37ddadf37024af86f3e1019af8532Douglas Gregor} 15064ca8ac2e61c37ddadf37024af86f3e1019af8532Douglas Gregor 150721ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegleyvoid ASTStmtWriter::VisitArrayTypeTraitExpr(ArrayTypeTraitExpr *E) { 150821ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley VisitExpr(E); 150921ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley Record.push_back(E->getTrait()); 151021ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley Record.push_back(E->getValue()); 151121ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley Writer.AddSourceRange(E->getSourceRange(), Record); 151221ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley Writer.AddTypeSourceInfo(E->getQueriedTypeSourceInfo(), Record); 151321ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley Code = serialization::EXPR_ARRAY_TYPE_TRAIT; 151421ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley} 151521ff2e516b0e0bc8c1dbf965cb3d44bac3c64330John Wiegley 1516552622067dc45013d240f73952fece703f5e63bdJohn Wiegleyvoid ASTStmtWriter::VisitExpressionTraitExpr(ExpressionTraitExpr *E) { 1517552622067dc45013d240f73952fece703f5e63bdJohn Wiegley VisitExpr(E); 1518552622067dc45013d240f73952fece703f5e63bdJohn Wiegley Record.push_back(E->getTrait()); 1519552622067dc45013d240f73952fece703f5e63bdJohn Wiegley Record.push_back(E->getValue()); 1520552622067dc45013d240f73952fece703f5e63bdJohn Wiegley Writer.AddSourceRange(E->getSourceRange(), Record); 1521552622067dc45013d240f73952fece703f5e63bdJohn Wiegley Writer.AddStmt(E->getQueriedExpression()); 1522552622067dc45013d240f73952fece703f5e63bdJohn Wiegley Code = serialization::EXPR_CXX_EXPRESSION_TRAIT; 1523552622067dc45013d240f73952fece703f5e63bdJohn Wiegley} 1524552622067dc45013d240f73952fece703f5e63bdJohn Wiegley 15256b219d082434394c1ac401390ec1d1967727815aSebastian Redlvoid ASTStmtWriter::VisitCXXNoexceptExpr(CXXNoexceptExpr *E) { 15266b219d082434394c1ac401390ec1d1967727815aSebastian Redl VisitExpr(E); 15276b219d082434394c1ac401390ec1d1967727815aSebastian Redl Record.push_back(E->getValue()); 15286b219d082434394c1ac401390ec1d1967727815aSebastian Redl Writer.AddSourceRange(E->getSourceRange(), Record); 15296b219d082434394c1ac401390ec1d1967727815aSebastian Redl Writer.AddStmt(E->getOperand()); 15306b219d082434394c1ac401390ec1d1967727815aSebastian Redl Code = serialization::EXPR_CXX_NOEXCEPT; 15316b219d082434394c1ac401390ec1d1967727815aSebastian Redl} 15326b219d082434394c1ac401390ec1d1967727815aSebastian Redl 1533be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregorvoid ASTStmtWriter::VisitPackExpansionExpr(PackExpansionExpr *E) { 1534be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor VisitExpr(E); 1535be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor Writer.AddSourceLocation(E->getEllipsisLoc(), Record); 153667fd1251aad51bb80d050b7fa5e506fef0ec8e02Douglas Gregor Record.push_back(E->NumExpansions); 1537be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor Writer.AddStmt(E->getPattern()); 1538be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor Code = serialization::EXPR_PACK_EXPANSION; 1539be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor} 1540be230c36e32142cbdcdbe9c97511d097beeecbabDouglas Gregor 1541ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregorvoid ASTStmtWriter::VisitSizeOfPackExpr(SizeOfPackExpr *E) { 1542ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor VisitExpr(E); 1543ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor Writer.AddSourceLocation(E->OperatorLoc, Record); 1544ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor Writer.AddSourceLocation(E->PackLoc, Record); 1545ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor Writer.AddSourceLocation(E->RParenLoc, Record); 1546ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor Record.push_back(E->Length); 1547ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor Writer.AddDeclRef(E->Pack, Record); 1548ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor Code = serialization::EXPR_SIZEOF_PACK; 1549ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor} 1550ee8aff06f6a96214731de17b2cb6df407c6c1820Douglas Gregor 15517110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtWriter::VisitSubstNonTypeTemplateParmExpr( 15527110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall SubstNonTypeTemplateParmExpr *E) { 15537110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitExpr(E); 15547110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddDeclRef(E->getParameter(), Record); 15557110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddSourceLocation(E->getNameLoc(), Record); 15567110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddStmt(E->getReplacement()); 15577110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Code = serialization::EXPR_SUBST_NON_TYPE_TEMPLATE_PARM; 15587110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 15597110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 1560c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregorvoid ASTStmtWriter::VisitSubstNonTypeTemplateParmPackExpr( 1561c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor SubstNonTypeTemplateParmPackExpr *E) { 1562c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor VisitExpr(E); 15637110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddDeclRef(E->getParameterPack(), Record); 1564c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor Writer.AddTemplateArgument(E->getArgumentPack(), Record); 15657110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddSourceLocation(E->getParameterPackLocation(), Record); 1566c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor Code = serialization::EXPR_SUBST_NON_TYPE_TEMPLATE_PARM_PACK; 1567c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor} 1568c7793c73ba8a343de3f2552d984851985a46f159Douglas Gregor 15699a4db032ecd991626d236a502e770126db32bd31Richard Smithvoid ASTStmtWriter::VisitFunctionParmPackExpr(FunctionParmPackExpr *E) { 15709a4db032ecd991626d236a502e770126db32bd31Richard Smith VisitExpr(E); 15719a4db032ecd991626d236a502e770126db32bd31Richard Smith Record.push_back(E->getNumExpansions()); 15729a4db032ecd991626d236a502e770126db32bd31Richard Smith Writer.AddDeclRef(E->getParameterPack(), Record); 15739a4db032ecd991626d236a502e770126db32bd31Richard Smith Writer.AddSourceLocation(E->getParameterPackLocation(), Record); 15749a4db032ecd991626d236a502e770126db32bd31Richard Smith for (FunctionParmPackExpr::iterator I = E->begin(), End = E->end(); 15759a4db032ecd991626d236a502e770126db32bd31Richard Smith I != End; ++I) 15769a4db032ecd991626d236a502e770126db32bd31Richard Smith Writer.AddDeclRef(*I, Record); 15779a4db032ecd991626d236a502e770126db32bd31Richard Smith Code = serialization::EXPR_FUNCTION_PARM_PACK; 15789a4db032ecd991626d236a502e770126db32bd31Richard Smith} 15799a4db032ecd991626d236a502e770126db32bd31Richard Smith 158003e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregorvoid ASTStmtWriter::VisitMaterializeTemporaryExpr(MaterializeTemporaryExpr *E) { 158103e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor VisitExpr(E); 158203e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor Writer.AddStmt(E->Temporary); 1583211c8ddb5b500ed84833751363d0cfe1115f4dd3Richard Smith Writer.AddDeclRef(E->ExtendingDecl, Record); 158403e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor Code = serialization::EXPR_MATERIALIZE_TEMPORARY; 158503e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor} 158603e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor 15877cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCallvoid ASTStmtWriter::VisitOpaqueValueExpr(OpaqueValueExpr *E) { 15887cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall VisitExpr(E); 15898bc27822fc867d43399d4474bccbb58b7b7c7ad7Argyrios Kyrtzidis Writer.AddStmt(E->getSourceExpr()); 1590b608b987718c6d841115464f79ab2d1820a63e17Douglas Gregor Writer.AddSourceLocation(E->getLocation(), Record); 15917cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall Code = serialization::EXPR_OPAQUE_VALUE; 15927cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall} 15937cd7d1ad33fdf49eef83942e8855fe20d95aa1b9John McCall 1594ba0a9006dbc4814e1e35f82812cb5a1dad65e8b8Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 1595e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne// CUDA Expressions and Statements. 1596e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne//===----------------------------------------------------------------------===// 1597e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne 1598e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbournevoid ASTStmtWriter::VisitCUDAKernelCallExpr(CUDAKernelCallExpr *E) { 1599e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne VisitCallExpr(E); 1600e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne Writer.AddStmt(E->getConfig()); 1601e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne Code = serialization::EXPR_CUDA_KERNEL_CALL; 1602e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne} 1603e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne 1604e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne//===----------------------------------------------------------------------===// 160561eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner// OpenCL Expressions and Statements. 160661eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner//===----------------------------------------------------------------------===// 160761eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattnervoid ASTStmtWriter::VisitAsTypeExpr(AsTypeExpr *E) { 160861eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner VisitExpr(E); 16097110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddSourceLocation(E->getBuiltinLoc(), Record); 16107110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddSourceLocation(E->getRParenLoc(), Record); 161161eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner Writer.AddStmt(E->getSrcExpr()); 161261eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner Code = serialization::EXPR_ASTYPE; 161361eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner} 161461eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner 161561eee0ca33b29e102f11bab77c8b74cc00e2392bTanya Lattner//===----------------------------------------------------------------------===// 16167110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall// Microsoft Expressions and Statements. 16177110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall//===----------------------------------------------------------------------===// 161876da55d3a49e1805f51b1ced7c5da5bcd7f759d8John McCallvoid ASTStmtWriter::VisitMSPropertyRefExpr(MSPropertyRefExpr *E) { 161976da55d3a49e1805f51b1ced7c5da5bcd7f759d8John McCall VisitExpr(E); 162076da55d3a49e1805f51b1ced7c5da5bcd7f759d8John McCall Record.push_back(E->isArrow()); 162176da55d3a49e1805f51b1ced7c5da5bcd7f759d8John McCall Writer.AddStmt(E->getBaseExpr()); 162276da55d3a49e1805f51b1ced7c5da5bcd7f759d8John McCall Writer.AddNestedNameSpecifierLoc(E->getQualifierLoc(), Record); 162376da55d3a49e1805f51b1ced7c5da5bcd7f759d8John McCall Writer.AddSourceLocation(E->getMemberLoc(), Record); 162476da55d3a49e1805f51b1ced7c5da5bcd7f759d8John McCall Writer.AddDeclRef(E->getPropertyDecl(), Record); 162576da55d3a49e1805f51b1ced7c5da5bcd7f759d8John McCall Code = serialization::EXPR_CXX_PROPERTY_REF_EXPR; 162676da55d3a49e1805f51b1ced7c5da5bcd7f759d8John McCall} 162776da55d3a49e1805f51b1ced7c5da5bcd7f759d8John McCall 16287110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtWriter::VisitCXXUuidofExpr(CXXUuidofExpr *E) { 16297110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitExpr(E); 16307110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddSourceRange(E->getSourceRange(), Record); 16317110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall if (E->isTypeOperand()) { 16327110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddTypeSourceInfo(E->getTypeOperandSourceInfo(), Record); 16337110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Code = serialization::EXPR_CXX_UUIDOF_TYPE; 16347110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall } else { 16357110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddStmt(E->getExprOperand()); 16367110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Code = serialization::EXPR_CXX_UUIDOF_EXPR; 16377110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall } 16387110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 16397110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 16407110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtWriter::VisitSEHExceptStmt(SEHExceptStmt *S) { 16417110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitStmt(S); 16427110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddSourceLocation(S->getExceptLoc(), Record); 16437110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddStmt(S->getFilterExpr()); 16447110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddStmt(S->getBlock()); 16457110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Code = serialization::STMT_SEH_EXCEPT; 16467110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 16477110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 16487110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtWriter::VisitSEHFinallyStmt(SEHFinallyStmt *S) { 16497110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitStmt(S); 16507110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddSourceLocation(S->getFinallyLoc(), Record); 16517110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddStmt(S->getBlock()); 16527110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Code = serialization::STMT_SEH_FINALLY; 16537110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 16547110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 16557110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCallvoid ASTStmtWriter::VisitSEHTryStmt(SEHTryStmt *S) { 16567110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall VisitStmt(S); 16577110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Record.push_back(S->getIsCXXTry()); 16587110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddSourceLocation(S->getTryLoc(), Record); 16597110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddStmt(S->getTryBlock()); 16607110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Writer.AddStmt(S->getHandler()); 16617110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall Code = serialization::STMT_SEH_TRY; 16627110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall} 16637110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall 16647110fd6c32306b3feb97b9edb8064b1b68a54e6bJohn McCall//===----------------------------------------------------------------------===// 16654fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev// OpenMP Clauses. 16664fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev//===----------------------------------------------------------------------===// 16674fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev 16684fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevnamespace clang { 16694fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevclass OMPClauseWriter : public OMPClauseVisitor<OMPClauseWriter> { 16704fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev ASTStmtWriter *Writer; 16714fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev ASTWriter::RecordData &Record; 16724fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevpublic: 16734fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev OMPClauseWriter(ASTStmtWriter *W, ASTWriter::RecordData &Record) 16744fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev : Writer(W), Record(Record) { } 16754fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev#define OPENMP_CLAUSE(Name, Class) \ 16764fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev void Visit##Class(Class *S); 16774fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev#include "clang/Basic/OpenMPKinds.def" 16784fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev void writeClause(OMPClause *C); 16794fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev}; 16804fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev} 16814fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev 16824fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevvoid OMPClauseWriter::writeClause(OMPClause *C) { 16834fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev Record.push_back(C->getClauseKind()); 16844fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev Visit(C); 16854fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev Writer->Writer.AddSourceLocation(C->getLocStart(), Record); 16864fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev Writer->Writer.AddSourceLocation(C->getLocEnd(), Record); 16874fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev} 16884fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev 16894fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevvoid OMPClauseWriter::VisitOMPDefaultClause(OMPDefaultClause *C) { 16904fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev Record.push_back(C->getDefaultKind()); 16914fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev Writer->Writer.AddSourceLocation(C->getLParenLoc(), Record); 16924fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev Writer->Writer.AddSourceLocation(C->getDefaultKindKwLoc(), Record); 16934fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev} 16944fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev 16954fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevvoid OMPClauseWriter::VisitOMPPrivateClause(OMPPrivateClause *C) { 16964fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev Record.push_back(C->varlist_size()); 16974fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev Writer->Writer.AddSourceLocation(C->getLParenLoc(), Record); 16984fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev for (OMPVarList<OMPPrivateClause>::varlist_iterator I = C->varlist_begin(), 16994fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev E = C->varlist_end(); 17004fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev I != E; ++I) 17014fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev Writer->Writer.AddStmt(*I); 17024fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev} 17034fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev 17044fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev//===----------------------------------------------------------------------===// 17054fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev// OpenMP Directives. 17064fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev//===----------------------------------------------------------------------===// 17074fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevvoid ASTStmtWriter::VisitOMPExecutableDirective(OMPExecutableDirective *E) { 17084fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev VisitStmt(E); 17094fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev Record.push_back(E->getNumClauses()); 17104fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev Writer.AddSourceLocation(E->getLocStart(), Record); 17114fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev Writer.AddSourceLocation(E->getLocEnd(), Record); 17124fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev OMPClauseWriter ClauseWriter(this, Record); 17134fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev for (unsigned i = 0; i < E->getNumClauses(); ++i) { 17144fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev ClauseWriter.writeClause(E->getClause(i)); 17154fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev } 17164fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev Writer.AddStmt(E->getAssociatedStmt()); 17174fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev} 17184fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev 17194fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevvoid ASTStmtWriter::VisitOMPParallelDirective(OMPParallelDirective *D) { 17204fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev VisitOMPExecutableDirective(D); 17214fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev Code = serialization::STMT_OMP_PARALLEL_DIRECTIVE; 17224fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev} 17234fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev 17244fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev//===----------------------------------------------------------------------===// 1725a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl// ASTWriter Implementation 172663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner//===----------------------------------------------------------------------===// 172763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 1728a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redlunsigned ASTWriter::RecordSwitchCaseID(SwitchCase *S) { 17291eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump assert(SwitchCaseIDs.find(S) == SwitchCaseIDs.end() && 173063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner "SwitchCase recorded twice"); 173163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner unsigned NextID = SwitchCaseIDs.size(); 173263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner SwitchCaseIDs[S] = NextID; 173363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner return NextID; 173463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 173563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 1736a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redlunsigned ASTWriter::getSwitchCaseID(SwitchCase *S) { 17371eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump assert(SwitchCaseIDs.find(S) != SwitchCaseIDs.end() && 173863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner "SwitchCase hasn't been seen yet"); 173963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner return SwitchCaseIDs[S]; 174063377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 174163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 1742e09a275444576deb2c8d9e2255554242f65d7c00Argyrios Kyrtzidisvoid ASTWriter::ClearSwitchCaseIDs() { 1743e09a275444576deb2c8d9e2255554242f65d7c00Argyrios Kyrtzidis SwitchCaseIDs.clear(); 1744e09a275444576deb2c8d9e2255554242f65d7c00Argyrios Kyrtzidis} 1745e09a275444576deb2c8d9e2255554242f65d7c00Argyrios Kyrtzidis 174663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner/// \brief Write the given substatement or subexpression to the 174763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner/// bitstream. 1748e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidisvoid ASTWriter::WriteSubStmt(Stmt *S, 1749e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis llvm::DenseMap<Stmt *, uint64_t> &SubStmtEntries, 1750e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis llvm::DenseSet<Stmt *> &ParentStmts) { 175163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner RecordData Record; 17523397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl ASTStmtWriter Writer(*this, Record); 175363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner ++NumStatements; 1754919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 175563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner if (!S) { 17568538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Stream.EmitRecord(serialization::STMT_NULL_PTR, Record); 175763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner return; 175863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner } 17591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1760e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis llvm::DenseMap<Stmt *, uint64_t>::iterator I = SubStmtEntries.find(S); 1761e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis if (I != SubStmtEntries.end()) { 1762e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis Record.push_back(I->second); 1763e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis Stream.EmitRecord(serialization::STMT_REF_PTR, Record); 1764e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis return; 1765e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis } 1766e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis 1767e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis#ifndef NDEBUG 1768e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis assert(!ParentStmts.count(S) && "There is a Stmt cycle!"); 1769e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis 1770e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis struct ParentStmtInserterRAII { 1771e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis Stmt *S; 1772e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis llvm::DenseSet<Stmt *> &ParentStmts; 1773e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis 1774e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis ParentStmtInserterRAII(Stmt *S, llvm::DenseSet<Stmt *> &ParentStmts) 1775e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis : S(S), ParentStmts(ParentStmts) { 1776e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis ParentStmts.insert(S); 1777e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis } 1778e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis ~ParentStmtInserterRAII() { 1779e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis ParentStmts.erase(S); 1780e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis } 1781e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis }; 1782e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis 1783e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis ParentStmtInserterRAII ParentStmtInserter(S, ParentStmts); 1784e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis#endif 1785e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis 1786a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl // Redirect ASTWriter::AddStmt to collect sub stmts. 17875f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner SmallVector<Stmt *, 16> SubStmts; 1788919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis CollectedStmts = &SubStmts; 1789919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 17908538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Writer.Code = serialization::STMT_NULL_PTR; 1791a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor Writer.AbbrevToUse = 0; 179263377d56de98cfef089a5758e8d4c7597a30269eChris Lattner Writer.Visit(S); 17935921863d8f24084797863b5df37842113bac4352Chris Lattner 17945921863d8f24084797863b5df37842113bac4352Chris Lattner#ifndef NDEBUG 17958538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl if (Writer.Code == serialization::STMT_NULL_PTR) { 179612bf28f398b5f1684ceb8b471e6ebab360c2b4fdArgyrios Kyrtzidis SourceManager &SrcMgr 179712bf28f398b5f1684ceb8b471e6ebab360c2b4fdArgyrios Kyrtzidis = DeclIDs.begin()->first->getASTContext().getSourceManager(); 179812bf28f398b5f1684ceb8b471e6ebab360c2b4fdArgyrios Kyrtzidis S->dump(SrcMgr); 1799b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie llvm_unreachable("Unhandled sub statement writing AST file"); 18005921863d8f24084797863b5df37842113bac4352Chris Lattner } 18015921863d8f24084797863b5df37842113bac4352Chris Lattner#endif 1802919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1803a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl // Revert ASTWriter::AddStmt. 1804919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis CollectedStmts = &StmtsToEmit; 1805919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1806919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis // Write the sub stmts in reverse order, last to first. When reading them back 1807919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis // we will read them in correct order by "pop"ing them from the Stmts stack. 1808919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis // This simplifies reading and allows to store a variable number of sub stmts 1809919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis // without knowing it in advance. 1810919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis while (!SubStmts.empty()) 1811e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis WriteSubStmt(SubStmts.pop_back_val(), SubStmtEntries, ParentStmts); 1812919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 1813a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor Stream.EmitRecord(Writer.Code, Record, Writer.AbbrevToUse); 1814e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis 1815e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis SubStmtEntries[S] = Stream.GetCurrentBitNo(); 181663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 181763377d56de98cfef089a5758e8d4c7597a30269eChris Lattner 181863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner/// \brief Flush all of the statements that have been added to the 181963377d56de98cfef089a5758e8d4c7597a30269eChris Lattner/// queue via AddStmt(). 1820a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redlvoid ASTWriter::FlushStmts() { 182163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner RecordData Record; 18221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1823c52d9057241b7857c8400ab6cfee0a1c554e0982Daniel Dunbar // We expect to be the only consumer of the two temporary statement maps, 1824c52d9057241b7857c8400ab6cfee0a1c554e0982Daniel Dunbar // assert that they are empty. 1825c52d9057241b7857c8400ab6cfee0a1c554e0982Daniel Dunbar assert(SubStmtEntries.empty() && "unexpected entries in sub stmt map"); 1826c52d9057241b7857c8400ab6cfee0a1c554e0982Daniel Dunbar assert(ParentStmts.empty() && "unexpected entries in parent stmt map"); 1827e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis 182863377d56de98cfef089a5758e8d4c7597a30269eChris Lattner for (unsigned I = 0, N = StmtsToEmit.size(); I != N; ++I) { 1829e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis WriteSubStmt(StmtsToEmit[I], SubStmtEntries, ParentStmts); 1830919e693e80632d214c1f3110f6ee5d1c0b61f06bArgyrios Kyrtzidis 18311eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump assert(N == StmtsToEmit.size() && 1832fc8f0e14ad142ed811e90fbd9a30e419e301c717Chris Lattner "Substatement written via AddStmt rather than WriteSubStmt!"); 18331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 183463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner // Note that we are at the end of a full expression. Any 183563377d56de98cfef089a5758e8d4c7597a30269eChris Lattner // expression records that follow this one are part of a different 183663377d56de98cfef089a5758e8d4c7597a30269eChris Lattner // expression. 18378538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl Stream.EmitRecord(serialization::STMT_STOP, Record); 1838e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis 1839e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis SubStmtEntries.clear(); 1840e6f0868a55aba2613e2d5dba3348aaf1064e6ddbArgyrios Kyrtzidis ParentStmts.clear(); 184163377d56de98cfef089a5758e8d4c7597a30269eChris Lattner } 18421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 184363377d56de98cfef089a5758e8d4c7597a30269eChris Lattner StmtsToEmit.clear(); 184463377d56de98cfef089a5758e8d4c7597a30269eChris Lattner} 1845