Skip to content

Commit 808ab1b

Browse files
committed
[NFC] ASTGen: Extract ParamDecl and ParameterList translation into a new file
1 parent 034a39a commit 808ab1b

File tree

5 files changed

+88
-38
lines changed

5 files changed

+88
-38
lines changed

include/swift/AST/CASTBridging.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -321,8 +321,7 @@ struct BridgedFuncDecl
321321
FuncDecl_create(BridgedASTContext cContext, BridgedDeclContext cDeclContext,
322322
BridgedSourceLoc cStaticLoc, BridgedSourceLoc cFuncKeywordLoc,
323323
BridgedIdentifier cName, BridgedSourceLoc cNameLoc,
324-
BridgedSourceLoc cLeftParenLoc, BridgedArrayRef params,
325-
BridgedSourceLoc cRightParenLoc, BridgedSourceLoc cAsyncLoc,
324+
void *opaqueParameterList, BridgedSourceLoc cAsyncLoc,
326325
BridgedSourceLoc cThrowsLoc, void *_Nullable opaqueReturnType);
327326
void FuncDecl_setBody(void *fn, void *body);
328327

@@ -371,6 +370,11 @@ void *GenericTypeParamDecl_create(BridgedASTContext cContext,
371370
void GenericTypeParamDecl_setInheritedType(BridgedASTContext cContext,
372371
void *Param, void *ty);
373372

373+
void *ParameterList_create(BridgedASTContext cContext,
374+
BridgedSourceLoc cLeftParenLoc,
375+
BridgedArrayRef cParameters,
376+
BridgedSourceLoc cRightParenLoc);
377+
374378
BridgedTypeAttrKind TypeAttrKind_fromString(BridgedString cStr);
375379
BridgedTypeAttributes TypeAttributes_create(void);
376380
void TypeAttributes_addSimpleAttr(BridgedTypeAttributes cAttributes,

lib/AST/CASTBridging.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -424,14 +424,11 @@ BridgedFuncDecl
424424
FuncDecl_create(BridgedASTContext cContext, BridgedDeclContext cDeclContext,
425425
BridgedSourceLoc cStaticLoc, BridgedSourceLoc cFuncKeywordLoc,
426426
BridgedIdentifier cName, BridgedSourceLoc cNameLoc,
427-
BridgedSourceLoc cLeftParenLoc, BridgedArrayRef params,
428-
BridgedSourceLoc cRightParenLoc, BridgedSourceLoc cAsyncLoc,
427+
void *opaqueParameterList, BridgedSourceLoc cAsyncLoc,
429428
BridgedSourceLoc cThrowsLoc, void *_Nullable opaqueReturnType) {
430429
ASTContext &context = convertASTContext(cContext);
431430

432-
auto *paramList = ParameterList::create(
433-
context, convertSourceLoc(cLeftParenLoc),
434-
convertArrayRef<ParamDecl *>(params), convertSourceLoc(cRightParenLoc));
431+
auto *paramList = static_cast<ParameterList *>(opaqueParameterList);
435432
auto declName = DeclName(context, convertIdentifier(cName), paramList);
436433
auto asyncLoc = convertSourceLoc(cAsyncLoc);
437434
auto throwsLoc = convertSourceLoc(cThrowsLoc);
@@ -833,6 +830,16 @@ void GenericTypeParamDecl_setInheritedType(BridgedASTContext cContext,
833830
((GenericTypeParamDecl *)param)->setInherited(entries);
834831
}
835832

833+
void *ParameterList_create(BridgedASTContext cContext,
834+
BridgedSourceLoc cLeftParenLoc,
835+
BridgedArrayRef cParameters,
836+
BridgedSourceLoc cRightParenLoc) {
837+
ASTContext &context = convertASTContext(cContext);
838+
return ParameterList::create(context, convertSourceLoc(cLeftParenLoc),
839+
convertArrayRef<ParamDecl *>(cParameters),
840+
convertSourceLoc(cRightParenLoc));
841+
}
842+
836843
#pragma clang diagnostic push
837844
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
838845

lib/ASTGen/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ add_pure_swift_host_library(swiftASTGen STATIC
1515
Sources/ASTGen/Generics.swift
1616
Sources/ASTGen/Literals.swift
1717
Sources/ASTGen/Macros.swift
18+
Sources/ASTGen/ParameterClause.swift
1819
Sources/ASTGen/PluginHost.swift
1920
Sources/ASTGen/SourceFile.swift
2021
Sources/ASTGen/SourceManager.swift

lib/ASTGen/Sources/ASTGen/Decls.swift

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -85,50 +85,20 @@ extension ASTGenVisitor {
8585
)
8686
}
8787

88-
public func visit(_ node: FunctionParameterSyntax) -> ASTNode {
89-
// FIXME: This location should be derived from the type repr.
90-
let specifierLoc: BridgedSourceLoc = nil
91-
92-
let firstName: BridgedIdentifier
93-
if node.firstName.text != "_" {
94-
// Swift AST represents "_" as nil.
95-
firstName = node.firstName.bridgedIdentifier(in: self)
96-
} else {
97-
firstName = nil
98-
}
99-
let (secondName, secondNameLoc) = node.secondName.bridgedIdentifierAndSourceLoc(in: self)
100-
101-
return .decl(
102-
ParamDecl_create(
103-
self.ctx,
104-
self.declContext,
105-
specifierLoc,
106-
firstName,
107-
self.bridgedSourceLoc(for: node.firstName),
108-
secondName,
109-
secondNameLoc,
110-
self.visit(node.type).rawValue
111-
)
112-
)
113-
}
114-
11588
public func visit(_ node: FunctionDeclSyntax) -> ASTNode {
11689
// FIXME: Compute this location
11790
let staticLoc: BridgedSourceLoc = nil
11891

11992
let (name, nameLoc) = node.name.bridgedIdentifierAndSourceLoc(in: self)
12093

121-
let parameters = node.signature.parameterClause.parameters.lazy.map { visit($0).rawValue }
12294
let out = FuncDecl_create(
12395
self.ctx,
12496
self.declContext,
12597
staticLoc,
12698
self.bridgedSourceLoc(for: node.funcKeyword),
12799
name,
128100
nameLoc,
129-
self.bridgedSourceLoc(for: node.signature.parameterClause.leftParen),
130-
parameters.bridgedArray(in: self),
131-
self.bridgedSourceLoc(for: node.signature.parameterClause.rightParen),
101+
self.visit(node.signature.parameterClause).rawValue,
132102
self.bridgedSourceLoc(for: node.signature.effectSpecifiers?.asyncSpecifier),
133103
self.bridgedSourceLoc(for: node.signature.effectSpecifiers?.throwsSpecifier),
134104
self.visit(node.signature.returnClause?.type)?.rawValue
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// This source file is part of the Swift.org open source project
4+
//
5+
// Copyright (c) 2023 Apple Inc. and the Swift project authors
6+
// Licensed under Apache License v2.0 with Runtime Library Exception
7+
//
8+
// See https://swift.org/LICENSE.txt for license information
9+
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
import CASTBridging
14+
15+
// Needed to use SyntaxTransformVisitor's visit method.
16+
@_spi(SyntaxTransformVisitor)
17+
import SwiftSyntax
18+
19+
// MARK: - ParamDecl
20+
21+
extension ASTGenVisitor {
22+
func visit(_ node: FunctionParameterSyntax) -> ASTNode {
23+
// FIXME: This location should be derived from the type repr.
24+
let specifierLoc: BridgedSourceLoc = nil
25+
26+
let firstName: BridgedIdentifier
27+
if node.firstName.tokenKind != .wildcard {
28+
// Swift AST represents "_" as nil.
29+
firstName = node.firstName.bridgedIdentifier(in: self)
30+
} else {
31+
firstName = nil
32+
}
33+
let (secondName, secondNameLoc) = node.secondName.bridgedIdentifierAndSourceLoc(in: self)
34+
35+
return .decl(
36+
ParamDecl_create(
37+
self.ctx,
38+
self.declContext,
39+
specifierLoc,
40+
firstName,
41+
self.bridgedSourceLoc(for: node.firstName),
42+
secondName,
43+
secondNameLoc,
44+
self.visit(node.type).rawValue
45+
)
46+
)
47+
}
48+
}
49+
50+
// MARK: - ParameterList
51+
52+
extension ASTGenVisitor {
53+
func visit(_ node: FunctionParameterClauseSyntax) -> ASTNode {
54+
.misc(
55+
ParameterList_create(
56+
self.ctx,
57+
self.bridgedSourceLoc(for: node.leftParen),
58+
self.visit(node.parameters),
59+
self.bridgedSourceLoc(for: node.rightParen)
60+
)
61+
)
62+
}
63+
64+
@inline(__always)
65+
func visit(_ node: FunctionParameterListSyntax) -> BridgedArrayRef {
66+
node.lazy.map { self.visit($0).rawValue }.bridgedArray(in: self)
67+
}
68+
}

0 commit comments

Comments
 (0)