diff --git a/examples/wip.rs b/examples/wip.rs index db7ffeddc7f84c3eccbcc5ca0bb07a5c942344e2..80b5c89b4f376892b430a771bc22c3d6b5369f45 100644 --- a/examples/wip.rs +++ b/examples/wip.rs @@ -1,9 +1,10 @@ fn main() { - // {} + {} let mut a = 5; a = 5; - // a = { 7 } + a = { 7 }; + a = if true { 7 } else { 5 } } fn b(x: i32) -> i32 { diff --git a/src/ast.rs b/src/ast.rs index 857e27218662247d41d4fae241e6b1a1387d7833..a95542c63a363de2928a982b6bb7db3846070f14 100644 --- a/src/ast.rs +++ b/src/ast.rs @@ -218,8 +218,16 @@ impl Stmts { // set tab write!(fmt, "\n{}", " ".repeat(indent + 4))?; s.ifmt(fmt, indent + 4)?; - if i < len - 1 || self.ret { - write!(fmt, ";")?; + + if i < len - 1 { + match s { + Stmt::Block(_) | Stmt::If(_, _, _) => (), + _ => write!(fmt, ";")?, + } + } else { + if self.ret { + write!(fmt, ";")?; + } } } write!(fmt, "\n{}}}", " ".repeat(indent)) @@ -305,6 +313,7 @@ impl Display for Type { } } } + impl Display for Expr { fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { use self::Expr::*; @@ -325,6 +334,26 @@ impl Display for Expr { } } +impl Expr { + fn ifmt(&self, fmt: &mut Formatter, indent: i32) -> Result<(), Error> { + use self::Expr::*; + match *self { + Num(n) => write!(fmt, "{}", n), + Bool(b) => write!(fmt, "{}", b), + Id(ref s) => write!(fmt, "{}", s), + As(ref e, ref t) => write!(fmt, "{} as {}", e, t), + Infix(ref l, ref op, ref r) => write!(fmt, "({} {} {})", l, op, r), + Prefix(ref op, ref r) => write!(fmt, "({} {})", op, r), + Ref(ref e) => write!(fmt, "&{}", e), + RefMut(ref e) => write!(fmt, "&mut {}", e), + DeRef(ref e) => write!(fmt, "*{}", e), + Call(ref s, ref exprs) => write!(fmt, "{}{}", s, exprs), + Block(ref s) => write!(fmt, "{}", s), + Stmt(ref s) => write!(fmt, "{}", s), + } + } +} + impl Display for Op { fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error> { use self::Op::*;