about summary refs log tree commit diff
path: root/src/comp/front
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2011-03-04 07:22:43 +0100
committerGraydon Hoare <graydon@mozilla.com>2011-03-07 12:58:08 -0800
commit0624f9db4aeaa5681941750c3a1a17ca5fbb7e72 (patch)
tree91844d79c0c5614ce660c3c20f1c67eaef2d5021 /src/comp/front
parent8047957b9981c4f3539ba3d307a65e0255477e81 (diff)
downloadrust-0624f9db4aeaa5681941750c3a1a17ca5fbb7e72.tar.gz
rust-0624f9db4aeaa5681941750c3a1a17ca5fbb7e72.zip
Add a pretty-printer
Adds a -pp option to the compiler which will cause it to simply
pretty-print the given file.
Diffstat (limited to 'src/comp/front')
-rw-r--r--src/comp/front/ast.rs36
-rw-r--r--src/comp/front/parser.rs1
-rw-r--r--src/comp/front/pretty.rs2
3 files changed, 39 insertions, 0 deletions
diff --git a/src/comp/front/ast.rs b/src/comp/front/ast.rs
index ed1e21142c5..d45260f3ad1 100644
--- a/src/comp/front/ast.rs
+++ b/src/comp/front/ast.rs
@@ -122,6 +122,31 @@ tag binop {
     gt;
 }
 
+fn binop_to_str(binop op) -> str {
+    alt (op) {
+        case (add) {ret "+";}
+        case (sub) {ret "-";}
+        case (mul) {ret "*";}
+        case (div) {ret "/";}
+        case (rem) {ret "%";}
+        case (and) {ret "&&";}
+        case (or) {ret "||";}
+        case (bitxor) {ret "^";}
+        case (bitand) {ret "&";}
+        case (bitor) {ret "|";}
+        case (lsl) {ret "<<";}
+        case (lsr) {ret ">>";}
+        case (asr) {ret ">>>";}
+        case (eq) {ret "==";}
+        case (lt) {ret "<";}
+        case (le) {ret "<=";}
+        case (ne) {ret "!=";}
+        case (ge) {ret ">=";}
+        case (gt) {ret ">";}
+    }
+}
+
+
 tag unop {
     box;
     deref;
@@ -131,6 +156,17 @@ tag unop {
     _mutable;
 }
 
+fn unop_to_str(unop op) -> str {
+    alt (op) {
+        case (box) {ret "@";}
+        case (deref) {ret "*";}
+        case (bitnot) {ret "~";}
+        case (not) {ret "!";}
+        case (neg) {ret "-";}
+        case (_mutable) {ret "mutable";}
+    }
+}
+
 tag mode {
     val;
     alias;
diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs
index 6f3111c74d0..f60ff36b65f 100644
--- a/src/comp/front/parser.rs
+++ b/src/comp/front/parser.rs
@@ -983,6 +983,7 @@ impure fn parse_prefix_expr(parser p) -> @ast.expr {
 
 type op_spec = rec(token.token tok, ast.binop op, int prec);
 
+// FIXME make this a const, don't store it in parser state
 fn prec_table() -> vec[op_spec] {
     ret vec(rec(tok=token.BINOP(token.STAR), op=ast.mul, prec=11),
             rec(tok=token.BINOP(token.SLASH), op=ast.div, prec=11),
diff --git a/src/comp/front/pretty.rs b/src/comp/front/pretty.rs
index 267763e3997..2fd58126cee 100644
--- a/src/comp/front/pretty.rs
+++ b/src/comp/front/pretty.rs
@@ -5,6 +5,8 @@ import std._vec;
 
 export print_expr;
 
+// FIXME this is superseded by ../pretty/pprust.rs. can it be dropped?
+
 fn unknown() -> str {
     ret "<unknown ast node>";
 }