defatalize AttrProcMacro::expand
This commit is contained in:
parent
35cca74212
commit
ce8880d1d8
3 changed files with 16 additions and 18 deletions
|
@ -326,7 +326,7 @@ pub trait AttrProcMacro {
|
|||
span: Span,
|
||||
annotation: TokenStream,
|
||||
annotated: TokenStream,
|
||||
) -> TokenStream;
|
||||
) -> Result<TokenStream, ErrorReported>;
|
||||
}
|
||||
|
||||
impl<F> AttrProcMacro for F
|
||||
|
@ -339,9 +339,9 @@ where
|
|||
_span: Span,
|
||||
annotation: TokenStream,
|
||||
annotated: TokenStream,
|
||||
) -> TokenStream {
|
||||
) -> Result<TokenStream, ErrorReported> {
|
||||
// FIXME setup implicit context in TLS before calling self.
|
||||
(*self)(annotation, annotated)
|
||||
Ok((*self)(annotation, annotated))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -712,8 +712,11 @@ impl<'a, 'b> MacroExpander<'a, 'b> {
|
|||
if let MacArgs::Eq(..) = attr_item.args {
|
||||
self.cx.span_err(span, "key-value macro attributes are not supported");
|
||||
}
|
||||
let tok_result =
|
||||
expander.expand(self.cx, span, attr_item.args.inner_tokens(), tokens);
|
||||
let inner_tokens = attr_item.args.inner_tokens();
|
||||
let tok_result = match expander.expand(self.cx, span, inner_tokens, tokens) {
|
||||
Err(_) => return ExpandResult::Ready(fragment_kind.dummy(span)),
|
||||
Ok(ts) => ts,
|
||||
};
|
||||
self.parse_ast_fragment(tok_result, fragment_kind, &attr_item.path, span)
|
||||
}
|
||||
SyntaxExtensionKind::LegacyAttr(expander) => {
|
||||
|
|
|
@ -45,21 +45,16 @@ impl base::AttrProcMacro for AttrProcMacro {
|
|||
span: Span,
|
||||
annotation: TokenStream,
|
||||
annotated: TokenStream,
|
||||
) -> TokenStream {
|
||||
) -> Result<TokenStream, ErrorReported> {
|
||||
let server = proc_macro_server::Rustc::new(ecx);
|
||||
match self.client.run(&EXEC_STRATEGY, server, annotation, annotated) {
|
||||
Ok(stream) => stream,
|
||||
Err(e) => {
|
||||
let msg = "custom attribute panicked";
|
||||
let mut err = ecx.struct_span_fatal(span, msg);
|
||||
if let Some(s) = e.as_str() {
|
||||
err.help(&format!("message: {}", s));
|
||||
}
|
||||
|
||||
err.emit();
|
||||
FatalError.raise();
|
||||
self.client.run(&EXEC_STRATEGY, server, annotation, annotated).map_err(|e| {
|
||||
let mut err = ecx.struct_span_err(span, "custom attribute panicked");
|
||||
if let Some(s) = e.as_str() {
|
||||
err.help(&format!("message: {}", s));
|
||||
}
|
||||
}
|
||||
err.emit();
|
||||
ErrorReported
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue