1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
// Checks that macro-expanded members are dumped and that their source ranges
// contain the appropriate buffer ID.
// REQUIRES: swift_swift_parser
// RUN: %empty-directory(%t)
// RUN: %host-build-swift -swift-version 5 -emit-library -o %t/%target-library-name(MacroDefinition) -module-name=MacroDefinition %S/Inputs/json_ast_macro_definitions.swift -g -no-toolchain-stdlib-rpath
// RUN: %target-swift-frontend -swift-version 5 -emit-module -o %t/json_ast_macro_library.swiftmodule %S/Inputs/json_ast_macro_library.swift -module-name json_ast_macro_library -load-plugin-library %t/%target-library-name(MacroDefinition)
// RUN: %target-swift-frontend -target %target-swift-5.9-abi-triple -I %t -load-plugin-library %t/%target-library-name(MacroDefinition) -parse-as-library -dump-ast -dump-ast-format json %s -module-name main -o - | %FileCheck %s
import json_ast_macro_library
@InjectMember
struct X {
var y: Int
}
// CHECK: "_kind":"struct_decl",
// CHECK-SAME: "usr":"s:4main1XV",
// CHECK-SAME: "_kind":"custom_attr",
// CHECK-SAME: "macro":{"_kind":"decl_ref","base_name":"InjectMember","decl_usr":"s:22json_ast_macro_library12InjectMemberyycfm","type_usr":"$syycD"}
// CHECK-SAME: "_kind":"pattern_binding_decl"
// CHECK-SAME: "buffer_id":"@__swiftmacro_4main1X12InjectMemberfMm_.swift"
// CHECK-SAME: "name":"_macroInjectedMember"
struct Z {
#injectFreestanding
}
// NOTE: For freestanding members (as opposed to top-level), we get the expanded
// decl before we see the MacroExpansionDecl.
// CHECK-SAME: "_kind":"struct_decl",
// CHECK-SAME: "usr":"s:4main1ZV20FixedNameFreestanderV",
// CHECK-SAME: "buffer_id":"@__swiftmacro_4main0033astdumpjsonmacrosswift_GwAFheaeGafMX{{[0-9]+}}_{{[0-9]+}}_33_{{[0-9A-F]+}}Ll18injectFreestandingfMf_.swift"
// CHECK-SAME: "_kind":"macro_expansion_decl",
// CHECK-SAME: "auxiliary_decl_usrs":["s:4main1ZV20FixedNameFreestanderV"]
// CHECK-SAME: "macro":{"_kind":"decl_ref","base_name":"injectFreestanding","decl_usr":"s:22json_ast_macro_library18injectFreestandingyycfm","type_usr":"$syycD"}
@InjectPeer
struct ThisWillBePeered {}
// CHECK-SAME: "_kind":"struct_decl",
// CHECK-SAME: "usr":"s:4main16ThisWillBePeeredV",
// CHECK-SAME: "auxiliary_decl_usrs":["s:4main13FixedNamePeerV"],
// CHECK-SAME: "_kind":"custom_attr",
// CHECK-SAME: "macro":{"_kind":"decl_ref","base_name":"InjectPeer","decl_usr":"s:22json_ast_macro_library10InjectPeeryycfm","type_usr":"$syycD"}
// CHECK-SAME: "_kind":"struct_decl",
// CHECK-SAME: "usr":"s:4main13FixedNamePeerV",
// CHECK-SAME: "buffer_id":"@__swiftmacro_4main16ThisWillBePeered10InjectPeerfMp_.swift"
#injectFreestanding
// CHECK-SAME: "_kind":"macro_expansion_decl",
// CHECK-SAME: "auxiliary_decl_usrs":["s:4main20FixedNameFreestanderV"],
// CHECK-SAME: "macro":{"_kind":"decl_ref","base_name":"injectFreestanding","decl_usr":"s:22json_ast_macro_library18injectFreestandingyycfm","type_usr":"$syycD"}
// CHECK-SAME: "_kind":"struct_decl",
// CHECK-SAME: "usr":"s:4main20FixedNameFreestanderV",
// CHECK-SAME: "buffer_id":"@__swiftmacro_4main0033astdumpjsonmacrosswift_GwAFheaeGafMX{{[0-9]+}}_{{[0-9]+}}_33_{{[0-9A-F]+}}Ll18injectFreestandingfMf_.swift"
|