From 8d0ad20f74ddac5113ba693ed579018d8738de3b Mon Sep 17 00:00:00 2001 From: Chris Wong <lambda.fairy@gmail.com> Date: Fri, 1 Jan 2016 11:43:59 +1300 Subject: [PATCH] Update Rust --- maud_macros/src/lib.rs | 7 +++++-- maud_macros/src/parse.rs | 11 ++++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/maud_macros/src/lib.rs b/maud_macros/src/lib.rs index a5e9f53..87a4270 100644 --- a/maud_macros/src/lib.rs +++ b/maud_macros/src/lib.rs @@ -10,14 +10,17 @@ extern crate maud; use rustc_plugin::Registry; use syntax::ast::{Expr, TokenTree}; use syntax::codemap::{DUMMY_SP, Span}; +use syntax::errors::FatalError; use syntax::ext::base::{DummyResult, ExtCtxt, MacEager, MacResult}; -use syntax::parse::{token, PResult}; +use syntax::parse::token; use syntax::print::pprust; use syntax::ptr::P; mod parse; mod render; +pub type PResult<T> = Result<T, FatalError>; + fn html(cx: &mut ExtCtxt, sp: Span, mac_name: &str, args: &[TokenTree]) -> PResult<P<Expr>> { let (write, input) = try!(parse::split_comma(cx, sp, mac_name, args)); parse::parse(cx, sp, write, input) @@ -55,7 +58,7 @@ macro_rules! generate_debug_wrappers { { match $mac_name(cx, sp, concat!(stringify!($mac_name), "_debug"), args) { Ok(expr) => { - cx.span_note(sp, &format!("expansion:\n{}", + cx.span_warn(sp, &format!("expansion:\n{}", pprust::expr_to_string(&expr))); MacEager::expr(expr) }, diff --git a/maud_macros/src/parse.rs b/maud_macros/src/parse.rs index 10a44ad..03d110e 100644 --- a/maud_macros/src/parse.rs +++ b/maud_macros/src/parse.rs @@ -2,15 +2,16 @@ use std::mem; use syntax::ast::{Expr, ExprParen, Lit, Stmt, TokenTree}; use syntax::ext::quote::rt::ToTokens; use syntax::codemap::Span; -use syntax::errors::FatalError; +use syntax::errors::{DiagnosticBuilder, FatalError}; use syntax::ext::base::ExtCtxt; -use syntax::parse::{self, PResult}; +use syntax::parse; use syntax::parse::parser::Parser as RustParser; use syntax::parse::token::{BinOpToken, DelimToken, IdentStyle, Token}; use syntax::parse::token::keywords::Keyword; use syntax::ptr::P; use super::render::Renderer; +use super::PResult; macro_rules! error { ($cx:expr, $sp:expr, $msg:expr) => ({ @@ -110,12 +111,12 @@ impl<'cx, 'i> Parser<'cx, 'i> { } /// Constructs a Rust AST parser from the given token tree. - fn with_rust_parser<F, T>(&self, tts: Vec<TokenTree>, callback: F) -> T where - F: FnOnce(&mut RustParser<'cx>) -> T + fn with_rust_parser<F, T>(&self, tts: Vec<TokenTree>, callback: F) -> PResult<T> where + F: FnOnce(&mut RustParser<'cx>) -> Result<T, DiagnosticBuilder<'cx>> { let mut parser = parse::tts_to_parser(self.render.cx.parse_sess, tts, self.render.cx.cfg.clone()); - let result = callback(&mut parser); + let result = callback(&mut parser).map_err(|mut e| { e.emit(); FatalError }); // Make sure all tokens were consumed if parser.token != Token::Eof { let token = parser.this_token_to_string();