Skip to content

Commit d3db32d

Browse files
authored
Merge pull request swiftlang#35778 from ahoppen/minor-libsyntax-improvements
[libSyntax] Minor improvements
2 parents d0e27bb + bc0f03e commit d3db32d

File tree

4 files changed

+11
-20
lines changed

4 files changed

+11
-20
lines changed

include/swift/Parse/ParsedRawSyntaxRecorder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ namespace syntax {
3737
enum class SyntaxKind;
3838
}
3939

40-
class ParsedRawSyntaxRecorder {
40+
class ParsedRawSyntaxRecorder final {
4141
std::shared_ptr<SyntaxParseActions> SPActions;
4242

4343
public:

include/swift/Parse/ParsedSyntax.h

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class ParsedSyntax {
2222
ParsedRawSyntaxNode RawNode;
2323

2424
public:
25-
explicit ParsedSyntax(ParsedRawSyntaxNode rawNode)
25+
explicit ParsedSyntax(ParsedRawSyntaxNode &&rawNode)
2626
: RawNode(std::move(rawNode)) {}
2727

2828
const ParsedRawSyntaxNode &getRaw() const { return RawNode; }
@@ -38,19 +38,9 @@ class ParsedSyntax {
3838
/// Cast this Syntax node to a more specific type, asserting it's of the
3939
/// right kind.
4040
template <typename T>
41-
T castTo() const {
41+
T castTo() && {
4242
assert(is<T>() && "castTo<T>() node of incompatible type!");
43-
return T { RawNode.copyDeferred() };
44-
}
45-
46-
/// If this Syntax node is of the right kind, cast and return it,
47-
/// otherwise return None.
48-
template <typename T>
49-
llvm::Optional<T> getAs() const {
50-
if (is<T>()) {
51-
return castTo<T>();
52-
}
53-
return llvm::None;
43+
return T(std::move(RawNode));
5444
}
5545

5646
ParsedSyntax copyDeferred() const {
@@ -69,7 +59,7 @@ class ParsedSyntax {
6959

7060
class ParsedTokenSyntax final : public ParsedSyntax {
7161
public:
72-
explicit ParsedTokenSyntax(ParsedRawSyntaxNode rawNode)
62+
explicit ParsedTokenSyntax(ParsedRawSyntaxNode &&rawNode)
7363
: ParsedSyntax(std::move(rawNode)) {}
7464

7565
tok getTokenKind() const {

lib/Parse/ParseType.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -400,11 +400,12 @@ ParserResult<TypeRepr> Parser::parseType(Diag<> MessageID,
400400
Builder.useAsyncKeyword(SyntaxContext->popToken());
401401

402402
auto InputNode(std::move(*SyntaxContext->popIf<ParsedTypeSyntax>()));
403-
if (auto TupleTypeNode = InputNode.getAs<ParsedTupleTypeSyntax>()) {
403+
if (InputNode.is<ParsedTupleTypeSyntax>()) {
404+
auto TupleTypeNode = std::move(InputNode).castTo<ParsedTupleTypeSyntax>();
404405
// Decompose TupleTypeSyntax and repack into FunctionType.
405-
auto LeftParen = TupleTypeNode->getDeferredLeftParen();
406-
auto Arguments = TupleTypeNode->getDeferredElements();
407-
auto RightParen = TupleTypeNode->getDeferredRightParen();
406+
auto LeftParen = TupleTypeNode.getDeferredLeftParen();
407+
auto Arguments = TupleTypeNode.getDeferredElements();
408+
auto RightParen = TupleTypeNode.getDeferredRightParen();
408409
Builder
409410
.useLeftParen(std::move(LeftParen))
410411
.useArguments(std::move(Arguments))

lib/SyntaxParse/RawSyntaxTokenCache.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class RawSyntaxCacheNode : public llvm::FoldingSetNode {
4444
: Obj(Obj), IDRef(IDRef) {}
4545

4646
/// Retrieve assciated RawSyntax.
47-
RC<syntax::RawSyntax> get() { return Obj; }
47+
const RC<syntax::RawSyntax> &get() { return Obj; }
4848

4949
// Only allow allocation of Node using the allocator in SyntaxArena.
5050
void *operator new(size_t Bytes, RC<syntax::SyntaxArena> &Arena,

0 commit comments

Comments
 (0)