Skip to content

Commit c75898d

Browse files
committed
[libSyntax] Mark functions with move semantics on ParsedSyntax as such
1 parent e5189ea commit c75898d

File tree

2 files changed

+9
-18
lines changed

2 files changed

+9
-18
lines changed

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))

0 commit comments

Comments
 (0)