From dc3651604bb4768bb72e9148a37505d166d5c00d Mon Sep 17 00:00:00 2001
From: Per Lindgren <per.lindgren@ltu.se>
Date: Mon, 21 Sep 2020 22:29:20 +0200
Subject: [PATCH] move to new syntax, wip7 broken

---
 examples/wip.rs |  5 +++--
 src/ast.rs      | 33 +++++++++++++++++++++++++++++++--
 2 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/examples/wip.rs b/examples/wip.rs
index db7ffed..80b5c89 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 857e272..a95542c 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::*;
-- 
GitLab