Skip to content

Commit 4ed393d

Browse files
committed
[Macros] Add a test of a variadic "print" macro.
Macros can use variadic generics, and don't need runtime support for variadic generics to do so. Add an example "print".
1 parent af49a90 commit 4ed393d

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import SwiftDiagnostics
2+
import SwiftOperators
3+
import SwiftSyntax
4+
import SwiftSyntaxBuilder
5+
import _SwiftSyntaxMacros
6+
7+
public struct PrintMacro: ExpressionMacro {
8+
public static func expansion(
9+
of node: MacroExpansionExprSyntax, in context: inout MacroExpansionContext
10+
) -> ExprSyntax {
11+
let printCalls = node.argumentList.map {
12+
"print(\($0.expression))"
13+
}.joined(separator: "\n")
14+
return
15+
"""
16+
{
17+
\(raw: printCalls)
18+
}()
19+
"""
20+
}
21+
}
22+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-build-swift -I %swift-host-lib-dir -L %swift-host-lib-dir -emit-library -o %t/%target-library-name(MacroDefinition) -module-name=MacroDefinition %S/Inputs/variadic_macros.swift -g -no-toolchain-stdlib-rpath
3+
// RUNx: %target-swift-frontend -dump-ast -enable-experimental-feature Macros -enable-experimental-feature VariadicGenerics -load-plugin-library %t/%target-library-name(MacroDefinition) -I %swift-host-lib-dir %s -module-name MacroUser 2>&1 | %FileCheck --check-prefix CHECK-AST %s
4+
// RUN: %target-typecheck-verify-swift -enable-experimental-feature Macros -enable-experimental-feature VariadicGenerics -load-plugin-library %t/%target-library-name(MacroDefinition) -I %swift-host-lib-dir -module-name MacroUser -DTEST_DIAGNOSTICS -swift-version 5
5+
// RUN: %target-build-swift -enable-experimental-feature Macros -enable-experimental-feature VariadicGenerics -load-plugin-library %t/%target-library-name(MacroDefinition) -I %swift-host-lib-dir -L %swift-host-lib-dir %s -o %t/main -module-name MacroUser -swift-version 5
6+
// RUN: %target-run %t/main | %FileCheck %s
7+
// REQUIRES: executable_test
8+
9+
// FIXME: Swift parser is not enabled on Linux CI yet.
10+
// REQUIRES: OS=macosx
11+
12+
@expression macro varPrint<Value...>(_ value: Value...) = MacroDefinition.PrintMacro
13+
14+
func testIt() {
15+
// CHECK: hello
16+
// CHECK: [1, 2, 3, 4, 5]
17+
#varPrint("hello", [1, 2, 3, 4, 5])
18+
19+
// CHECK: world
20+
#varPrint("world")
21+
}
22+
23+
testIt()

0 commit comments

Comments
 (0)