mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
55 lines
3.1 KiB
Swift
55 lines
3.1 KiB
Swift
// 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"
|