Skip to content

Commit a522c5c

Browse files
authored
Merge pull request #84931 from hnrklssn/swift-function-caller-generator
Add swift-function-caller-generator
2 parents ae0243c + 328e07a commit a522c5c

File tree

8 files changed

+443
-1
lines changed

8 files changed

+443
-1
lines changed

test/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,9 @@ function(get_test_dependencies SDK result_var_name)
104104
endif()
105105

106106
if(SWIFT_BUILD_SWIFT_SYNTAX)
107-
list(APPEND deps_binaries swift-plugin-server)
107+
list(APPEND deps_binaries
108+
swift-plugin-server
109+
swift-function-caller-generator)
108110
endif()
109111
endif()
110112

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: split-file %s %t
3+
// RUN: %swift-function-caller-generator Test %t/test.swift > %t/out.swift
4+
// RUN: %diff %t/out.swift %t/out.swift.expected
5+
6+
//--- test.swift
7+
func foo(x: Int) -> Int
8+
9+
func bar(_ y: UnsafePointer<CInt>)
10+
11+
@_lifetime(borrow z)
12+
func baz(_ z: Span<CInt>) -> Span<CInt>
13+
14+
@_lifetime(`func`: copy `func`)
15+
func qux(_ func: inout MutableSpan<CInt>)
16+
17+
//--- out.swift.expected
18+
import Test
19+
20+
func call_foo(x: Int) -> Int {
21+
return foo(x: x)
22+
}
23+
24+
25+
func call_bar(_ y: UnsafePointer<CInt>) {
26+
return unsafe bar(y)
27+
}
28+
29+
30+
@_lifetime(borrow z)
31+
func call_baz(_ z: Span<CInt>) -> Span<CInt> {
32+
return baz(z)
33+
}
34+
35+
36+
@_lifetime(`func`: copy `func`)
37+
func call_qux(_ func: inout MutableSpan<CInt>) {
38+
return qux(&`func`)
39+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// REQUIRES: swift_feature_LifetimeDependence
2+
// REQUIRES: swift_feature_Lifetimes
3+
4+
// RUN: %empty-directory(%t)
5+
6+
// RUN: %target-build-swift -emit-module %s -enable-experimental-feature Lifetimes -enable-experimental-feature LifetimeDependence -o %t/%target-library-name(Test) -module-name Test -emit-library
7+
8+
// RUN: %target-swift-emit-module-interface(%t/Test.swiftinterface) %s -enable-experimental-feature Lifetimes -enable-experimental-feature LifetimeDependence
9+
// RUN: %swift-function-caller-generator Test %t/Test.swiftinterface > %t/out.swift
10+
11+
// RUN: %target-swift-frontend-verify -typecheck -strict-memory-safety %t/out.swift -I %t
12+
13+
func foo(x: Int) -> Int {
14+
return x
15+
}
16+
17+
func bar(_ y: UnsafePointer<CInt>) {}
18+
19+
@_lifetime(borrow z)
20+
func baz(_ z: Span<CInt>) -> Span<CInt> {
21+
return z
22+
}
23+
24+
@_lifetime(`func`: copy `func`)
25+
func qux(_ func: inout MutableSpan<CInt>) {}
26+

test/lit.cfg

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,7 @@ config.wasm_ld = inferSwiftBinary('wasm-ld')
362362
config.swift_plugin_server = inferSwiftBinary('swift-plugin-server')
363363
config.swift_parse_test = inferSwiftBinary('swift-parse-test')
364364
config.swift_scan_test = inferSwiftBinary('swift-scan-test')
365+
config.swift_function_caller_generator = inferSwiftBinary('swift-function-caller-generator')
365366

366367
config.swift_utils = make_path(config.swift_src_root, 'utils')
367368
config.line_directive = make_path(config.swift_utils, 'line-directive')
@@ -759,6 +760,7 @@ config.substitutions.append( ('%swift-parse-test', config.swift_parse_test) )
759760
config.substitutions.append( ('%swift-scan-test', config.swift_scan_test) )
760761
config.substitutions.append( ('%swift-symbolgraph-extract', config.swift_symbolgraph_extract) )
761762
config.substitutions.append( ('%swift-synthesize-interface', config.swift_synthesize_interface) )
763+
config.substitutions.append( ('%swift-function-caller-generator', config.swift_function_caller_generator) )
762764
config.substitutions.append( ('%validate-json', f"{config.python} -m json.tool") )
763765

764766
config.clang_include_dir = make_path(config.llvm_obj_root, 'include')

tools/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ add_swift_tool_subdirectory(libStaticMirror)
2727
add_swift_tool_subdirectory(libMockPlugin)
2828
add_swift_tool_subdirectory(swift-plugin-server)
2929
add_swift_tool_subdirectory(swift-scan-test)
30+
add_swift_tool_subdirectory(swift-function-caller-generator)
3031

3132
if(SWIFT_INCLUDE_TESTS OR SWIFT_INCLUDE_TEST_BINARIES)
3233
add_swift_tool_subdirectory(swift-ide-test)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
if (SWIFT_BUILD_SWIFT_SYNTAX)
2+
add_pure_swift_host_tool(swift-function-caller-generator
3+
Sources/swift-function-caller-generator/swift-function-caller-generator.swift
4+
SWIFT_COMPONENT
5+
testsuite-tools
6+
SWIFT_DEPENDENCIES
7+
SwiftSyntax
8+
SwiftSyntaxBuilder
9+
SwiftSyntaxMacros
10+
PACKAGE_NAME Toolchain
11+
)
12+
endif()
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// swift-tools-version: 6.2
2+
3+
import PackageDescription
4+
5+
let package = Package(
6+
name: "swift-function-caller-generator",
7+
platforms: [.macOS(.v13)],
8+
products: [
9+
.executable(name: "swift-function-caller-generator", targets: ["swift-function-caller-generator"]),
10+
],
11+
dependencies: [
12+
.package(path: "../../../swift-syntax")
13+
],
14+
targets: [
15+
.executableTarget(
16+
name: "swift-function-caller-generator",
17+
dependencies: [
18+
.product(name: "SwiftSyntax", package: "swift-syntax"),
19+
.product(name: "SwiftParser", package: "swift-syntax"),
20+
.product(name: "SwiftSyntaxMacros", package: "swift-syntax"),
21+
]
22+
),
23+
],
24+
)

0 commit comments

Comments
 (0)