fix: Remove another faulty unwrap (expect)

This commit is contained in:
Lukas Wirth 2023-07-31 16:41:43 +02:00
parent 7c765d9f9e
commit bf5624664d

View File

@ -79,20 +79,18 @@ pub fn expand_eager_macro_input(
return Ok(ExpandResult { value: None, err }); return Ok(ExpandResult { value: None, err });
}; };
let og_tmap = mbe::syntax_node_to_token_map(
macro_call.value.token_tree().expect("macro_arg_text succeeded").syntax(),
);
let (mut subtree, expanded_eager_input_token_map) = let (mut subtree, expanded_eager_input_token_map) =
mbe::syntax_node_to_token_tree(&expanded_eager_input); mbe::syntax_node_to_token_tree(&expanded_eager_input);
let og_tmap = if let Some(tt) = macro_call.value.token_tree() {
let og_tmap = mbe::syntax_node_to_token_map(tt.syntax());
// The tokenmap and ids of subtree point into the expanded syntax node, but that is inaccessible from the outside // The tokenmap and ids of subtree point into the expanded syntax node, but that is inaccessible from the outside
// so we need to remap them to the original input of the eager macro. // so we need to remap them to the original input of the eager macro.
subtree.visit_ids(&|id| { subtree.visit_ids(&|id| {
// Note: we discard all token ids of braces and the like here, but that's not too bad and only a temporary fix // Note: we discard all token ids of braces and the like here, but that's not too bad and only a temporary fix
if let Some(range) = if let Some(range) = expanded_eager_input_token_map
expanded_eager_input_token_map.first_range_by_token(id, syntax::SyntaxKind::TOMBSTONE) .first_range_by_token(id, syntax::SyntaxKind::TOMBSTONE)
{ {
// remap from expanded eager input to eager input expansion // remap from expanded eager input to eager input expansion
if let Some(og_range) = mapping.get(&range) { if let Some(og_range) = mapping.get(&range) {
@ -106,6 +104,10 @@ pub fn expand_eager_macro_input(
} }
tt::TokenId::UNSPECIFIED tt::TokenId::UNSPECIFIED
}); });
og_tmap
} else {
Default::default()
};
subtree.delimiter = crate::tt::Delimiter::unspecified(); subtree.delimiter = crate::tt::Delimiter::unspecified();
let loc = MacroCallLoc { let loc = MacroCallLoc {