1
Fork 0

Update libsyntax tests.

This commit is contained in:
Eli Friedman 2015-10-23 20:35:44 -07:00
parent e5024924ad
commit 56ba8feed6
2 changed files with 13 additions and 15 deletions

View file

@ -856,7 +856,7 @@ mod tests {
#[test] fn parse_stmt_1 () { #[test] fn parse_stmt_1 () {
assert!(string_to_stmt("b;".to_string()) == assert!(string_to_stmt("b;".to_string()) ==
P(Spanned{ Some(P(Spanned{
node: ast::StmtExpr(P(ast::Expr { node: ast::StmtExpr(P(ast::Expr {
id: ast::DUMMY_NODE_ID, id: ast::DUMMY_NODE_ID,
node: ast::ExprPath(None, ast::Path { node: ast::ExprPath(None, ast::Path {
@ -871,7 +871,7 @@ mod tests {
}), }),
span: sp(0,1)}), span: sp(0,1)}),
ast::DUMMY_NODE_ID), ast::DUMMY_NODE_ID),
span: sp(0,1)})) span: sp(0,1)})))
} }

View file

@ -9,7 +9,7 @@
// except according to those terms. // except according to those terms.
use ast; use ast;
use parse::{ParseSess,filemap_to_tts}; use parse::{ParseSess,PResult,filemap_to_tts};
use parse::new_parser_from_source_str; use parse::new_parser_from_source_str;
use parse::parser::Parser; use parse::parser::Parser;
use parse::token; use parse::token;
@ -31,11 +31,11 @@ pub fn string_to_parser<'a>(ps: &'a ParseSess, source_str: String) -> Parser<'a>
} }
fn with_error_checking_parse<T, F>(s: String, f: F) -> T where fn with_error_checking_parse<T, F>(s: String, f: F) -> T where
F: FnOnce(&mut Parser) -> T, F: FnOnce(&mut Parser) -> PResult<T>,
{ {
let ps = ParseSess::new(); let ps = ParseSess::new();
let mut p = string_to_parser(&ps, s); let mut p = string_to_parser(&ps, s);
let x = f(&mut p); let x = panictry!(f(&mut p));
p.abort_if_errors(); p.abort_if_errors();
x x
} }
@ -43,39 +43,37 @@ fn with_error_checking_parse<T, F>(s: String, f: F) -> T where
/// Parse a string, return a crate. /// Parse a string, return a crate.
pub fn string_to_crate (source_str : String) -> ast::Crate { pub fn string_to_crate (source_str : String) -> ast::Crate {
with_error_checking_parse(source_str, |p| { with_error_checking_parse(source_str, |p| {
panictry!(p.parse_crate_mod()) p.parse_crate_mod()
}) })
} }
/// Parse a string, return an expr /// Parse a string, return an expr
pub fn string_to_expr (source_str : String) -> P<ast::Expr> { pub fn string_to_expr (source_str : String) -> P<ast::Expr> {
with_error_checking_parse(source_str, |p| { with_error_checking_parse(source_str, |p| {
p.parse_expr() p.parse_expr_nopanic()
}) })
} }
/// Parse a string, return an item /// Parse a string, return an item
pub fn string_to_item (source_str : String) -> Option<P<ast::Item>> { pub fn string_to_item (source_str : String) -> Option<P<ast::Item>> {
with_error_checking_parse(source_str, |p| { with_error_checking_parse(source_str, |p| {
p.parse_item() p.parse_item_nopanic()
}) })
} }
/// Parse a string, return a stmt /// Parse a string, return a stmt
pub fn string_to_stmt(source_str : String) -> P<ast::Stmt> { pub fn string_to_stmt(source_str : String) -> Option<P<ast::Stmt>> {
with_error_checking_parse(source_str, |p| { with_error_checking_parse(source_str, |p| {
p.parse_stmt().unwrap() p.parse_stmt_nopanic()
}) })
} }
/// Parse a string, return a pat. Uses "irrefutable"... which doesn't /// Parse a string, return a pat. Uses "irrefutable"... which doesn't
/// (currently) affect parsing. /// (currently) affect parsing.
pub fn string_to_pat(source_str: String) -> P<ast::Pat> { pub fn string_to_pat(source_str: String) -> P<ast::Pat> {
// Binding `sess` and `parser` works around dropck-injected with_error_checking_parse(source_str, |p| {
// region-inference issues; see #25212, #22323, #22321. p.parse_pat_nopanic()
let sess = ParseSess::new(); })
let mut parser = string_to_parser(&sess, source_str);
parser.parse_pat()
} }
/// Convert a vector of strings to a vector of ast::Ident's /// Convert a vector of strings to a vector of ast::Ident's