Skip to content

Commit 94aeea5

Browse files
committed
[libSwiftSyntaxParser] Pass SynParser to CLibParseActions to use as container for the node handling blocks
1 parent 39019f2 commit 94aeea5

File tree

1 file changed

+24
-10
lines changed

1 file changed

+24
-10
lines changed

tools/libSwiftSyntaxParser/libSwiftSyntaxParser.cpp

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,14 @@ class SynParser {
4141
swiftparse_node_lookup_t NodeLookup = nullptr;
4242

4343
public:
44+
swiftparse_node_handler_t getNodeHandler() const {
45+
return NodeHandler;
46+
}
47+
48+
swiftparse_node_lookup_t getNodeLookup() const {
49+
return NodeLookup;
50+
}
51+
4452
void setNodeHandler(swiftparse_node_handler_t hdl) {
4553
auto prevBlk = NodeHandler;
4654
NodeHandler = Block_copy(hdl);
@@ -62,18 +70,23 @@ class SynParser {
6270
};
6371

6472
class CLibParseActions : public SyntaxParseActions {
73+
SynParser &SynParse;
6574
SourceManager &SM;
6675
unsigned BufferID;
67-
swiftparse_node_handler_t NodeHandler;
68-
swiftparse_node_lookup_t NodeLookup;
6976

7077
public:
71-
explicit CLibParseActions(SourceManager &sm, unsigned bufID,
72-
swiftparse_node_handler_t hdl,
73-
swiftparse_node_lookup_t lookup)
74-
: SM(sm), BufferID(bufID), NodeHandler(hdl), NodeLookup(lookup) {}
78+
CLibParseActions(SynParser &synParse, SourceManager &sm, unsigned bufID)
79+
: SynParse(synParse), SM(sm), BufferID(bufID) {}
7580

7681
private:
82+
swiftparse_node_handler_t getNodeHandler() const {
83+
return SynParse.getNodeHandler();
84+
}
85+
86+
swiftparse_node_lookup_t getNodeLookup() const {
87+
return SynParse.getNodeLookup();
88+
}
89+
7790
static void makeCTrivia(SmallVectorImpl<CTriviaPiece> &c_trivia,
7891
const Trivia &trivia) {
7992
for (const auto &piece : trivia) {
@@ -128,14 +141,14 @@ class CLibParseActions : public SyntaxParseActions {
128141
CRawSyntaxNode node;
129142
makeCRawToken(node, tok.getKind(), c_leadingTrivia, c_trailingTrivia,
130143
range);
131-
return NodeHandler(&node);
144+
return getNodeHandler()(&node);
132145
}
133146

134147
OpaqueSyntaxNode recordMissingToken(tok tokenKind, SourceLoc loc) override {
135148
CRawSyntaxNode node;
136149
makeCRawToken(node, tokenKind, {}, {}, CharSourceRange{loc, 0});
137150
node.present = false;
138-
return NodeHandler(&node);
151+
return getNodeHandler()(&node);
139152
}
140153

141154
OpaqueSyntaxNode recordRawSyntax(SyntaxKind kind,
@@ -149,11 +162,12 @@ class CLibParseActions : public SyntaxParseActions {
149162
node.layout_data.nodes_count = elements.size();
150163
makeCRange(node.range, range);
151164
node.present = true;
152-
return NodeHandler(&node);
165+
return getNodeHandler()(&node);
153166
}
154167

155168
std::pair<size_t, OpaqueSyntaxNode>
156169
lookupNode(size_t lexerOffset, SyntaxKind kind) override {
170+
auto NodeLookup = getNodeLookup();
157171
if (!NodeLookup) {
158172
return {0, nullptr};
159173
}
@@ -175,7 +189,7 @@ swiftparse_client_node_t SynParser::parse(const char *source) {
175189
langOpts.CollectParsedToken = false;
176190

177191
auto parseActions =
178-
std::make_shared<CLibParseActions>(SM, bufID, NodeHandler, NodeLookup);
192+
std::make_shared<CLibParseActions>(*this, SM, bufID);
179193
ParserUnit PU(SM, SourceFileKind::Library, bufID, langOpts,
180194
"syntax_parse_module", std::move(parseActions),
181195
/*SyntaxCache=*/nullptr);

0 commit comments

Comments
 (0)