Skip to content

Commit 6198eb7

Browse files
Implement edition-dependent builtin panic! macro
1 parent eaffdae commit 6198eb7

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

crates/hir_expand/src/builtin_macro.rs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
//! Builtin macro
22
use crate::{
33
db::AstDatabase, name, quote, AstId, CrateId, EagerMacroId, LazyMacroId, MacroCallId,
4-
MacroDefId, MacroDefKind, TextSize,
4+
MacroCallLoc, MacroDefId, MacroDefKind, TextSize,
55
};
66

7-
use base_db::{AnchoredPath, FileId};
7+
use base_db::{AnchoredPath, Edition, FileId};
88
use cfg::CfgExpr;
99
use either::Either;
1010
use mbe::{parse_exprs_with_sep, parse_to_token_tree, ExpandResult};
@@ -111,6 +111,8 @@ register_builtin! {
111111
(llvm_asm, LlvmAsm) => asm_expand,
112112
(asm, Asm) => asm_expand,
113113
(cfg, Cfg) => cfg_expand,
114+
(core_panic, CorePanic) => panic_expand,
115+
(std_panic, StdPanic) => panic_expand,
114116

115117
EAGER:
116118
(compile_error, CompileError) => compile_error_expand,
@@ -284,6 +286,25 @@ fn cfg_expand(
284286
ExpandResult::ok(expanded)
285287
}
286288

289+
fn panic_expand(
290+
db: &dyn AstDatabase,
291+
id: LazyMacroId,
292+
tt: &tt::Subtree,
293+
) -> ExpandResult<tt::Subtree> {
294+
let loc: MacroCallLoc = db.lookup_intern_macro(id);
295+
// Expand to a macro call `$crate::panic::panic_{edition}`
296+
let krate = tt::Ident { text: "$crate".into(), id: tt::TokenId::unspecified() };
297+
let mut call = if db.crate_graph()[loc.krate].edition == Edition::Edition2021 {
298+
quote!(#krate::panic::panic_2021!)
299+
} else {
300+
quote!(#krate::panic::panic_2015!)
301+
};
302+
303+
// Pass the original arguments
304+
call.token_trees.push(tt::TokenTree::Subtree(tt.clone()));
305+
ExpandResult::ok(call)
306+
}
307+
287308
fn unquote_str(lit: &tt::Literal) -> Option<String> {
288309
let lit = ast::make::tokens::literal(&lit.to_string());
289310
let token = ast::String::cast(lit)?;

crates/hir_expand/src/name.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,8 @@ pub mod known {
208208
line,
209209
module_path,
210210
assert,
211+
core_panic,
212+
std_panic,
211213
stringify,
212214
concat,
213215
include,

crates/hir_expand/src/quote.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ macro_rules! __quote {
104104
( . ) => {$crate::__quote!(@PUNCT '.')};
105105
( < ) => {$crate::__quote!(@PUNCT '<')};
106106
( > ) => {$crate::__quote!(@PUNCT '>')};
107+
( ! ) => {$crate::__quote!(@PUNCT '!')};
107108

108109
( $first:tt $($tail:tt)+ ) => {
109110
{

0 commit comments

Comments
 (0)