about summary refs log tree commit diff
path: root/src/comp/syntax
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2011-08-15 11:40:26 +0200
committerMarijn Haverbeke <marijnh@gmail.com>2011-08-15 11:40:38 +0200
commit9538b0036358acc1e1d9ca8b00128bc0fa9940b2 (patch)
treeb73c9feabcdcb66f6cc318e7ce03727c9db4af6f /src/comp/syntax
parent25b85df3704de79467dafa30ed185e8d94cd46c7 (diff)
downloadrust-9538b0036358acc1e1d9ca8b00128bc0fa9940b2.tar.gz
rust-9538b0036358acc1e1d9ca8b00128bc0fa9940b2.zip
Tuple types back, not constructable yet
Diffstat (limited to 'src/comp/syntax')
-rw-r--r--src/comp/syntax/ast.rs2
-rw-r--r--src/comp/syntax/fold.rs7
-rw-r--r--src/comp/syntax/parse/parser.rs1
-rw-r--r--src/comp/syntax/print/pprust.rs18
-rw-r--r--src/comp/syntax/visit.rs6
5 files changed, 34 insertions, 0 deletions
diff --git a/src/comp/syntax/ast.rs b/src/comp/syntax/ast.rs
index 4c82771f69d..4052c5cc1d8 100644
--- a/src/comp/syntax/ast.rs
+++ b/src/comp/syntax/ast.rs
@@ -292,6 +292,7 @@ tag expr_ {
     expr_vec([@expr], mutability, seq_kind);
     expr_rec([field], option::t[@expr]);
     expr_call(@expr, [@expr]);
+    expr_tup([elt]);
     expr_self_method(ident);
     expr_bind(@expr, [option::t[@expr]]);
     expr_spawn(spawn_dom, option::t[str], @expr, [@expr]);
@@ -447,6 +448,7 @@ tag ty_ {
     ty_rec([ty_field]);
     ty_fn(proto, [ty_arg], @ty, controlflow, [@constr]);
     ty_obj([ty_method]);
+    ty_tup([mt]);
     ty_path(path, node_id);
     ty_type;
     ty_constr(@ty, [@ty_constr]);
diff --git a/src/comp/syntax/fold.rs b/src/comp/syntax/fold.rs
index aa0f45be997..4819e893bdb 100644
--- a/src/comp/syntax/fold.rs
+++ b/src/comp/syntax/fold.rs
@@ -338,6 +338,13 @@ fn noop_fold_expr(e: &expr_, fld: ast_fold) -> expr_ {
             expr_rec(ivec::map(fold_field, fields),
                      option::map(fld.fold_expr, maybe_expr))
           }
+          expr_tup(elts) {
+            let elts_ = ~[];
+            for elt in elts {
+                elts_ += ~[{mut: elt.mut, expr: fld.fold_expr(elt.expr)}];
+            }
+            expr_tup(elts_)
+          }
           expr_call(f, args) {
             expr_call(fld.fold_expr(f), fld.map_exprs(fld.fold_expr, args))
           }
diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs
index 39843072c2a..58c7b618ec3 100644
--- a/src/comp/syntax/parse/parser.rs
+++ b/src/comp/syntax/parse/parser.rs
@@ -1569,6 +1569,7 @@ fn stmt_ends_with_semi(stmt: &ast::stmt) -> bool {
         ret alt e.node {
               ast::expr_vec(_, _, _) { true }
               ast::expr_rec(_, _) { true }
+              ast::expr_tup(_) { true }
               ast::expr_call(_, _) { true }
               ast::expr_self_method(_) { false }
               ast::expr_bind(_, _) { true }
diff --git a/src/comp/syntax/print/pprust.rs b/src/comp/syntax/print/pprust.rs
index 45fd48bcd86..deae225a221 100644
--- a/src/comp/syntax/print/pprust.rs
+++ b/src/comp/syntax/print/pprust.rs
@@ -322,6 +322,11 @@ fn print_type(s: &ps, ty: &ast::ty) {
         commasep_cmnt(s, consistent, fields, print_field, get_span);
         word(s.s, "}");
       }
+      ast::ty_tup(elts) {
+          popen(s);
+          commasep(s, inconsistent, elts, print_mt);
+          pclose(s);
+      }
       ast::ty_fn(proto, inputs, output, cf, constrs) {
         print_ty_fn(s, proto, none[str], inputs, output, cf, constrs);
       }
@@ -713,6 +718,7 @@ fn print_expr(s: &ps, expr: &@ast::expr) {
         alt kind {
           ast::sk_rc. { word(s.s, "["); }
           ast::sk_unique. { word(s.s, "~["); }
+
         }
         if mut == ast::mut {
             word(s.s, "mutable");
@@ -746,6 +752,18 @@ fn print_expr(s: &ps, expr: &@ast::expr) {
         }
         word(s.s, "}");
       }
+      ast::expr_tup(exprs) {
+        fn printElt(s: &ps, elt: &ast::elt) {
+            ibox(s, indent_unit);
+            if elt.mut == ast::mut { word_nbsp(s, "mutable"); }
+            print_expr(s, elt.expr);
+            end(s);
+        }
+        fn get_span(elt: &ast::elt) -> codemap::span { ret elt.expr.span; }
+        popen(s);
+        commasep_cmnt(s, inconsistent, exprs, printElt, get_span);
+        pclose(s);
+      }
       ast::expr_call(func, args) {
         print_expr_parens_if_unary(s, func);
         popen(s);
diff --git a/src/comp/syntax/visit.rs b/src/comp/syntax/visit.rs
index f7e7c3b352d..4b1f709a9fc 100644
--- a/src/comp/syntax/visit.rs
+++ b/src/comp/syntax/visit.rs
@@ -133,6 +133,9 @@ fn visit_ty[E](t: &@ty, e: &E, v: &vt[E]) {
       ty_rec(flds) {
         for f: ty_field  in flds { v.visit_ty(f.node.mt.ty, e, v); }
       }
+      ty_tup(mts) {
+        for mt in mts { v.visit_ty(mt.ty, e, v); }
+      }
       ty_fn(_, args, out, _, constrs) {
         for a: ty_arg  in args { v.visit_ty(a.node.ty, e, v); }
         for c: @constr  in constrs {
@@ -244,6 +247,9 @@ fn visit_expr[E](ex: &@expr, e: &E, v: &vt[E]) {
         for f: field  in flds { v.visit_expr(f.node.expr, e, v); }
         visit_expr_opt(base, e, v);
       }
+      expr_tup(elts) {
+        for el in elts { v.visit_expr(el.expr, e, v); }
+      }
       expr_call(callee, args) {
         v.visit_expr(callee, e, v);
         visit_exprs(args, e, v);