Filling in some expression printers
diff --git a/src/expr.rs b/src/expr.rs
index e0cf9aa..ff2bac9 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -373,7 +373,8 @@
             expr_block
             |
             expr_path
-            // TODO: AddrOf
+            |
+            expr_addr_of
             |
             expr_break
             |
@@ -677,6 +678,13 @@
 
     named!(expr_path -> Expr, map!(qpath, |(qself, path)| Expr::Path(qself, path)));
 
+    named!(expr_addr_of -> Expr, do_parse!(
+        punct!("&") >>
+        mutability: mutability >>
+        expr: expr >>
+        (Expr::AddrOf(mutability, Box::new(expr)))
+    ));
+
     named!(pub block -> Block, do_parse!(
         punct!("{") >>
         stmts: within_block >>
@@ -808,11 +816,30 @@
                     op.to_tokens(tokens);
                     right.to_tokens(tokens);
                 }
-                Expr::Unary(_op, ref _expr) => unimplemented!(),
+                Expr::Unary(op, ref expr) => {
+                    op.to_tokens(tokens);
+                    expr.to_tokens(tokens);
+                }
                 Expr::Lit(ref lit) => lit.to_tokens(tokens),
-                Expr::Cast(ref _expr, ref _ty) => unimplemented!(),
-                Expr::Type(ref _expr, ref _ty) => unimplemented!(),
-                Expr::If(ref _cond, ref _then_block, ref _else_block) => unimplemented!(),
+                Expr::Cast(ref expr, ref ty) => {
+                    expr.to_tokens(tokens);
+                    tokens.append("as");
+                    ty.to_tokens(tokens);
+                }
+                Expr::Type(ref expr, ref ty) => {
+                    expr.to_tokens(tokens);
+                    tokens.append(":");
+                    ty.to_tokens(tokens);
+                }
+                Expr::If(ref cond, ref then_block, ref else_block) => {
+                    tokens.append("if");
+                    cond.to_tokens(tokens);
+                    then_block.to_tokens(tokens);
+                    if let Some(ref else_block) = *else_block {
+                        tokens.append("else");
+                        else_block.to_tokens(tokens);
+                    }
+                }
                 Expr::IfLet(ref _pat, ref _expr, ref _then_block, ref _else_block) => unimplemented!(),
                 Expr::While(ref _cond, ref _body, ref _label) => unimplemented!(),
                 Expr::WhileLet(ref _pat, ref _expr, ref _body, ref _label) => unimplemented!(),
@@ -895,9 +922,19 @@
                         segment.to_tokens(tokens);
                     }
                 }
-                Expr::AddrOf(_mutability, ref _expr) => unimplemented!(),
-                Expr::Break(ref _label) => unimplemented!(),
-                Expr::Continue(ref _label) => unimplemented!(),
+                Expr::AddrOf(mutability, ref expr) => {
+                    tokens.append("&");
+                    mutability.to_tokens(tokens);
+                    expr.to_tokens(tokens);
+                }
+                Expr::Break(ref opt_label) => {
+                    tokens.append("break");
+                    opt_label.to_tokens(tokens);
+                }
+                Expr::Continue(ref opt_label) => {
+                    tokens.append("continue");
+                    opt_label.to_tokens(tokens);
+                }
                 Expr::Ret(ref opt_expr) => {
                     tokens.append("return");
                     opt_expr.to_tokens(tokens);
@@ -910,7 +947,10 @@
                     expr.to_tokens(tokens);
                     tokens.append(")");
                 }
-                Expr::Try(ref _expr) => unimplemented!(),
+                Expr::Try(ref expr) => {
+                    expr.to_tokens(tokens);
+                    tokens.append("?");
+                }
             }
         }
     }
@@ -940,6 +980,16 @@
         }
     }
 
+    impl ToTokens for UnOp {
+        fn to_tokens(&self, tokens: &mut Tokens) {
+            match *self {
+                UnOp::Deref => tokens.append("*"),
+                UnOp::Not => tokens.append("!"),
+                UnOp::Neg => tokens.append("-"),
+            }
+        }
+    }
+
     impl ToTokens for Arm {
         fn to_tokens(&self, tokens: &mut Tokens) {
             for attr in &self.attrs {