1#[cfg(not(flux_sysroot))]
2use attr_dummy as attr_impl;
3#[cfg(flux_sysroot)]
4use attr_sysroot as attr_impl;
5use proc_macro::TokenStream;
6
7#[proc_macro_attribute]
8pub fn alias(attr: TokenStream, tokens: TokenStream) -> TokenStream {
9 attr_impl::alias(attr, tokens)
10}
11
12#[proc_macro_attribute]
13pub fn sig(attr: TokenStream, tokens: TokenStream) -> TokenStream {
14 attr_impl::sig(attr, tokens)
15}
16
17#[proc_macro_attribute]
18pub fn spec(attr: TokenStream, tokens: TokenStream) -> TokenStream {
19 attr_impl::spec(attr, tokens)
20}
21
22#[proc_macro_attribute]
23pub fn specs(attr: TokenStream, tokens: TokenStream) -> TokenStream {
24 attr_impl::specs(attr, tokens)
25}
26
27#[proc_macro_attribute]
28pub fn qualifiers(attr: TokenStream, tokens: TokenStream) -> TokenStream {
29 attr_impl::qualifiers(attr, tokens)
30}
31
32#[proc_macro_attribute]
33pub fn reveal(attr: TokenStream, tokens: TokenStream) -> TokenStream {
34 attr_impl::reveal(attr, tokens)
35}
36
37#[proc_macro_attribute]
38pub fn refined_by(attr: TokenStream, tokens: TokenStream) -> TokenStream {
39 attr_impl::refined_by(attr, tokens)
40}
41
42#[proc_macro_attribute]
43pub fn invariant(attr: TokenStream, tokens: TokenStream) -> TokenStream {
44 attr_impl::invariant(attr, tokens)
45}
46
47#[proc_macro_attribute]
48pub fn constant(attr: TokenStream, tokens: TokenStream) -> TokenStream {
49 attr_impl::constant(attr, tokens)
50}
51
52#[proc_macro_attribute]
53pub fn opaque(attr: TokenStream, tokens: TokenStream) -> TokenStream {
54 attr_impl::opaque(attr, tokens)
55}
56
57#[proc_macro_attribute]
58pub fn reflect(attr: TokenStream, tokens: TokenStream) -> TokenStream {
59 attr_impl::reflect(attr, tokens)
60}
61
62#[proc_macro_attribute]
63pub fn opts(attr: TokenStream, tokens: TokenStream) -> TokenStream {
64 attr_impl::opts(attr, tokens)
65}
66
67#[proc_macro_attribute]
68pub fn trusted(attr: TokenStream, tokens: TokenStream) -> TokenStream {
69 attr_impl::trusted(attr, tokens)
70}
71
72#[proc_macro_attribute]
73pub fn trusted_impl(attr: TokenStream, tokens: TokenStream) -> TokenStream {
74 attr_impl::trusted_impl(attr, tokens)
75}
76
77#[proc_macro_attribute]
78pub fn proven_externally(attr: TokenStream, tokens: TokenStream) -> TokenStream {
79 attr_impl::proven_externally(attr, tokens)
80}
81
82#[proc_macro_attribute]
83pub fn generics(attr: TokenStream, tokens: TokenStream) -> TokenStream {
84 attr_impl::generics(attr, tokens)
85}
86
87#[proc_macro_attribute]
88pub fn assoc(attr: TokenStream, tokens: TokenStream) -> TokenStream {
89 attr_impl::assoc(attr, tokens)
90}
91
92#[proc_macro]
93pub fn flux(tokens: TokenStream) -> TokenStream {
94 flux_attrs_impl::flux(tokens.into()).into()
95}
96
97#[proc_macro]
98pub fn defs(tokens: TokenStream) -> TokenStream {
99 attr_impl::defs(tokens)
100}
101
102#[proc_macro_attribute]
103pub fn extern_spec(attrs: TokenStream, tokens: TokenStream) -> TokenStream {
104 attr_impl::extern_spec(attrs, tokens)
105}
106
107#[proc_macro_attribute]
108pub fn ignore(attrs: TokenStream, tokens: TokenStream) -> TokenStream {
109 attr_impl::ignore(attrs, tokens)
110}
111
112#[proc_macro_attribute]
113pub fn should_fail(attrs: TokenStream, tokens: TokenStream) -> TokenStream {
114 attr_impl::should_fail(attrs, tokens)
115}
116
117#[proc_macro_attribute]
118pub fn no_panic(attrs: TokenStream, tokens: TokenStream) -> TokenStream {
119 attr_impl::no_panic(attrs, tokens)
120}
121
122#[proc_macro_attribute]
123pub fn reft(attrs: TokenStream, tokens: TokenStream) -> TokenStream {
124 attr_impl::reft(attrs, tokens)
125}
126
127#[cfg(flux_sysroot)]
128mod attr_sysroot {
129 use super::*;
130
131 pub fn extern_spec(attr: TokenStream, tokens: TokenStream) -> TokenStream {
132 flux_attrs_impl::extern_spec(attr.into(), tokens.into()).into()
133 }
134
135 pub fn refined_by(attr: TokenStream, item: TokenStream) -> TokenStream {
136 flux_attrs_impl::refined_by(attr.into(), item.into()).into()
137 }
138
139 pub fn defs(tokens: TokenStream) -> TokenStream {
140 flux_attrs_impl::defs(tokens.into()).into()
141 }
142
143 macro_rules! flux_tool_attrs {
144 ($($name:ident),+ $(,)?) => {
145 $(
146 pub fn $name(attr: TokenStream, item: TokenStream) -> TokenStream {
147 flux_attrs_impl::flux_tool_item_attr(stringify!($name), attr.into(), item.into()).into()
148 }
149 )*
150 };
151 }
152
153 flux_tool_attrs!(
154 alias,
155 spec,
156 specs,
157 sig,
158 qualifiers,
159 reveal,
160 constant,
161 invariant,
162 opaque,
163 reflect,
164 opts,
165 trusted,
166 trusted_impl,
167 proven_externally,
168 generics,
169 assoc,
170 ignore,
171 should_fail,
172 reft,
173 no_panic,
174 );
175}
176
177#[cfg(not(flux_sysroot))]
178mod attr_dummy {
179 use super::*;
180
181 pub fn refined_by(attr: TokenStream, item: TokenStream) -> TokenStream {
182 flux_attrs_impl::refined_by(attr.into(), item.into()).into()
183 }
184
185 pub fn defs(_tokens: TokenStream) -> TokenStream {
186 TokenStream::new()
187 }
188
189 pub fn extern_spec(_attrs: TokenStream, _tokens: TokenStream) -> TokenStream {
190 TokenStream::new()
191 }
192
193 macro_rules! no_op {
194 ($($name:ident),+ $(,)?) => {
195 $(
196 pub fn $name(_attr: TokenStream, item: TokenStream) -> TokenStream {
197 item
198 }
199 )+
200 };
201 }
202
203 no_op!(
204 alias,
205 spec,
206 specs,
207 sig,
208 qualifiers,
209 reveal,
210 invariant,
211 constant,
212 opaque,
213 reflect,
214 opts,
215 trusted,
216 trusted_impl,
217 proven_externally,
218 generics,
219 assoc,
220 ignore,
221 should_fail,
222 no_panic,
223 reft,
224 );
225}