diff options
| author | Marijn Haverbeke <marijnh@gmail.com> | 2011-08-15 11:40:26 +0200 |
|---|---|---|
| committer | Marijn Haverbeke <marijnh@gmail.com> | 2011-08-15 11:40:38 +0200 |
| commit | 9538b0036358acc1e1d9ca8b00128bc0fa9940b2 (patch) | |
| tree | b73c9feabcdcb66f6cc318e7ce03727c9db4af6f /src/comp/syntax | |
| parent | 25b85df3704de79467dafa30ed185e8d94cd46c7 (diff) | |
| download | rust-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.rs | 2 | ||||
| -rw-r--r-- | src/comp/syntax/fold.rs | 7 | ||||
| -rw-r--r-- | src/comp/syntax/parse/parser.rs | 1 | ||||
| -rw-r--r-- | src/comp/syntax/print/pprust.rs | 18 | ||||
| -rw-r--r-- | src/comp/syntax/visit.rs | 6 |
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); |
