@@ -41,6 +41,14 @@ class SynParser {
41
41
swiftparse_node_lookup_t NodeLookup = nullptr ;
42
42
43
43
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
+
44
52
void setNodeHandler (swiftparse_node_handler_t hdl) {
45
53
auto prevBlk = NodeHandler;
46
54
NodeHandler = Block_copy (hdl);
@@ -62,18 +70,23 @@ class SynParser {
62
70
};
63
71
64
72
class CLibParseActions : public SyntaxParseActions {
73
+ SynParser &SynParse;
65
74
SourceManager &SM;
66
75
unsigned BufferID;
67
- swiftparse_node_handler_t NodeHandler;
68
- swiftparse_node_lookup_t NodeLookup;
69
76
70
77
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) {}
75
80
76
81
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
+
77
90
static void makeCTrivia (SmallVectorImpl<CTriviaPiece> &c_trivia,
78
91
const Trivia &trivia) {
79
92
for (const auto &piece : trivia) {
@@ -128,14 +141,14 @@ class CLibParseActions : public SyntaxParseActions {
128
141
CRawSyntaxNode node;
129
142
makeCRawToken (node, tok.getKind (), c_leadingTrivia, c_trailingTrivia,
130
143
range);
131
- return NodeHandler (&node);
144
+ return getNodeHandler () (&node);
132
145
}
133
146
134
147
OpaqueSyntaxNode recordMissingToken (tok tokenKind, SourceLoc loc) override {
135
148
CRawSyntaxNode node;
136
149
makeCRawToken (node, tokenKind, {}, {}, CharSourceRange{loc, 0 });
137
150
node.present = false ;
138
- return NodeHandler (&node);
151
+ return getNodeHandler () (&node);
139
152
}
140
153
141
154
OpaqueSyntaxNode recordRawSyntax (SyntaxKind kind,
@@ -149,11 +162,12 @@ class CLibParseActions : public SyntaxParseActions {
149
162
node.layout_data .nodes_count = elements.size ();
150
163
makeCRange (node.range , range);
151
164
node.present = true ;
152
- return NodeHandler (&node);
165
+ return getNodeHandler () (&node);
153
166
}
154
167
155
168
std::pair<size_t , OpaqueSyntaxNode>
156
169
lookupNode (size_t lexerOffset, SyntaxKind kind) override {
170
+ auto NodeLookup = getNodeLookup ();
157
171
if (!NodeLookup) {
158
172
return {0 , nullptr };
159
173
}
@@ -175,7 +189,7 @@ swiftparse_client_node_t SynParser::parse(const char *source) {
175
189
langOpts.CollectParsedToken = false ;
176
190
177
191
auto parseActions =
178
- std::make_shared<CLibParseActions>(SM, bufID, NodeHandler, NodeLookup );
192
+ std::make_shared<CLibParseActions>(* this , SM, bufID );
179
193
ParserUnit PU (SM, SourceFileKind::Library, bufID, langOpts,
180
194
" syntax_parse_module" , std::move (parseActions),
181
195
/* SyntaxCache=*/ nullptr );
0 commit comments