|
2 | 2 | //
|
3 | 3 | // RUN: %empty-directory(%t)
|
4 | 4 | //
|
5 |
| -// RUN: %swift-frontend -typecheck -swift-version 5 \ |
6 |
| -// RUN: -enable-experimental-feature Macros \ |
| 5 | +// RUN: %swift-frontend -typecheck -verify -swift-version 5 \ |
| 6 | +// RUN: -enable-experimental-feature CodeItemMacros \ |
7 | 7 | // RUN: -dump-macro-expansions \
|
8 | 8 | // RUN: -load-plugin-executable %examples_bin_path/ExamplePlugin#ExamplePlugin \
|
9 |
| -// RUN -module-name MyApp \ |
| 9 | +// RUN: -parse-as-library \ |
| 10 | +// RUN: -module-name TestApp \ |
10 | 11 | // RUN: %s 2>&1 | tee %t/expansions-dump.txt
|
11 | 12 | //
|
12 | 13 | // RUN: %FileCheck %s < %t/expansions-dump.txt
|
13 | 14 |
|
14 | 15 | @freestanding(expression)
|
15 | 16 | macro echo<T>(_: T) -> T = #externalMacro(module: "ExamplePlugin", type: "EchoExpressionMacro")
|
16 | 17 |
|
| 18 | +@freestanding(declaration) |
| 19 | +macro funcUnique() = #externalMacro(module: "ExamplePlugin", type: "FuncUniqueMacro") |
| 20 | + |
| 21 | +@freestanding(codeItem) |
| 22 | +macro printAny(_: Any) = #externalMacro(module: "ExamplePlugin", type: "PrintAnyMacro") |
| 23 | + |
17 | 24 | @attached(member, names: named(__metadata__))
|
18 | 25 | macro Metadata() = #externalMacro(module: "ExamplePlugin", type: "MetadataMacro")
|
19 | 26 |
|
| 27 | +@attached(peer, names: suffixed(_peer)) |
| 28 | +macro PeerWithSuffix() = #externalMacro(module: "ExamplePlugin", type: "PeerValueWithSuffixNameMacro") |
| 29 | + |
| 30 | +@attached(memberAttribute) |
| 31 | +macro MemberDeprecated() = #externalMacro(module: "ExamplePlugin", type: "MemberDeprecatedMacro") |
| 32 | + |
| 33 | +@attached(conformance) |
| 34 | +macro Equatable() = #externalMacro(module: "ExamplePlugin", type: "EquatableConformanceMacro") |
| 35 | + |
| 36 | +@attached(accessor) |
| 37 | +macro DidSetPrint() = #externalMacro(module: "ExamplePlugin", type: "DidSetPrintMacro") |
| 38 | + |
20 | 39 | @Metadata
|
21 |
| -class MyClass { |
| 40 | +@MemberDeprecated |
| 41 | +@Equatable |
| 42 | +@PeerWithSuffix |
| 43 | +struct MyStruct { |
| 44 | + @DidSetPrint |
22 | 45 | var value: Int = #echo(12)
|
| 46 | + // expected-error@-1 {{expansion of macro 'DidSetPrint()' did not produce a non-observing accessor}} |
| 47 | + |
| 48 | + func _test() { |
| 49 | + #printAny("test") |
| 50 | + } |
23 | 51 | }
|
24 | 52 |
|
25 |
| -// For '@Metadata' |
26 |
| -// CHECK: {{^}}static var __metadata__: [String: String] { |
27 |
| -// CHECK-NEXT: {{^}} ["name": "MyClass"] |
28 |
| -// CHECK-NEXT: {{^}}} |
| 53 | +#funcUnique |
| 54 | + |
| 55 | +// CHECK: @__swiftmacro_7TestApp8MyStruct14PeerWithSuffixfMp_.swift |
| 56 | +// CHECK-NEXT: ------------------------------ |
| 57 | +// CHECK-NEXT: var MyStruct_peer: Int { |
| 58 | +// CHECK-NEXT: 1 |
| 59 | +// CHECK-NEXT: } |
| 60 | +// CHECK-NEXT: ------------------------------ |
| 61 | + |
| 62 | +// CHECK: @__swiftmacro_7TestApp8MyStruct9EquatablefMc_.swift |
| 63 | +// CHECK-NEXT: ------------------------------ |
| 64 | +// CHECK-NEXT: extension MyStruct : Equatable {} |
| 65 | +// CHECK-NEXT: ------------------------------ |
| 66 | + |
| 67 | +// CHECK: @__swiftmacro_7TestApp8MyStruct8MetadatafMm_.swift |
| 68 | +// CHECK-NEXT: ------------------------------ |
| 69 | +// CHECK-NEXT: static var __metadata__: [String: String] { |
| 70 | +// CHECK-NEXT: ["name": "MyStruct"] |
| 71 | +// CHECK-NEXT: } |
| 72 | +// CHECK-NEXT: ------------------------------ |
| 73 | + |
| 74 | +// CHECK: @__swiftmacro_7TestApp8MyStructV5value16MemberDeprecatedfMr_.swift |
| 75 | +// CHECK-NEXT: ------------------------------ |
| 76 | +// CHECK-NEXT: @available(*, deprecated) |
| 77 | +// CHECK-NEXT: ------------------------------ |
| 78 | + |
| 79 | +// CHECK: @__swiftmacro_7TestApp8MyStructV5_test16MemberDeprecatedfMr0_.swift |
| 80 | +// CHECK-NEXT: ------------------------------ |
| 81 | +// CHECK-NEXT: @available(*, deprecated) |
| 82 | +// CHECK-NEXT: ------------------------------ |
| 83 | + |
| 84 | +// CHECK: @__swiftmacro_7TestApp8MyStructV5value11DidSetPrintfMa_.swift |
| 85 | +// CHECK-NEXT: ------------------------------ |
| 86 | +// CHECK-NEXT: { |
| 87 | +// CHECK-NEXT: didSet { |
| 88 | +// CHECK-NEXT: print(value) |
| 89 | +// CHECK-NEXT: } |
| 90 | +// CHECK-NEXT: } |
| 91 | +// CHECK-NEXT: ------------------------------ |
| 92 | + |
| 93 | +// CHECK: @__swiftmacro_7TestApp8MyStructV4echofMf_.swift |
| 94 | +// CHECK-NEXT: ------------------------------ |
| 95 | +// CHECK-NEXT: /* echo */12 |
| 96 | +// CHECK-NEXT: ------------------------------ |
| 97 | + |
| 98 | +// CHECK: @__swiftmacro_7TestApp33_B5E4CA48BE2C4AA1BE7F954C809E362ALl10funcUniquefMf_.swift |
| 99 | +// CHECK-NEXT: ------------------------------ |
| 100 | +// CHECK-NEXT: func $s7TestApp33_B5E4CA48BE2C4AA1BE7F954C809E362ALl10funcUniquefMf_6uniquefMu_() { |
| 101 | +// CHECK-NEXT: } |
29 | 102 |
|
30 |
| -// For '#echo(12)' |
31 |
| -// CHECK: /* echo */12 |
| 103 | +// CHECK: @__swiftmacro_7TestApp8MyStructV5_testyyF8printAnyfMf0_.swift |
| 104 | +// CHECK-NEXT: ------------------------------ |
| 105 | +// CHECK-NEXT: print("test") |
| 106 | +// CHECK-NEXT: ------------------------------ |
0 commit comments