Skip to content

Commit 01d1776

Browse files
committed
cfg-guard ns_string! macro to only work on Apple platforms
GNUStep support is definitely possible, just hasn't been implemented yet
1 parent d663c71 commit 01d1776

File tree

4 files changed

+5
-275
lines changed

4 files changed

+5
-275
lines changed

objc2-foundation/src/__string_macro.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
//! generating a pure `NSString`. We don't support that yet (since I don't
1010
//! know the use-case), but we definitely could!
1111
//! See: <https://github.com/llvm/llvm-project/blob/release/13.x/clang/lib/CodeGen/CGObjCMac.cpp#L2007-L2068>
12+
#![cfg(feature = "apple")]
1213
use core::ffi::c_void;
1314

1415
use objc2::runtime::Class;
@@ -173,6 +174,8 @@ const fn decode_utf8(s: &[u8], i: usize) -> (usize, u32) {
173174

174175
/// Creates an [`NSString`][`crate::NSString`] from a static string.
175176
///
177+
/// Currently only supported on Apple targets.
178+
///
176179
///
177180
/// # Examples
178181
///
@@ -247,6 +250,7 @@ const fn decode_utf8(s: &[u8], i: usize) -> (usize, u32) {
247250
///
248251
/// [`NSString::from_str`]: crate::NSString::from_str
249252
#[macro_export]
253+
#[cfg(feature = "apple")] // To make `auto_doc_cfg` pick this up
250254
macro_rules! ns_string {
251255
($s:expr) => {{
252256
// Note: We create both the ASCII + NUL and the UTF-16 + NUL versions
Lines changed: 0 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -1,148 +1,3 @@
11
.text
22
.intel_syntax noprefix
3-
.section .text.get_ascii,"ax",@progbits
4-
.globl get_ascii
5-
.p2align 4, 0x90
6-
.type get_ascii,@function
7-
get_ascii:
8-
call .L0$pb
9-
.L0$pb:
10-
pop eax
11-
.Ltmp0:
12-
add eax, offset _GLOBAL_OFFSET_TABLE_+(.Ltmp0-.L0$pb)
13-
lea eax, [eax + SYM(test_ns_string[CRATE_ID]::get_ascii::CFSTRING, 0)@GOTOFF]
14-
ret
15-
.Lfunc_end0:
16-
.size get_ascii, .Lfunc_end0-get_ascii
17-
18-
.section .text.get_utf16,"ax",@progbits
19-
.globl get_utf16
20-
.p2align 4, 0x90
21-
.type get_utf16,@function
22-
get_utf16:
23-
call .L1$pb
24-
.L1$pb:
25-
pop eax
26-
.Ltmp1:
27-
add eax, offset _GLOBAL_OFFSET_TABLE_+(.Ltmp1-.L1$pb)
28-
lea eax, [eax + SYM(test_ns_string[CRATE_ID]::get_utf16::CFSTRING, 0)@GOTOFF]
29-
ret
30-
.Lfunc_end1:
31-
.size get_utf16, .Lfunc_end1-get_utf16
32-
33-
.section .text.get_with_nul,"ax",@progbits
34-
.globl get_with_nul
35-
.p2align 4, 0x90
36-
.type get_with_nul,@function
37-
get_with_nul:
38-
call .L2$pb
39-
.L2$pb:
40-
pop eax
41-
.Ltmp2:
42-
add eax, offset _GLOBAL_OFFSET_TABLE_+(.Ltmp2-.L2$pb)
43-
lea eax, [eax + SYM(test_ns_string[CRATE_ID]::get_with_nul::CFSTRING, 0)@GOTOFF]
44-
ret
45-
.Lfunc_end2:
46-
.size get_with_nul, .Lfunc_end2-get_with_nul
47-
48-
.type EMPTY,@object
49-
.section .data.rel.ro.EMPTY,"aw",@progbits
50-
.globl EMPTY
51-
.p2align 2
52-
EMPTY:
53-
.long SYM(test_ns_string[CRATE_ID]::EMPTY::CFSTRING, 0)
54-
.size EMPTY, 4
55-
56-
.type XYZ,@object
57-
.section .data.rel.ro.XYZ,"aw",@progbits
58-
.globl XYZ
59-
.p2align 2
60-
XYZ:
61-
.long SYM(test_ns_string[CRATE_ID]::XYZ::CFSTRING, 0)
62-
.size XYZ, 4
63-
64-
.type SYM(test_ns_string[CRATE_ID]::EMPTY::ASCII, 0),@object
65-
.section "__TEXT,__cstring,cstring_literals","a",@progbits
66-
SYM(test_ns_string[CRATE_ID]::EMPTY::ASCII, 0):
67-
.zero 1
68-
.size SYM(test_ns_string[CRATE_ID]::EMPTY::ASCII, 0), 1
69-
70-
.type SYM(test_ns_string[CRATE_ID]::EMPTY::CFSTRING, 0),@object
71-
.section "__DATA,__cfstring","aw",@progbits
72-
.globl SYM(test_ns_string[CRATE_ID]::EMPTY::CFSTRING, 0)
73-
.p2align 2
74-
SYM(test_ns_string[CRATE_ID]::EMPTY::CFSTRING, 0):
75-
.long __CFConstantStringClassReference
76-
.asciz "\310\007\000"
77-
.long SYM(test_ns_string[CRATE_ID]::EMPTY::ASCII, 0)
78-
.zero 4
79-
.size SYM(test_ns_string[CRATE_ID]::EMPTY::CFSTRING, 0), 16
80-
81-
.type SYM(test_ns_string[CRATE_ID]::XYZ::ASCII, 0),@object
82-
.section "__TEXT,__cstring,cstring_literals","a",@progbits
83-
SYM(test_ns_string[CRATE_ID]::XYZ::ASCII, 0):
84-
.asciz "xyz"
85-
.size SYM(test_ns_string[CRATE_ID]::XYZ::ASCII, 0), 4
86-
87-
.type SYM(test_ns_string[CRATE_ID]::XYZ::CFSTRING, 0),@object
88-
.section "__DATA,__cfstring","aw",@progbits
89-
.globl SYM(test_ns_string[CRATE_ID]::XYZ::CFSTRING, 0)
90-
.p2align 2
91-
SYM(test_ns_string[CRATE_ID]::XYZ::CFSTRING, 0):
92-
.long __CFConstantStringClassReference
93-
.asciz "\310\007\000"
94-
.long SYM(test_ns_string[CRATE_ID]::XYZ::ASCII, 0)
95-
.asciz "\003\000\000"
96-
.size SYM(test_ns_string[CRATE_ID]::XYZ::CFSTRING, 0), 16
97-
98-
.type SYM(test_ns_string[CRATE_ID]::get_ascii::ASCII, 0),@object
99-
.section "__TEXT,__cstring,cstring_literals","a",@progbits
100-
SYM(test_ns_string[CRATE_ID]::get_ascii::ASCII, 0):
101-
.asciz "abc"
102-
.size SYM(test_ns_string[CRATE_ID]::get_ascii::ASCII, 0), 4
103-
104-
.type SYM(test_ns_string[CRATE_ID]::get_ascii::CFSTRING, 0),@object
105-
.section "__DATA,__cfstring","aw",@progbits
106-
.p2align 2
107-
SYM(test_ns_string[CRATE_ID]::get_ascii::CFSTRING, 0):
108-
.long __CFConstantStringClassReference
109-
.asciz "\310\007\000"
110-
.long SYM(test_ns_string[CRATE_ID]::get_ascii::ASCII, 0)
111-
.asciz "\003\000\000"
112-
.size SYM(test_ns_string[CRATE_ID]::get_ascii::CFSTRING, 0), 16
113-
114-
.type SYM(test_ns_string[CRATE_ID]::get_utf16::UTF16, 0),@object
115-
.section "__TEXT,__ustring","a",@progbits
116-
.p2align 1
117-
SYM(test_ns_string[CRATE_ID]::get_utf16::UTF16, 0):
118-
.asciz "\341\000b\000\007\001\000"
119-
.size SYM(test_ns_string[CRATE_ID]::get_utf16::UTF16, 0), 8
120-
121-
.type SYM(test_ns_string[CRATE_ID]::get_utf16::CFSTRING, 0),@object
122-
.section "__DATA,__cfstring","aw",@progbits
123-
.p2align 2
124-
SYM(test_ns_string[CRATE_ID]::get_utf16::CFSTRING, 0):
125-
.long __CFConstantStringClassReference
126-
.asciz "\320\007\000"
127-
.long SYM(test_ns_string[CRATE_ID]::get_utf16::UTF16, 0)
128-
.asciz "\003\000\000"
129-
.size SYM(test_ns_string[CRATE_ID]::get_utf16::CFSTRING, 0), 16
130-
131-
.type SYM(test_ns_string[CRATE_ID]::get_with_nul::UTF16, 0),@object
132-
.section "__TEXT,__ustring","a",@progbits
133-
.p2align 1
134-
SYM(test_ns_string[CRATE_ID]::get_with_nul::UTF16, 0):
135-
.asciz "a\000\000\000b\000\000\000c\000\000\000\000"
136-
.size SYM(test_ns_string[CRATE_ID]::get_with_nul::UTF16, 0), 14
137-
138-
.type SYM(test_ns_string[CRATE_ID]::get_with_nul::CFSTRING, 0),@object
139-
.section "__DATA,__cfstring","aw",@progbits
140-
.p2align 2
141-
SYM(test_ns_string[CRATE_ID]::get_with_nul::CFSTRING, 0):
142-
.long __CFConstantStringClassReference
143-
.asciz "\320\007\000"
144-
.long SYM(test_ns_string[CRATE_ID]::get_with_nul::UTF16, 0)
145-
.asciz "\006\000\000"
146-
.size SYM(test_ns_string[CRATE_ID]::get_with_nul::CFSTRING, 0), 16
147-
1483
.section ".note.GNU-stack","",@progbits
Lines changed: 0 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -1,133 +1,3 @@
11
.text
22
.intel_syntax noprefix
3-
.section .text.get_ascii,"ax",@progbits
4-
.globl get_ascii
5-
.p2align 4, 0x90
6-
.type get_ascii,@function
7-
get_ascii:
8-
lea rax, [rip + SYM(test_ns_string[CRATE_ID]::get_ascii::CFSTRING, 0)]
9-
ret
10-
.Lfunc_end0:
11-
.size get_ascii, .Lfunc_end0-get_ascii
12-
13-
.section .text.get_utf16,"ax",@progbits
14-
.globl get_utf16
15-
.p2align 4, 0x90
16-
.type get_utf16,@function
17-
get_utf16:
18-
lea rax, [rip + SYM(test_ns_string[CRATE_ID]::get_utf16::CFSTRING, 0)]
19-
ret
20-
.Lfunc_end1:
21-
.size get_utf16, .Lfunc_end1-get_utf16
22-
23-
.section .text.get_with_nul,"ax",@progbits
24-
.globl get_with_nul
25-
.p2align 4, 0x90
26-
.type get_with_nul,@function
27-
get_with_nul:
28-
lea rax, [rip + SYM(test_ns_string[CRATE_ID]::get_with_nul::CFSTRING, 0)]
29-
ret
30-
.Lfunc_end2:
31-
.size get_with_nul, .Lfunc_end2-get_with_nul
32-
33-
.type EMPTY,@object
34-
.section .data.rel.ro.EMPTY,"aw",@progbits
35-
.globl EMPTY
36-
.p2align 3
37-
EMPTY:
38-
.quad SYM(test_ns_string[CRATE_ID]::EMPTY::CFSTRING, 0)
39-
.size EMPTY, 8
40-
41-
.type XYZ,@object
42-
.section .data.rel.ro.XYZ,"aw",@progbits
43-
.globl XYZ
44-
.p2align 3
45-
XYZ:
46-
.quad SYM(test_ns_string[CRATE_ID]::XYZ::CFSTRING, 0)
47-
.size XYZ, 8
48-
49-
.type SYM(test_ns_string[CRATE_ID]::EMPTY::ASCII, 0),@object
50-
.section "__TEXT,__cstring,cstring_literals","a",@progbits
51-
SYM(test_ns_string[CRATE_ID]::EMPTY::ASCII, 0):
52-
.zero 1
53-
.size SYM(test_ns_string[CRATE_ID]::EMPTY::ASCII, 0), 1
54-
55-
.type SYM(test_ns_string[CRATE_ID]::EMPTY::CFSTRING, 0),@object
56-
.section "__DATA,__cfstring","aw",@progbits
57-
.globl SYM(test_ns_string[CRATE_ID]::EMPTY::CFSTRING, 0)
58-
.p2align 3
59-
SYM(test_ns_string[CRATE_ID]::EMPTY::CFSTRING, 0):
60-
.quad __CFConstantStringClassReference
61-
.asciz "\310\007\000\000\000\000\000"
62-
.quad SYM(test_ns_string[CRATE_ID]::EMPTY::ASCII, 0)
63-
.zero 8
64-
.size SYM(test_ns_string[CRATE_ID]::EMPTY::CFSTRING, 0), 32
65-
66-
.type SYM(test_ns_string[CRATE_ID]::XYZ::ASCII, 0),@object
67-
.section "__TEXT,__cstring,cstring_literals","a",@progbits
68-
SYM(test_ns_string[CRATE_ID]::XYZ::ASCII, 0):
69-
.asciz "xyz"
70-
.size SYM(test_ns_string[CRATE_ID]::XYZ::ASCII, 0), 4
71-
72-
.type SYM(test_ns_string[CRATE_ID]::XYZ::CFSTRING, 0),@object
73-
.section "__DATA,__cfstring","aw",@progbits
74-
.globl SYM(test_ns_string[CRATE_ID]::XYZ::CFSTRING, 0)
75-
.p2align 3
76-
SYM(test_ns_string[CRATE_ID]::XYZ::CFSTRING, 0):
77-
.quad __CFConstantStringClassReference
78-
.asciz "\310\007\000\000\000\000\000"
79-
.quad SYM(test_ns_string[CRATE_ID]::XYZ::ASCII, 0)
80-
.asciz "\003\000\000\000\000\000\000"
81-
.size SYM(test_ns_string[CRATE_ID]::XYZ::CFSTRING, 0), 32
82-
83-
.type SYM(test_ns_string[CRATE_ID]::get_ascii::ASCII, 0),@object
84-
.section "__TEXT,__cstring,cstring_literals","a",@progbits
85-
SYM(test_ns_string[CRATE_ID]::get_ascii::ASCII, 0):
86-
.asciz "abc"
87-
.size SYM(test_ns_string[CRATE_ID]::get_ascii::ASCII, 0), 4
88-
89-
.type SYM(test_ns_string[CRATE_ID]::get_ascii::CFSTRING, 0),@object
90-
.section "__DATA,__cfstring","aw",@progbits
91-
.p2align 3
92-
SYM(test_ns_string[CRATE_ID]::get_ascii::CFSTRING, 0):
93-
.quad __CFConstantStringClassReference
94-
.asciz "\310\007\000\000\000\000\000"
95-
.quad SYM(test_ns_string[CRATE_ID]::get_ascii::ASCII, 0)
96-
.asciz "\003\000\000\000\000\000\000"
97-
.size SYM(test_ns_string[CRATE_ID]::get_ascii::CFSTRING, 0), 32
98-
99-
.type SYM(test_ns_string[CRATE_ID]::get_utf16::UTF16, 0),@object
100-
.section "__TEXT,__ustring","a",@progbits
101-
.p2align 1
102-
SYM(test_ns_string[CRATE_ID]::get_utf16::UTF16, 0):
103-
.asciz "\341\000b\000\007\001\000"
104-
.size SYM(test_ns_string[CRATE_ID]::get_utf16::UTF16, 0), 8
105-
106-
.type SYM(test_ns_string[CRATE_ID]::get_utf16::CFSTRING, 0),@object
107-
.section "__DATA,__cfstring","aw",@progbits
108-
.p2align 3
109-
SYM(test_ns_string[CRATE_ID]::get_utf16::CFSTRING, 0):
110-
.quad __CFConstantStringClassReference
111-
.asciz "\320\007\000\000\000\000\000"
112-
.quad SYM(test_ns_string[CRATE_ID]::get_utf16::UTF16, 0)
113-
.asciz "\003\000\000\000\000\000\000"
114-
.size SYM(test_ns_string[CRATE_ID]::get_utf16::CFSTRING, 0), 32
115-
116-
.type SYM(test_ns_string[CRATE_ID]::get_with_nul::UTF16, 0),@object
117-
.section "__TEXT,__ustring","a",@progbits
118-
.p2align 1
119-
SYM(test_ns_string[CRATE_ID]::get_with_nul::UTF16, 0):
120-
.asciz "a\000\000\000b\000\000\000c\000\000\000\000"
121-
.size SYM(test_ns_string[CRATE_ID]::get_with_nul::UTF16, 0), 14
122-
123-
.type SYM(test_ns_string[CRATE_ID]::get_with_nul::CFSTRING, 0),@object
124-
.section "__DATA,__cfstring","aw",@progbits
125-
.p2align 3
126-
SYM(test_ns_string[CRATE_ID]::get_with_nul::CFSTRING, 0):
127-
.quad __CFConstantStringClassReference
128-
.asciz "\320\007\000\000\000\000\000"
129-
.quad SYM(test_ns_string[CRATE_ID]::get_with_nul::UTF16, 0)
130-
.asciz "\006\000\000\000\000\000\000"
131-
.size SYM(test_ns_string[CRATE_ID]::get_with_nul::CFSTRING, 0), 32
132-
1333
.section ".note.GNU-stack","",@progbits

test-assembly/crates/test_ns_string/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#![cfg(feature = "apple")]
12
//! Test the output of the `ns_string!` macro.
23
use objc2_foundation::{ns_string, NSString};
34

0 commit comments

Comments
 (0)