]>
Commit | Line | Data |
---|---|---|
041b39d2 XL |
1 | // The compiler code necessary to support the compile_error! extension. |
2 | ||
e8be2606 | 3 | use crate::util::get_single_str_from_tts; |
74b04a01 | 4 | use rustc_ast::tokenstream::TokenStream; |
c620b35d | 5 | use rustc_expand::base::{DummyResult, ExpandResult, ExtCtxt, MacroExpanderResult}; |
dfeec247 | 6 | use rustc_span::Span; |
041b39d2 | 7 | |
e8be2606 | 8 | pub(crate) fn expand_compile_error<'cx>( |
dfeec247 XL |
9 | cx: &'cx mut ExtCtxt<'_>, |
10 | sp: Span, | |
11 | tts: TokenStream, | |
c620b35d FG |
12 | ) -> MacroExpanderResult<'cx> { |
13 | let ExpandResult::Ready(mac) = get_single_str_from_tts(cx, sp, tts, "compile_error!") else { | |
14 | return ExpandResult::Retry(()); | |
15 | }; | |
16 | let var = match mac { | |
17 | Ok(var) => var, | |
18 | Err(guar) => return ExpandResult::Ready(DummyResult::any(sp, guar)), | |
041b39d2 XL |
19 | }; |
20 | ||
c620b35d | 21 | #[expect(rustc::diagnostic_outside_of_impl, reason = "diagnostic message is specified by user")] |
353b0b11 | 22 | #[expect(rustc::untranslatable_diagnostic, reason = "diagnostic message is specified by user")] |
c620b35d | 23 | let guar = cx.dcx().span_err(sp, var.to_string()); |
041b39d2 | 24 | |
c620b35d | 25 | ExpandResult::Ready(DummyResult::any(sp, guar)) |
041b39d2 | 26 | } |