From e7d3ae606ed496144554dae499b69207da3b09c5 Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Tue, 27 Oct 2015 22:20:01 -0700 Subject: [PATCH] Make quote plugin use parsing functions which explicitly panic. Rename parse_* to parse_*_panic, and add parse_attribute_panic. --- src/libsyntax/ext/quote.rs | 14 +++++++------- src/libsyntax/parse/attr.rs | 2 +- src/libsyntax/parse/parser.rs | 16 ++++++++++------ src/test/auxiliary/macro_crate_test.rs | 2 +- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/libsyntax/ext/quote.rs b/src/libsyntax/ext/quote.rs index 1e337c29f2b..59e8533a83d 100644 --- a/src/libsyntax/ext/quote.rs +++ b/src/libsyntax/ext/quote.rs @@ -327,7 +327,7 @@ pub fn expand_quote_expr<'cx>(cx: &'cx mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) -> Box { - let expanded = expand_parse_call(cx, sp, "parse_expr", vec!(), tts); + let expanded = expand_parse_call(cx, sp, "parse_expr_panic", vec!(), tts); base::MacEager::expr(expanded) } @@ -335,7 +335,7 @@ pub fn expand_quote_item<'cx>(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) -> Box { - let expanded = expand_parse_call(cx, sp, "parse_item", vec!(), tts); + let expanded = expand_parse_call(cx, sp, "parse_item_panic", vec!(), tts); base::MacEager::expr(expanded) } @@ -343,7 +343,7 @@ pub fn expand_quote_pat<'cx>(cx: &'cx mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) -> Box { - let expanded = expand_parse_call(cx, sp, "parse_pat", vec!(), tts); + let expanded = expand_parse_call(cx, sp, "parse_pat_panic", vec!(), tts); base::MacEager::expr(expanded) } @@ -351,7 +351,7 @@ pub fn expand_quote_arm(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) -> Box { - let expanded = expand_parse_call(cx, sp, "parse_arm", vec!(), tts); + let expanded = expand_parse_call(cx, sp, "parse_arm_panic", vec!(), tts); base::MacEager::expr(expanded) } @@ -359,7 +359,7 @@ pub fn expand_quote_ty(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) -> Box { - let expanded = expand_parse_call(cx, sp, "parse_ty", vec!(), tts); + let expanded = expand_parse_call(cx, sp, "parse_ty_panic", vec!(), tts); base::MacEager::expr(expanded) } @@ -367,7 +367,7 @@ pub fn expand_quote_stmt(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) -> Box { - let expanded = expand_parse_call(cx, sp, "parse_stmt", vec!(), tts); + let expanded = expand_parse_call(cx, sp, "parse_stmt_panic", vec!(), tts); base::MacEager::expr(expanded) } @@ -375,7 +375,7 @@ pub fn expand_quote_attr(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) -> Box { - let expanded = expand_parse_call(cx, sp, "parse_attribute", + let expanded = expand_parse_call(cx, sp, "parse_attribute_panic", vec!(cx.expr_bool(sp, true)), tts); base::MacEager::expr(expanded) diff --git a/src/libsyntax/parse/attr.rs b/src/libsyntax/parse/attr.rs index 7b96135f1c3..5df2478d487 100644 --- a/src/libsyntax/parse/attr.rs +++ b/src/libsyntax/parse/attr.rs @@ -51,7 +51,7 @@ impl<'a> Parser<'a> { /// /// If permit_inner is true, then a leading `!` indicates an inner /// attribute - fn parse_attribute(&mut self, permit_inner: bool) -> PResult { + pub fn parse_attribute(&mut self, permit_inner: bool) -> PResult { debug!("parse_attributes: permit_inner={:?} self.token={:?}", permit_inner, self.token); let (span, value, mut style) = match self.token { diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index d71ea4d105b..570934a5bff 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -360,30 +360,34 @@ impl<'a> Parser<'a> { // Panicing fns (for now!) // These functions are used by the quote_*!() syntax extensions, but shouldn't // be used otherwise. - pub fn parse_expr(&mut self) -> P { + pub fn parse_expr_panic(&mut self) -> P { panictry!(self.parse_expr_nopanic()) } - pub fn parse_item(&mut self) -> Option> { + pub fn parse_item_panic(&mut self) -> Option> { panictry!(self.parse_item_nopanic()) } - pub fn parse_pat(&mut self) -> P { + pub fn parse_pat_panic(&mut self) -> P { panictry!(self.parse_pat_nopanic()) } - pub fn parse_arm(&mut self) -> Arm { + pub fn parse_arm_panic(&mut self) -> Arm { panictry!(self.parse_arm_nopanic()) } - pub fn parse_ty(&mut self) -> P { + pub fn parse_ty_panic(&mut self) -> P { panictry!(self.parse_ty_nopanic()) } - pub fn parse_stmt(&mut self) -> Option> { + pub fn parse_stmt_panic(&mut self) -> Option> { panictry!(self.parse_stmt_nopanic()) } + pub fn parse_attribute_panic(&mut self, permit_inner: bool) -> ast::Attribute { + panictry!(self.parse_attribute(permit_inner)) + } + /// Convert a token to a string using self's reader pub fn token_to_string(token: &token::Token) -> String { pprust::token_to_string(token) diff --git a/src/test/auxiliary/macro_crate_test.rs b/src/test/auxiliary/macro_crate_test.rs index 77f0e0f2c34..0bb5c05aaf5 100644 --- a/src/test/auxiliary/macro_crate_test.rs +++ b/src/test/auxiliary/macro_crate_test.rs @@ -54,7 +54,7 @@ fn expand_identity(cx: &mut ExtCtxt, _span: Span, tts: &[TokenTree]) // Parse an expression and emit it unchanged. let mut parser = parse::new_parser_from_tts(cx.parse_sess(), cx.cfg(), tts.to_vec()); - let expr = parser.parse_expr(); + let expr = parser.parse_expr_panic(); MacEager::expr(quote_expr!(&mut *cx, $expr)) }