diff options
| author | bors <bors@rust-lang.org> | 2018-12-30 16:06:30 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-12-30 16:06:30 +0000 |
| commit | 953a9cf10d66c164d925e138b5b3d8a2bfc1f2ca (patch) | |
| tree | bca4ec4f3008a8ab2493c58470fa54841338789f /src/libsyntax | |
| parent | 3ce6f6eca6f0c6df09b8efd45b3eec7ea94d2b25 (diff) | |
| parent | df4690ddf4b6eb699bc5c283934c26f6c9a05df6 (diff) | |
| download | rust-953a9cf10d66c164d925e138b5b3d8a2bfc1f2ca.tar.gz rust-953a9cf10d66c164d925e138b5b3d8a2bfc1f2ca.zip | |
Auto merge of #57205 - petrochenkov:extrecov, r=estebank
Improve error recovery for some built-in macros Fixes https://github.com/rust-lang/rust/issues/55897
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ext/base.rs | 9 | ||||
| -rw-r--r-- | src/libsyntax/ext/source_util.rs | 2 |
2 files changed, 6 insertions, 5 deletions
diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index 7e8b7007b22..2793754e103 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -995,7 +995,7 @@ pub fn expr_to_spanned_string<'a>( cx: &'a mut ExtCtxt, expr: P<ast::Expr>, err_msg: &str, -) -> Result<Spanned<(Symbol, ast::StrStyle)>, DiagnosticBuilder<'a>> { +) -> Result<Spanned<(Symbol, ast::StrStyle)>, Option<DiagnosticBuilder<'a>>> { // Update `expr.span`'s ctxt now in case expr is an `include!` macro invocation. let expr = expr.map(|mut expr| { expr.span = expr.span.apply_mark(cx.current_expansion.mark); @@ -1007,16 +1007,17 @@ pub fn expr_to_spanned_string<'a>( Err(match expr.node { ast::ExprKind::Lit(ref l) => match l.node { ast::LitKind::Str(s, style) => return Ok(respan(expr.span, (s, style))), - _ => cx.struct_span_err(l.span, err_msg) + _ => Some(cx.struct_span_err(l.span, err_msg)) }, - _ => cx.struct_span_err(expr.span, err_msg) + ast::ExprKind::Err => None, + _ => Some(cx.struct_span_err(expr.span, err_msg)) }) } pub fn expr_to_string(cx: &mut ExtCtxt, expr: P<ast::Expr>, err_msg: &str) -> Option<(Symbol, ast::StrStyle)> { expr_to_spanned_string(cx, expr, err_msg) - .map_err(|mut err| err.emit()) + .map_err(|err| err.map(|mut err| err.emit())) .ok() .map(|s| s.node) } diff --git a/src/libsyntax/ext/source_util.rs b/src/libsyntax/ext/source_util.rs index 1101d7772b8..e63042a4208 100644 --- a/src/libsyntax/ext/source_util.rs +++ b/src/libsyntax/ext/source_util.rs @@ -86,7 +86,7 @@ pub fn expand_include<'cx>(cx: &'cx mut ExtCtxt, sp: Span, tts: &[tokenstream::T -> Box<dyn base::MacResult+'cx> { let file = match get_single_str_from_tts(cx, sp, tts, "include!") { Some(f) => f, - None => return DummyResult::expr(sp), + None => return DummyResult::any(sp), }; // The file will be added to the code map by the parser let path = res_rel_file(cx, sp, file); |
