From 0bdfd0f4c76fa29a4be774937bc72165390b06d6 Mon Sep 17 00:00:00 2001 From: Douglas Young Date: Tue, 18 Feb 2014 16:14:12 +0000 Subject: Avoid returning original macro if expansion fails. Closes #11692. Instead of returning the original expression, a dummy expression (with identical span) is returned. This prevents infinite loops of failed expansions as well as odd double error messages in certain situations. --- src/libsyntax/ext/expand.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/libsyntax/ext/expand.rs') diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 97766e1a14b..4b81713f7d0 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -51,7 +51,7 @@ pub fn expand_expr(e: @ast::Expr, fld: &mut MacroExpander) -> @ast::Expr { format!("expected macro name without module \ separators")); // let compilation continue - return e; + return MacResult::raw_dummy_expr(e.span); } let extname = pth.segments[0].identifier; let extnamestr = token::get_ident(extname); @@ -64,7 +64,7 @@ pub fn expand_expr(e: @ast::Expr, fld: &mut MacroExpander) -> @ast::Expr { extnamestr.get())); // let compilation continue - return e; + return MacResult::raw_dummy_expr(e.span); } Some(&NormalTT(ref expandfun, exp_span)) => { fld.cx.bt_push(ExpnInfo { @@ -98,7 +98,7 @@ pub fn expand_expr(e: @ast::Expr, fld: &mut MacroExpander) -> @ast::Expr { extnamestr.get() ) ); - return e; + return MacResult::raw_dummy_expr(e.span); } }; @@ -111,7 +111,7 @@ pub fn expand_expr(e: @ast::Expr, fld: &mut MacroExpander) -> @ast::Expr { format!("'{}' is not a tt-style macro", extnamestr.get()) ); - return e; + return MacResult::raw_dummy_expr(e.span); } }; -- cgit 1.4.1-3-g733a5