Mercurial > python-compiler.rs
diff src/ast_dump.rs @ 6:6f2bf13f4cb5
Add ast.While and ast.Break.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Tue, 31 May 2016 04:22:35 +0100 |
parents | ddf372373a77 |
children | 680d15073f55 |
line wrap: on
line diff
--- a/src/ast_dump.rs +++ b/src/ast_dump.rs @@ -19,6 +19,7 @@ impl BinOp { BinOp::BinMult => "*", BinOp::BinEq => "==", BinOp::BinLt => "<", + BinOp::BinGt => ">", BinOp::Sub => "-", BinOp::Div => "/", BinOp::Error => "BinOp::Error" @@ -126,6 +127,23 @@ impl Statement { format!("{}\n{}else:\n{}", statements.join("\n"), make_indent(indent), orelse_.join("\n")) } }), + Statement::While(test, body, orelse) => format!("{}while {}:\n{}", make_indent(indent), test.to_string(), { + let mut statements = vec!(); + for arg in body { + statements.push(arg.to_string(indent + 1)); + } + + let mut orelse_ = vec!(); + for arg in orelse { + orelse_.push(arg.to_string(indent + 1)); + } + + if orelse_.is_empty() { + statements.join("\n") + } else { + format!("{}\n{}else:\n{}", statements.join("\n"), make_indent(indent), orelse_.join("\n")) + } + }), Statement::For(target, iter, body, orelse) => format!("{}for {} in {}:\n{}", make_indent(indent), target.to_string(), iter.to_string(), { let mut statements = vec!(); for arg in body { @@ -160,6 +178,7 @@ impl Statement { exprs.join(", ") }), Statement::Expr(expr) => format!("{}{}", make_indent(indent), expr.to_string()), + Statement::Break => format!("{}break", make_indent(indent)), Statement::Error => format!("{}Statement::Error", make_indent(indent)) } }