Skip to content

Commit 68877f9

Browse files
authored
Merge pull request #36229 from ahoppen/pr/opaque-const-pointer-and-delete-discarednode
[libSyntax] Miscellaneous minor improvements
2 parents 03373c9 + dc8eed4 commit 68877f9

File tree

10 files changed

+30
-44
lines changed

10 files changed

+30
-44
lines changed

include/swift/Parse/ParsedRawSyntaxNode.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
namespace swift {
2424

25-
typedef void *OpaqueSyntaxNode;
25+
typedef const void *OpaqueSyntaxNode;
2626
class SyntaxParsingContext;
2727

2828
/// Represents a raw syntax node formed by the parser.

include/swift/Parse/ParsedRawSyntaxRecorder.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,6 @@ class ParsedRawSyntaxRecorder final {
6767
ParsedRawSyntaxNode recordEmptyRawSyntaxCollection(syntax::SyntaxKind kind,
6868
SourceLoc loc);
6969

70-
void discardRecordedNode(ParsedRawSyntaxNode &node);
71-
7270
/// Used for incremental re-parsing.
7371
ParsedRawSyntaxNode lookupNode(size_t lexerOffset, SourceLoc loc,
7472
syntax::SyntaxKind kind);

include/swift/Parse/SyntaxParseActions.h

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class SourceFileSyntax;
3333
enum class SyntaxKind;
3434
}
3535

36-
typedef void *OpaqueSyntaxNode;
36+
typedef const void *OpaqueSyntaxNode;
3737

3838
class SyntaxParseActions {
3939
virtual void _anchor();
@@ -62,13 +62,6 @@ class SyntaxParseActions {
6262
virtual Optional<syntax::SourceFileSyntax>
6363
realizeSyntaxRoot(OpaqueSyntaxNode root, const SourceFile &SF) = 0;
6464

65-
/// Discard raw syntax node.
66-
///
67-
/// FIXME: This breaks invariant that any recorded node will be a part of the
68-
/// result SourceFile syntax. This method is a temporary workaround, and
69-
/// should be removed when we fully migrate to libSyntax parsing.
70-
virtual void discardRecordedNode(OpaqueSyntaxNode node) = 0;
71-
7265
/// Used for incremental re-parsing.
7366
virtual std::pair<size_t, OpaqueSyntaxNode>
7467
lookupNode(size_t lexerOffset, syntax::SyntaxKind kind) {

include/swift/Subsystems.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ namespace swift {
5353
class IRGenOptions;
5454
class LangOptions;
5555
class ModuleDecl;
56-
typedef void *OpaqueSyntaxNode;
56+
typedef const void *OpaqueSyntaxNode;
5757
class Parser;
5858
class SerializationOptions;
5959
class SILOptions;

include/swift/Syntax/SyntaxCollection.h

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,9 @@ class SyntaxCollection : public Syntax {
116116
NewLayout.reserve(OldLayout.size() + 1);
117117
std::copy(OldLayout.begin(), OldLayout.end(), back_inserter(NewLayout));
118118
NewLayout.push_back(E.getRaw());
119-
auto Raw = RawSyntax::makeAndCalcLength(CollectionKind, NewLayout, getRaw()->getPresence(), getRaw()->getArena());
119+
auto Raw = RawSyntax::makeAndCalcLength(CollectionKind, NewLayout,
120+
getRaw()->getPresence(),
121+
getRaw()->getArena());
120122
return SyntaxCollection<CollectionKind, Element>(Data.replacingSelf(Raw));
121123
}
122124

@@ -126,7 +128,9 @@ class SyntaxCollection : public Syntax {
126128
SyntaxCollection<CollectionKind, Element> removingLast() const {
127129
assert(!empty());
128130
auto NewLayout = getRaw()->getLayout().drop_back();
129-
auto Raw = RawSyntax::makeAndCalcLength(CollectionKind, NewLayout, getRaw()->getPresence(), getRaw()->getArena());
131+
auto Raw = RawSyntax::makeAndCalcLength(CollectionKind, NewLayout,
132+
getRaw()->getPresence(),
133+
getRaw()->getArena());
130134
return SyntaxCollection<CollectionKind, Element>(Data.replacingSelf(Raw));
131135
}
132136

@@ -137,7 +141,9 @@ class SyntaxCollection : public Syntax {
137141
std::vector<const RawSyntax *> NewLayout = {E.getRaw()};
138142
std::copy(OldLayout.begin(), OldLayout.end(),
139143
std::back_inserter(NewLayout));
140-
auto Raw = RawSyntax::makeAndCalcLength(CollectionKind, NewLayout, getRaw()->getPresence(), getRaw()->getArena());
144+
auto Raw = RawSyntax::makeAndCalcLength(CollectionKind, NewLayout,
145+
getRaw()->getPresence(),
146+
getRaw()->getArena());
141147
return SyntaxCollection<CollectionKind, Element>(Data.replacingSelf(Raw));
142148
}
143149

@@ -147,7 +153,9 @@ class SyntaxCollection : public Syntax {
147153
SyntaxCollection<CollectionKind, Element> removingFirst() const {
148154
assert(!empty());
149155
auto NewLayout = getRaw()->getLayout().drop_front();
150-
auto Raw = RawSyntax::makeAndCalcLength(CollectionKind, NewLayout, getRaw()->getPresence(), getRaw()->getArena());
156+
auto Raw = RawSyntax::makeAndCalcLength(CollectionKind, NewLayout,
157+
getRaw()->getPresence(),
158+
getRaw()->getArena());
151159
return SyntaxCollection<CollectionKind, Element>(Data.replacingSelf(Raw));
152160
}
153161

@@ -166,7 +174,9 @@ class SyntaxCollection : public Syntax {
166174
NewLayout.push_back(E.getRaw());
167175
std::copy(OldLayout.begin() + i, OldLayout.end(),
168176
std::back_inserter(NewLayout));
169-
auto Raw = RawSyntax::makeAndCalcLength(CollectionKind, NewLayout, getRaw()->getPresence(), getRaw()->getArena());
177+
auto Raw = RawSyntax::makeAndCalcLength(CollectionKind, NewLayout,
178+
getRaw()->getPresence(),
179+
getRaw()->getArena());
170180
return SyntaxCollection<CollectionKind, Element>(Data.replacingSelf(Raw));
171181
}
172182

@@ -177,13 +187,16 @@ class SyntaxCollection : public Syntax {
177187
auto iterator = NewLayout.begin();
178188
std::advance(iterator, i);
179189
NewLayout.erase(iterator);
180-
auto Raw = RawSyntax::makeAndCalcLength(CollectionKind, NewLayout, getRaw()->getPresence(), getRaw()->getArena());
190+
auto Raw = RawSyntax::makeAndCalcLength(CollectionKind, NewLayout,
191+
getRaw()->getPresence(),
192+
getRaw()->getArena());
181193
return SyntaxCollection<CollectionKind, Element>(Data.replacingSelf(Raw));
182194
}
183195

184196
/// Return an empty syntax collection of this type.
185197
SyntaxCollection<CollectionKind, Element> cleared() const {
186-
auto Raw = RawSyntax::makeAndCalcLength(CollectionKind, {}, getRaw()->getPresence(), getRaw()->getArena());
198+
auto Raw = RawSyntax::makeAndCalcLength(
199+
CollectionKind, {}, getRaw()->getPresence(), getRaw()->getArena());
187200
return SyntaxCollection<CollectionKind, Element>(Data.replacingSelf(Raw));
188201
}
189202

include/swift/SyntaxParse/SyntaxTreeCreator.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,6 @@ class SyntaxTreeCreator: public SyntaxParseActions {
7373
ArrayRef<OpaqueSyntaxNode> elements,
7474
CharSourceRange range) override;
7575

76-
void discardRecordedNode(OpaqueSyntaxNode node) override;
77-
7876
std::pair<size_t, OpaqueSyntaxNode>
7977
lookupNode(size_t lexerOffset, syntax::SyntaxKind kind) override;
8078
};

lib/Parse/ParsedRawSyntaxRecorder.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,6 @@ ParsedRawSyntaxRecorder::recordEmptyRawSyntaxCollection(SyntaxKind kind,
112112
return ParsedRawSyntaxNode{kind, tok::unknown, range, n};
113113
}
114114

115-
void ParsedRawSyntaxRecorder::discardRecordedNode(ParsedRawSyntaxNode &node) {
116-
SPActions->discardRecordedNode(node.takeOpaqueNode());
117-
}
118-
119115
ParsedRawSyntaxNode
120116
ParsedRawSyntaxRecorder::lookupNode(size_t lexerOffset, SourceLoc loc,
121117
SyntaxKind kind) {

lib/Parse/SyntaxParsingContext.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -405,12 +405,6 @@ SyntaxParsingContext::~SyntaxParsingContext() {
405405
// Remove all parts in this context.
406406
case AccumulationMode::Discard: {
407407
auto &nodes = getStorage();
408-
for (auto i = nodes.begin()+Offset, e = nodes.end(); i != e; ++i) {
409-
// FIXME: This should not be needed. This breaks invariant that any
410-
// recorded node must be a part of result souce syntax tree.
411-
if (i->isRecorded())
412-
getRecorder().discardRecordedNode(*i);
413-
}
414408
nodes.erase(nodes.begin()+Offset, nodes.end());
415409
break;
416410
}

lib/SyntaxParse/SyntaxTreeCreator.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,13 @@ OpaqueSyntaxNode SyntaxTreeCreator::recordToken(tok tokenKind,
130130
auto raw =
131131
TokenCache->getToken(Arena, tokenKind, range.getByteLength(), tokenText,
132132
leadingTriviaText, trailingTriviaText);
133-
return static_cast<OpaqueSyntaxNode>(const_cast<RawSyntax *>(raw));
133+
return static_cast<OpaqueSyntaxNode>(raw);
134134
}
135135

136136
OpaqueSyntaxNode
137137
SyntaxTreeCreator::recordMissingToken(tok kind, SourceLoc loc) {
138138
auto raw = RawSyntax::missing(kind, getTokenText(kind), Arena);
139-
return static_cast<OpaqueSyntaxNode>(const_cast<RawSyntax *>(raw));
139+
return static_cast<OpaqueSyntaxNode>(raw);
140140
}
141141

142142
OpaqueSyntaxNode
@@ -151,7 +151,7 @@ SyntaxTreeCreator::recordRawSyntax(syntax::SyntaxKind kind,
151151
size_t TextLength = range.isValid() ? range.getByteLength() : 0;
152152
auto raw =
153153
RawSyntax::make(kind, parts, TextLength, SourcePresence::Present, Arena);
154-
return static_cast<OpaqueSyntaxNode>(const_cast<RawSyntax *>(raw));
154+
return static_cast<OpaqueSyntaxNode>(raw);
155155
}
156156

157157
std::pair<size_t, OpaqueSyntaxNode>
@@ -163,8 +163,5 @@ SyntaxTreeCreator::lookupNode(size_t lexerOffset, syntax::SyntaxKind kind) {
163163
return {0, nullptr};
164164
const RawSyntax *raw = cacheLookup->getRaw();
165165
size_t length = raw->getTextLength();
166-
return {length, static_cast<OpaqueSyntaxNode>(const_cast<RawSyntax *>(raw))};
167-
}
168-
169-
void SyntaxTreeCreator::discardRecordedNode(OpaqueSyntaxNode opaqueN) {
166+
return {length, static_cast<OpaqueSyntaxNode>(raw)};
170167
}

tools/libSwiftSyntaxParser/libSwiftSyntaxParser.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,8 @@ class CLibParseActions : public SyntaxParseActions {
183183
auto numValue = serialization::getNumericValue(kind);
184184
node.kind = numValue;
185185
assert(node.kind == numValue && "syntax kind value is too large");
186-
node.layout_data.nodes = elements.data();
186+
node.layout_data.nodes =
187+
const_cast<const swiftparse_client_node_t *>(elements.data());
187188
node.layout_data.nodes_count = elements.size();
188189
makeCRange(node.range, range);
189190
node.present = true;
@@ -196,10 +197,6 @@ class CLibParseActions : public SyntaxParseActions {
196197
return None;
197198
}
198199

199-
void discardRecordedNode(OpaqueSyntaxNode node) override {
200-
// FIXME: This method should not be called at all.
201-
}
202-
203200
std::pair<size_t, OpaqueSyntaxNode>
204201
lookupNode(size_t lexerOffset, SyntaxKind kind) override {
205202
auto NodeLookup = getNodeLookup();
@@ -302,7 +299,7 @@ swiftparse_client_node_t SynParser::parse(const char *source) {
302299
pConsumer = std::make_unique<SynParserDiagConsumer>(*this, bufID);
303300
PU.getDiagnosticEngine().addConsumer(*pConsumer);
304301
}
305-
return PU.parse();
302+
return const_cast<swiftparse_client_node_t>(PU.parse());
306303
}
307304
}
308305
//===--- C API ------------------------------------------------------------===//

0 commit comments

Comments
 (0)