15 #include "llvm/Support/Capacity.h"
17 using namespace clang;
29 CondDirectiveLocsTy::const_iterator
30 low = std::lower_bound(CondDirectiveLocs.begin(), CondDirectiveLocs.end(),
32 if (low == CondDirectiveLocs.end())
38 CondDirectiveLocsTy::const_iterator
39 upp = std::upper_bound(low, CondDirectiveLocs.end(),
42 if (upp != CondDirectiveLocs.end())
43 uppRegion = upp->getRegionLoc();
45 return low->getRegionLoc() != uppRegion;
52 if (CondDirectiveLocs.empty())
57 return CondDirectiveStack.back();
59 CondDirectiveLocsTy::const_iterator
60 low = std::lower_bound(CondDirectiveLocs.begin(), CondDirectiveLocs.end(),
62 assert(low != CondDirectiveLocs.end());
63 return low->getRegionLoc();
66 void PPConditionalDirectiveRecord::addCondDirectiveLoc(
67 CondDirectiveLoc DirLoc) {
72 assert(CondDirectiveLocs.empty() ||
75 CondDirectiveLocs.push_back(DirLoc);
80 ConditionValueKind ConditionValue) {
81 addCondDirectiveLoc(CondDirectiveLoc(Loc, CondDirectiveStack.back()));
82 CondDirectiveStack.push_back(Loc);
86 const Token &MacroNameTok,
88 addCondDirectiveLoc(CondDirectiveLoc(Loc, CondDirectiveStack.back()));
89 CondDirectiveStack.push_back(Loc);
93 const Token &MacroNameTok,
95 addCondDirectiveLoc(CondDirectiveLoc(Loc, CondDirectiveStack.back()));
96 CondDirectiveStack.push_back(Loc);
101 ConditionValueKind ConditionValue,
103 addCondDirectiveLoc(CondDirectiveLoc(Loc, CondDirectiveStack.back()));
104 CondDirectiveStack.back() = Loc;
109 addCondDirectiveLoc(CondDirectiveLoc(Loc, CondDirectiveStack.back()));
110 CondDirectiveStack.back() = Loc;
115 addCondDirectiveLoc(CondDirectiveLoc(Loc, CondDirectiveStack.back()));
116 assert(!CondDirectiveStack.empty());
117 CondDirectiveStack.pop_back();
121 return llvm::capacity_in_bytes(CondDirectiveLocs);
SourceLocation getEnd() const
PPConditionalDirectiveRecord(SourceManager &SM)
Construct a new preprocessing record.
A description of the current definition of a macro.
bool rangeIntersectsConditionalDirective(SourceRange Range) const
Returns true if the given range intersects with a conditional directive.
Token - This structure provides full information about a lexed token.
size_t getTotalMemory() const
bool isBeforeInTranslationUnit(SourceLocation LHS, SourceLocation RHS) const
Determines the order of 2 source locations in the translation unit.
bool isInSystemHeader(SourceLocation Loc) const
Returns if a SourceLocation is in a system header.
Encodes a location in the source.
SourceLocation getBegin() const
SourceLocation findConditionalDirectiveRegionLoc(SourceLocation Loc) const
A trivial tuple used to represent a source range.
This class handles loading and caching of source files into memory.