use rustc_attr::{self as attr, TransparencyError};
use rustc_data_structures::fx::FxHashMap;
use rustc_data_structures::sync::Lrc;
-use rustc_errors::{Applicability, DiagnosticBuilder, FatalError};
+use rustc_errors::{Applicability, DiagnosticBuilder};
use rustc_feature::Features;
use rustc_parse::parser::Parser;
use rustc_session::parse::ParseSess;
}
}
+struct MacroRulesDummyExpander;
+
+impl TTMacroExpander for MacroRulesDummyExpander {
+ fn expand<'cx>(
+ &self,
+ _: &'cx mut ExtCtxt<'_>,
+ sp: Span,
+ _: TokenStream,
+ ) -> Box<dyn MacResult + 'cx> {
+ DummyResult::any(sp)
+ }
+}
+
fn trace_macros_note(cx_expansions: &mut FxHashMap<Span, Vec<String>>, sp: Span, message: String) {
let sp = sp.macro_backtrace().last().map(|trace| trace.call_site).unwrap_or(sp);
cx_expansions.entry(sp).or_default().push(message);
def: &ast::Item,
edition: Edition,
) -> SyntaxExtension {
+ let mk_syn_ext = |expander| {
+ SyntaxExtension::new(
+ sess,
+ SyntaxExtensionKind::LegacyBang(expander),
+ def.span,
+ Vec::new(),
+ edition,
+ def.ident.name,
+ &def.attrs,
+ )
+ };
+
let diag = &sess.span_diagnostic;
let lhs_nm = ast::Ident::new(sym::lhs, def.span);
let rhs_nm = ast::Ident::new(sym::rhs, def.span);
Failure(token, msg) => {
let s = parse_failure_msg(&token);
let sp = token.span.substitute_dummy(def.span);
- let mut err = sess.span_diagnostic.struct_span_fatal(sp, &s);
- err.span_label(sp, msg);
- err.emit();
- FatalError.raise();
+ sess.span_diagnostic.struct_span_err(sp, &s).span_label(sp, msg).emit();
+ return mk_syn_ext(Box::new(MacroRulesDummyExpander));
}
- Error(sp, s) => {
- sess.span_diagnostic.span_fatal(sp.substitute_dummy(def.span), &s).raise();
+ Error(sp, msg) => {
+ sess.span_diagnostic.struct_span_err(sp.substitute_dummy(def.span), &msg).emit();
+ return mk_syn_ext(Box::new(MacroRulesDummyExpander));
}
};
valid,
});
- SyntaxExtension::new(
- sess,
- SyntaxExtensionKind::LegacyBang(expander),
- def.span,
- Vec::new(),
- edition,
- def.ident.name,
- &def.attrs,
- )
+ mk_syn_ext(expander)
}
fn check_lhs_nt_follows(