• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 extern crate syntax;
2 extern crate syntax_pos;
3 
4 use syntax::ast;
5 use syntax::parse;
6 use syntax::ptr::P;
7 use syntax::sess::ParseSess;
8 use syntax::source_map::FilePathMapping;
9 use syntax_pos::FileName;
10 
11 use std::panic;
12 
libsyntax_expr(input: &str) -> Option<P<ast::Expr>>13 pub fn libsyntax_expr(input: &str) -> Option<P<ast::Expr>> {
14     match panic::catch_unwind(|| {
15         let sess = ParseSess::new(FilePathMapping::empty());
16         sess.span_diagnostic.set_continue_after_error(false);
17         let e = parse::new_parser_from_source_str(
18             &sess,
19             FileName::Custom("test_precedence".to_string()),
20             input.to_string(),
21         )
22         .parse_expr();
23         match e {
24             Ok(expr) => Some(expr),
25             Err(mut diagnostic) => {
26                 diagnostic.emit();
27                 None
28             }
29         }
30     }) {
31         Ok(Some(e)) => Some(e),
32         Ok(None) => None,
33         Err(_) => {
34             errorf!("libsyntax panicked\n");
35             None
36         }
37     }
38 }
39 
syn_expr(input: &str) -> Option<syn::Expr>40 pub fn syn_expr(input: &str) -> Option<syn::Expr> {
41     match syn::parse_str(input) {
42         Ok(e) => Some(e),
43         Err(msg) => {
44             errorf!("syn failed to parse\n{:?}\n", msg);
45             None
46         }
47     }
48 }
49