Skip to content

Commit 76fbae1

Browse files
committed
[libSyntax] Change OpaqueSyntaxNode to be a const void *
The data of an OpaqueSyntaxNode should never be modified. Also, this allows us to get rid of two const_casts.
1 parent 0deff39 commit 76fbae1

File tree

5 files changed

+10
-9
lines changed

5 files changed

+10
-9
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/SyntaxParseActions.h

Lines changed: 1 addition & 1 deletion
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();

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;

lib/SyntaxParse/SyntaxTreeCreator.cpp

Lines changed: 4 additions & 4 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,7 +163,7 @@ 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))};
166+
return {length, static_cast<OpaqueSyntaxNode>(raw)};
167167
}
168168

169169
void SyntaxTreeCreator::discardRecordedNode(OpaqueSyntaxNode opaqueN) {

tools/libSwiftSyntaxParser/libSwiftSyntaxParser.cpp

Lines changed: 3 additions & 2 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;
@@ -302,7 +303,7 @@ swiftparse_client_node_t SynParser::parse(const char *source) {
302303
pConsumer = std::make_unique<SynParserDiagConsumer>(*this, bufID);
303304
PU.getDiagnosticEngine().addConsumer(*pConsumer);
304305
}
305-
return PU.parse();
306+
return const_cast<swiftparse_client_node_t>(PU.parse());
306307
}
307308
}
308309
//===--- C API ------------------------------------------------------------===//

0 commit comments

Comments
 (0)