mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Implement function-signature in lib/Syntax
Part of: https://bugs.swift.org/browse/SR-4043
This commit is contained in:
@@ -510,6 +510,7 @@ class FunctionParameterListSyntax final : public
|
||||
friend struct SyntaxFactory;
|
||||
friend class Syntax;
|
||||
friend class SyntaxData;
|
||||
friend class FunctionSignatureSyntax;
|
||||
|
||||
using DataType = FunctionParameterListSyntaxData;
|
||||
|
||||
@@ -526,11 +527,23 @@ public:
|
||||
#pragma mark - function-signature Data
|
||||
|
||||
class FunctionSignatureSyntaxData final : public SyntaxData {
|
||||
friend struct SyntaxFactory;
|
||||
friend class SyntaxData;
|
||||
friend class FunctionSignatureSyntax;
|
||||
|
||||
RC<FunctionParameterListSyntaxData> CachedParameterList;
|
||||
RC<TypeAttributesSyntaxData> CachedReturnTypeAttributes;
|
||||
RC<TypeSyntaxData> CachedReturnTypeSyntax;
|
||||
|
||||
FunctionSignatureSyntaxData(const RC<RawSyntax> Raw,
|
||||
const SyntaxData *Parent = nullptr,
|
||||
const CursorIndex IndexInParent = 0);
|
||||
|
||||
static RC<FunctionSignatureSyntaxData>
|
||||
make(RC<RawSyntax> Raw, const SyntaxData *Parent = nullptr,
|
||||
CursorIndex IndexInParent = 0);
|
||||
static RC<FunctionSignatureSyntaxData> makeBlank();
|
||||
|
||||
public:
|
||||
static bool classof(const SyntaxData *SD) {
|
||||
return SD->getKind() == SyntaxKind::FunctionSignature;
|
||||
@@ -547,8 +560,6 @@ class FunctionSignatureSyntax final : public Syntax {
|
||||
friend class SyntaxData;
|
||||
friend class FunctionSignatureSyntaxData;
|
||||
|
||||
using DataType = FunctionSignatureSyntaxData;
|
||||
|
||||
enum class Cursor : CursorIndex {
|
||||
LeftParen,
|
||||
ParameterList,
|
||||
@@ -560,6 +571,12 @@ class FunctionSignatureSyntax final : public Syntax {
|
||||
};
|
||||
|
||||
public:
|
||||
using DataType = FunctionSignatureSyntaxData;
|
||||
static constexpr SyntaxKind Kind = SyntaxKind::FunctionSignature;
|
||||
|
||||
FunctionSignatureSyntax(const RC<SyntaxData> Root, const DataType *Data)
|
||||
: Syntax(Root, Data) {}
|
||||
|
||||
/// Return the left parenthesis '(' token enclosing the parameter list.
|
||||
RC<TokenSyntax> getLeftParenToken() const;
|
||||
|
||||
@@ -575,6 +592,14 @@ public:
|
||||
FunctionSignatureSyntax
|
||||
withParameterList(FunctionParameterListSyntax NewParameterList) const;
|
||||
|
||||
/// Return the right parenthesis ')' token enclosing the parameter list.
|
||||
RC<TokenSyntax> getRightParenToken() const;
|
||||
|
||||
/// Return a FunctionSignatureSyntax with the given right parentesis ')' token
|
||||
/// enclosing the parameter list.
|
||||
FunctionSignatureSyntax
|
||||
withRightParenToken(RC<TokenSyntax> NewRightParen) const;
|
||||
|
||||
/// Return the 'throws' token in this signature if it exists.
|
||||
RC<TokenSyntax> getThrowsToken() const;
|
||||
|
||||
@@ -607,14 +632,6 @@ public:
|
||||
/// Return a FunctionSignatureSyntax with the given return type.
|
||||
FunctionSignatureSyntax withReturnTypeSyntax(TypeSyntax NewReturnType) const;
|
||||
|
||||
/// Return the right parenthesis ')' token enclosing the parameter list.
|
||||
RC<TokenSyntax> getRightParenToken() const;
|
||||
|
||||
/// Return a FunctionSignatureSyntax with the given right parentesis ')' token
|
||||
/// enclosing the parameter list.
|
||||
FunctionSignatureSyntax
|
||||
withRightParenToken(RC<TokenSyntax> NewLeftParen) const;
|
||||
|
||||
static bool classof(const Syntax *S) {
|
||||
return S->getKind() == SyntaxKind::FunctionSignature;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user