More efficient try!() alternative

This commit is contained in:
David Tolnay
2018-04-21 10:51:32 -07:00
parent 382f3c2771
commit 6a8c39b2aa
4 changed files with 32 additions and 0 deletions
+25
View File
@@ -0,0 +1,25 @@
use quote::Tokens;
use proc_macro2::{Op, Spacing};
// None of our generated code requires the `From::from` error conversion
// performed by the standard library's `try!` macro. With this simplified macro
// we see a significant improvement in type checking and borrow checking time of
// the generated code and a slight improvement in binary size.
pub fn replacement() -> Tokens {
// Cannot pass `$expr` to `quote!` prior to Rust 1.17.0 so interpolate it.
let dollar = Op::new('$', Spacing::Alone);
quote! {
#[allow(unused_macros)]
macro_rules! try {
(#dollar __expr:expr) => {
match #dollar __expr {
_serde::export::Ok(__val) => __val,
_serde::export::Err(__err) => {
return _serde::export::Err(__err);
}
}
}
}
}
}