Begin expression parsing
diff --git a/src/expr.rs b/src/expr.rs
index a66792d..df35554 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -334,6 +334,23 @@
ByValue(Mutability),
}
+#[cfg(feature = "parsing")]
+pub mod parsing {
+ use super::*;
+ use nom::multispace;
+
+ named!(pub expr -> Expr, alt!(
+ box_expr
+ ));
+
+ named!(box_expr -> Expr, do_parse!(
+ punct!("box") >>
+ multispace >>
+ inner: expr >>
+ (Expr::Box(Box::new(inner)))
+ ));
+}
+
#[cfg(feature = "printing")]
mod printing {
use super::*;
diff --git a/src/lib.rs b/src/lib.rs
index a9c8e4b..d7b7b10 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -149,7 +149,7 @@
use nom;
#[cfg(feature = "full")]
- use item;
+ use {expr, item};
pub fn parse_macro_input(input: &str) -> Result<MacroInput, String> {
unwrap("macro input", macro_input::parsing::macro_input, input)
@@ -160,6 +160,11 @@
unwrap("item", item::parsing::item, input)
}
+ #[cfg(feature = "full")]
+ pub fn parse_expr(input: &str) -> Result<Expr, String> {
+ unwrap("expression", expr::parsing::expr, input)
+ }
+
pub fn parse_type(input: &str) -> Result<Ty, String> {
unwrap("type", ty::parsing::ty, input)
}