Skip to content

Commit c03d625

Browse files
committed
[pseudo] Rename DirectiveMap -> DirectiveTree. NFC
Addressing comment from previous review https://reviews.llvm.org/D121165?id=413636#inline-1160757
1 parent eac3487 commit c03d625

File tree

7 files changed

+111
-111
lines changed

7 files changed

+111
-111
lines changed

clang-tools-extra/pseudo/include/clang-pseudo/DirectiveMap.h renamed to clang-tools-extra/pseudo/include/clang-pseudo/DirectiveTree.h

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//===--- DirectiveMap.h - Find and strip preprocessor directives -*- C++-*-===//
1+
//===--- DirectiveTree.h - Find and strip preprocessor directives *- C++-*-===//
22
//
33
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
44
// See https://llvm.org/LICENSE.txt for license information.
@@ -25,8 +25,8 @@
2525
//
2626
//===----------------------------------------------------------------------===//
2727

28-
#ifndef CLANG_PSEUDO_DIRECTIVEMAP_H
29-
#define CLANG_PSEUDO_DIRECTIVEMAP_H
28+
#ifndef CLANG_PSEUDO_DIRECTIVETREE_H
29+
#define CLANG_PSEUDO_DIRECTIVETREE_H
3030

3131
#include "clang-pseudo/Token.h"
3232
#include "clang/Basic/TokenKinds.h"
@@ -55,7 +55,7 @@ namespace pseudo {
5555
///
5656
/// Unlike the clang preprocessor, we model the full tree explicitly.
5757
/// This class does not recognize macro usage, only directives.
58-
struct DirectiveMap {
58+
struct DirectiveTree {
5959
/// A range of code (and possibly comments) containing no directives.
6060
struct Code {
6161
Token::Range Tokens;
@@ -75,12 +75,12 @@ struct DirectiveMap {
7575
///
7676
/// The first branch will have an #if type directive.
7777
/// Subsequent branches will have #else type directives.
78-
std::vector<std::pair<Directive, DirectiveMap>> Branches;
78+
std::vector<std::pair<Directive, DirectiveTree>> Branches;
7979
/// The directive terminating the conditional, should be #endif.
8080
Directive End;
8181
/// The index of the conditional branch we chose as active.
8282
/// None indicates no branch was taken (e.g. #if 0 ... #endif).
83-
/// The initial map from of `parse()` has no branches marked as taken.
83+
/// The initial tree from `parse()` has no branches marked as taken.
8484
/// See `chooseConditionalBranches()`.
8585
llvm::Optional<unsigned> Taken;
8686
};
@@ -90,17 +90,17 @@ struct DirectiveMap {
9090
std::vector<Chunk> Chunks;
9191

9292
/// Extract preprocessor structure by examining the raw tokens.
93-
static DirectiveMap parse(const TokenStream &);
93+
static DirectiveTree parse(const TokenStream &);
9494

9595
// FIXME: allow deriving a preprocessed stream
9696
};
97-
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const DirectiveMap &);
98-
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const DirectiveMap::Chunk &);
99-
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const DirectiveMap::Code &);
97+
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const DirectiveTree &);
98+
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const DirectiveTree::Chunk &);
99+
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const DirectiveTree::Code &);
100100
llvm::raw_ostream &operator<<(llvm::raw_ostream &,
101-
const DirectiveMap::Directive &);
101+
const DirectiveTree::Directive &);
102102
llvm::raw_ostream &operator<<(llvm::raw_ostream &,
103-
const DirectiveMap::Conditional &);
103+
const DirectiveTree::Conditional &);
104104

105105
/// Selects a "taken" branch for each conditional directive in the file.
106106
///
@@ -118,11 +118,11 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &,
118118
/// #endif
119119
///
120120
/// The choices are stored in Conditional::Taken nodes.
121-
void chooseConditionalBranches(DirectiveMap &, const TokenStream &Code);
121+
void chooseConditionalBranches(DirectiveTree &, const TokenStream &Code);
122122

123123
// FIXME: This approximates std::variant<Code, Directive, Conditional>.
124124
// Switch once we can use C++17.
125-
class DirectiveMap::Chunk {
125+
class DirectiveTree::Chunk {
126126
public:
127127
enum Kind { K_Empty, K_Code, K_Directive, K_Conditional };
128128
Kind kind() const {
@@ -165,4 +165,4 @@ class DirectiveMap::Chunk {
165165
} // namespace pseudo
166166
} // namespace clang
167167

168-
#endif // CLANG_PSEUDO_DIRECTIVEMAP_H
168+
#endif // CLANG_PSEUDO_DIRECTIVETREE_H

clang-tools-extra/pseudo/lib/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
set(LLVM_LINK_COMPONENTS Support)
22

33
add_clang_library(clangPseudo
4-
DirectiveMap.cpp
4+
DirectiveTree.cpp
55
Forest.cpp
66
Grammar.cpp
77
GrammarBNF.cpp

clang-tools-extra/pseudo/lib/DirectiveMap.cpp renamed to clang-tools-extra/pseudo/lib/DirectiveTree.cpp

Lines changed: 51 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
//===--- DirectiveMap.cpp - Find and strip preprocessor directives --------===//
1+
//===--- DirectiveTree.cpp - Find and strip preprocessor directives -------===//
22
//
33
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
44
// See https://llvm.org/LICENSE.txt for license information.
55
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#include "clang-pseudo/DirectiveMap.h"
9+
#include "clang-pseudo/DirectiveTree.h"
1010
#include "clang/Basic/IdentifierTable.h"
1111
#include "clang/Basic/TokenKinds.h"
1212
#include "llvm/Support/FormatVariadic.h"
@@ -19,7 +19,7 @@ class DirectiveParser {
1919
public:
2020
explicit DirectiveParser(const TokenStream &Code)
2121
: Code(Code), Tok(&Code.front()) {}
22-
void parse(DirectiveMap *Result) { parse(Result, /*TopLevel=*/true); }
22+
void parse(DirectiveTree *Result) { parse(Result, /*TopLevel=*/true); }
2323

2424
private:
2525
// Roles that a directive might take within a conditional block.
@@ -42,10 +42,10 @@ class DirectiveParser {
4242
}
4343
}
4444

45-
// Parses tokens starting at Tok into Map.
46-
// If we reach an End or Else directive that ends Map, returns it.
45+
// Parses tokens starting at Tok into Tree.
46+
// If we reach an End or Else directive that ends Tree, returns it.
4747
// If TopLevel is true, then we do not expect End and always return None.
48-
llvm::Optional<DirectiveMap::Directive> parse(DirectiveMap *Map,
48+
llvm::Optional<DirectiveTree::Directive> parse(DirectiveTree *Tree,
4949
bool TopLevel) {
5050
auto StartsDirective =
5151
[&, AllowDirectiveAt((const Token *)nullptr)]() mutable {
@@ -66,37 +66,37 @@ class DirectiveParser {
6666
do
6767
++Tok;
6868
while (Tok->Kind != tok::eof && !StartsDirective());
69-
Map->Chunks.push_back(DirectiveMap::Code{
69+
Tree->Chunks.push_back(DirectiveTree::Code{
7070
Token::Range{Code.index(*Start), Code.index(*Tok)}});
7171
continue;
7272
}
7373

7474
// We have some kind of directive.
75-
DirectiveMap::Directive Directive;
75+
DirectiveTree::Directive Directive;
7676
parseDirective(&Directive);
7777
Cond Kind = classifyDirective(Directive.Kind);
7878
if (Kind == Cond::If) {
7979
// #if or similar, starting a nested conditional block.
80-
DirectiveMap::Conditional Conditional;
80+
DirectiveTree::Conditional Conditional;
8181
Conditional.Branches.emplace_back();
8282
Conditional.Branches.back().first = std::move(Directive);
8383
parseConditional(&Conditional);
84-
Map->Chunks.push_back(std::move(Conditional));
84+
Tree->Chunks.push_back(std::move(Conditional));
8585
} else if ((Kind == Cond::Else || Kind == Cond::End) && !TopLevel) {
8686
// #endif or similar, ending this PStructure scope.
8787
// (#endif is unexpected at the top level, treat as simple directive).
8888
return std::move(Directive);
8989
} else {
9090
// #define or similar, a simple directive at the current scope.
91-
Map->Chunks.push_back(std::move(Directive));
91+
Tree->Chunks.push_back(std::move(Directive));
9292
}
9393
}
9494
return None;
9595
}
9696

9797
// Parse the rest of a conditional section, after seeing the If directive.
9898
// Returns after consuming the End directive.
99-
void parseConditional(DirectiveMap::Conditional *C) {
99+
void parseConditional(DirectiveTree::Conditional *C) {
100100
assert(C->Branches.size() == 1 &&
101101
C->Branches.front().second.Chunks.empty() &&
102102
"Should be ready to parse first branch body");
@@ -119,7 +119,7 @@ class DirectiveParser {
119119
}
120120

121121
// Parse a directive. Tok is the hash.
122-
void parseDirective(DirectiveMap::Directive *D) {
122+
void parseDirective(DirectiveTree::Directive *D) {
123123
assert(Tok->Kind == tok::hash);
124124

125125
// Directive spans from the hash until the end of line or file.
@@ -143,26 +143,26 @@ class DirectiveParser {
143143

144144
} // namespace
145145

146-
DirectiveMap DirectiveMap::parse(const TokenStream &Code) {
147-
DirectiveMap Result;
146+
DirectiveTree DirectiveTree::parse(const TokenStream &Code) {
147+
DirectiveTree Result;
148148
DirectiveParser(Code).parse(&Result);
149149
return Result;
150150
}
151151

152-
static void dump(llvm::raw_ostream &OS, const DirectiveMap &, unsigned Indent);
152+
static void dump(llvm::raw_ostream &OS, const DirectiveTree &, unsigned Indent);
153153
static void dump(llvm::raw_ostream &OS,
154-
const DirectiveMap::Directive &Directive, unsigned Indent,
154+
const DirectiveTree::Directive &Directive, unsigned Indent,
155155
bool Taken = false) {
156156
OS.indent(Indent) << llvm::formatv(
157157
"#{0} ({1} tokens){2}\n", tok::getPPKeywordSpelling(Directive.Kind),
158158
Directive.Tokens.size(), Taken ? " TAKEN" : "");
159159
}
160-
static void dump(llvm::raw_ostream &OS, const DirectiveMap::Code &Code,
160+
static void dump(llvm::raw_ostream &OS, const DirectiveTree::Code &Code,
161161
unsigned Indent) {
162162
OS.indent(Indent) << llvm::formatv("code ({0} tokens)\n", Code.Tokens.size());
163163
}
164164
static void dump(llvm::raw_ostream &OS,
165-
const DirectiveMap::Conditional &Conditional,
165+
const DirectiveTree::Conditional &Conditional,
166166
unsigned Indent) {
167167
for (unsigned I = 0; I < Conditional.Branches.size(); ++I) {
168168
const auto &Branch = Conditional.Branches[I];
@@ -172,23 +172,23 @@ static void dump(llvm::raw_ostream &OS,
172172
dump(OS, Conditional.End, Indent);
173173
}
174174

175-
static void dump(llvm::raw_ostream &OS, const DirectiveMap::Chunk &Chunk,
175+
static void dump(llvm::raw_ostream &OS, const DirectiveTree::Chunk &Chunk,
176176
unsigned Indent) {
177177
switch (Chunk.kind()) {
178-
case DirectiveMap::Chunk::K_Empty:
178+
case DirectiveTree::Chunk::K_Empty:
179179
llvm_unreachable("invalid chunk");
180-
case DirectiveMap::Chunk::K_Code:
181-
return dump(OS, (const DirectiveMap::Code &)Chunk, Indent);
182-
case DirectiveMap::Chunk::K_Directive:
183-
return dump(OS, (const DirectiveMap::Directive &)Chunk, Indent);
184-
case DirectiveMap::Chunk::K_Conditional:
185-
return dump(OS, (const DirectiveMap::Conditional &)Chunk, Indent);
180+
case DirectiveTree::Chunk::K_Code:
181+
return dump(OS, (const DirectiveTree::Code &)Chunk, Indent);
182+
case DirectiveTree::Chunk::K_Directive:
183+
return dump(OS, (const DirectiveTree::Directive &)Chunk, Indent);
184+
case DirectiveTree::Chunk::K_Conditional:
185+
return dump(OS, (const DirectiveTree::Conditional &)Chunk, Indent);
186186
}
187187
}
188188

189-
static void dump(llvm::raw_ostream &OS, const DirectiveMap &Map,
189+
static void dump(llvm::raw_ostream &OS, const DirectiveTree &Tree,
190190
unsigned Indent) {
191-
for (const auto &Chunk : Map.Chunks)
191+
for (const auto &Chunk : Tree.Chunks)
192192
dump(OS, Chunk, Indent);
193193
}
194194

@@ -198,11 +198,11 @@ static void dump(llvm::raw_ostream &OS, const DirectiveMap &Map,
198198
dump(OS, T, 0); \
199199
return OS; \
200200
}
201-
OSTREAM_DUMP(DirectiveMap)
202-
OSTREAM_DUMP(DirectiveMap::Chunk)
203-
OSTREAM_DUMP(DirectiveMap::Directive)
204-
OSTREAM_DUMP(DirectiveMap::Conditional)
205-
OSTREAM_DUMP(DirectiveMap::Code)
201+
OSTREAM_DUMP(DirectiveTree)
202+
OSTREAM_DUMP(DirectiveTree::Chunk)
203+
OSTREAM_DUMP(DirectiveTree::Directive)
204+
OSTREAM_DUMP(DirectiveTree::Conditional)
205+
OSTREAM_DUMP(DirectiveTree::Code)
206206
#undef OSTREAM_DUMP
207207

208208
namespace {
@@ -223,7 +223,7 @@ class BranchChooser {
223223
public:
224224
BranchChooser(const TokenStream &Code) : Code(Code) {}
225225

226-
void choose(DirectiveMap &M) { walk(M); }
226+
void choose(DirectiveTree &M) { walk(M); }
227227

228228
private:
229229
// Describes code seen by making particular branch choices. Higher is better.
@@ -246,43 +246,43 @@ class BranchChooser {
246246
}
247247
};
248248

249-
Score walk(DirectiveMap::Code &C) {
249+
Score walk(DirectiveTree::Code &C) {
250250
Score S;
251251
for (const Token &T : Code.tokens(C.Tokens))
252252
if (T.Kind != tok::comment)
253253
++S.Tokens;
254254
return S;
255255
}
256256

257-
Score walk(DirectiveMap::Directive &D) {
257+
Score walk(DirectiveTree::Directive &D) {
258258
Score S;
259259
S.Directives = 1;
260260
S.Errors = D.Kind == tok::pp_error;
261261
return S;
262262
}
263263

264-
Score walk(DirectiveMap::Chunk &C) {
264+
Score walk(DirectiveTree::Chunk &C) {
265265
switch (C.kind()) {
266-
case DirectiveMap::Chunk::K_Code:
267-
return walk((DirectiveMap::Code &)C);
268-
case DirectiveMap::Chunk::K_Directive:
269-
return walk((DirectiveMap::Directive &)C);
270-
case DirectiveMap::Chunk::K_Conditional:
271-
return walk((DirectiveMap::Conditional &)C);
272-
case DirectiveMap::Chunk::K_Empty:
266+
case DirectiveTree::Chunk::K_Code:
267+
return walk((DirectiveTree::Code &)C);
268+
case DirectiveTree::Chunk::K_Directive:
269+
return walk((DirectiveTree::Directive &)C);
270+
case DirectiveTree::Chunk::K_Conditional:
271+
return walk((DirectiveTree::Conditional &)C);
272+
case DirectiveTree::Chunk::K_Empty:
273273
break;
274274
}
275275
llvm_unreachable("bad chunk kind");
276276
}
277277

278-
Score walk(DirectiveMap &M) {
278+
Score walk(DirectiveTree &M) {
279279
Score S;
280-
for (DirectiveMap::Chunk &C : M.Chunks)
280+
for (DirectiveTree::Chunk &C : M.Chunks)
281281
S += walk(C);
282282
return S;
283283
}
284284

285-
Score walk(DirectiveMap::Conditional &C) {
285+
Score walk(DirectiveTree::Conditional &C) {
286286
Score Best;
287287
bool MayTakeTrivial = true;
288288
bool TookTrivial = false;
@@ -314,7 +314,7 @@ class BranchChooser {
314314

315315
// Return true if the directive starts an always-taken conditional branch,
316316
// false if the branch is never taken, and None otherwise.
317-
llvm::Optional<bool> isTakenWhenReached(const DirectiveMap::Directive &Dir) {
317+
llvm::Optional<bool> isTakenWhenReached(const DirectiveTree::Directive &Dir) {
318318
switch (Dir.Kind) {
319319
case clang::tok::pp_if:
320320
case clang::tok::pp_elif:
@@ -343,8 +343,8 @@ class BranchChooser {
343343

344344
} // namespace
345345

346-
void chooseConditionalBranches(DirectiveMap &Map, const TokenStream &Code) {
347-
BranchChooser{Code}.choose(Map);
346+
void chooseConditionalBranches(DirectiveTree &Tree, const TokenStream &Code) {
347+
BranchChooser{Code}.choose(Tree);
348348
}
349349

350350
} // namespace pseudo

clang-tools-extra/pseudo/test/lex.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,14 @@ TOKEN-NEXT: hash 5:0 "#" flags=1
3939
TOKEN-NEXT: raw_identifier 5:0 "endif"
4040
TOKEN-NEXT: r_brace 6:0 "}" flags=1
4141
42-
RUN: clang-pseudo -source %s -print-directive-map | FileCheck %s -check-prefix=PPS --strict-whitespace
43-
PPS: code (5 tokens)
44-
PPS-NEXT: #ifndef (3 tokens) TAKEN
45-
PPS-NEXT: code (4 tokens)
46-
PPS-NEXT: #else (2 tokens)
47-
PPS-NEXT: code (3 tokens)
48-
PPS-NEXT: #endif (2 tokens)
49-
PPS-NEXT: code (2 tokens)
42+
RUN: clang-pseudo -source %s -print-directive-tree | FileCheck %s -check-prefix=PPT --strict-whitespace
43+
PPT: code (5 tokens)
44+
PPT-NEXT: #ifndef (3 tokens) TAKEN
45+
PPT-NEXT: code (4 tokens)
46+
PPT-NEXT: #else (2 tokens)
47+
PPT-NEXT: code (3 tokens)
48+
PPT-NEXT: #endif (2 tokens)
49+
PPT-NEXT: code (2 tokens)
5050
^ including this block comment
5151
5252
*******************************************************************************/

0 commit comments

Comments
 (0)