diff options
| author | Graydon Hoare <graydon@mozilla.com> | 2011-08-15 15:35:40 -0700 |
|---|---|---|
| committer | Graydon Hoare <graydon@mozilla.com> | 2011-08-15 15:44:41 -0700 |
| commit | 814bf41d898cd0410873f6c05c03a2b34366bfde (patch) | |
| tree | c281eaf689a64894ca2ac50ab00d69db4394d570 /src/comp/syntax | |
| parent | 9ca8df93b318aa4dc721a187f1216ac7f3a6671b (diff) | |
| download | rust-814bf41d898cd0410873f6c05c03a2b34366bfde.tar.gz rust-814bf41d898cd0410873f6c05c03a2b34366bfde.zip | |
Add operator 'copy', translates as fall-through.
Diffstat (limited to 'src/comp/syntax')
| -rw-r--r-- | src/comp/syntax/ast.rs | 1 | ||||
| -rw-r--r-- | src/comp/syntax/fold.rs | 3 | ||||
| -rw-r--r-- | src/comp/syntax/parse/parser.rs | 5 | ||||
| -rw-r--r-- | src/comp/syntax/print/pprust.rs | 4 | ||||
| -rw-r--r-- | src/comp/syntax/visit.rs | 1 |
5 files changed, 14 insertions, 0 deletions
diff --git a/src/comp/syntax/ast.rs b/src/comp/syntax/ast.rs index b997b084e87..82ca1772c73 100644 --- a/src/comp/syntax/ast.rs +++ b/src/comp/syntax/ast.rs @@ -317,6 +317,7 @@ tag expr_ { * FIXME: many of these @exprs should be constrained with * is_lval once we have constrained types working. */ + expr_copy(@expr); expr_move(@expr, @expr); expr_assign(@expr, @expr); expr_swap(@expr, @expr); diff --git a/src/comp/syntax/fold.rs b/src/comp/syntax/fold.rs index 7e5bbf41493..806d72499aa 100644 --- a/src/comp/syntax/fold.rs +++ b/src/comp/syntax/fold.rs @@ -397,6 +397,9 @@ fn noop_fold_expr(e: &expr_, fld: ast_fold) -> expr_ { expr_move(el, er) { expr_move(fld.fold_expr(el), fld.fold_expr(er)) } + expr_copy(e) { + expr_copy(fld.fold_expr(e)) + } expr_assign(el, er) { expr_assign(fld.fold_expr(el), fld.fold_expr(er)) } diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs index 19f058d7ee2..86d61ba1f94 100644 --- a/src/comp/syntax/parse/parser.rs +++ b/src/comp/syntax/parse/parser.rs @@ -180,6 +180,7 @@ fn bad_expr_word_table() -> hashmap[str, ()] { words.insert("log_err", ()); words.insert("tag", ()); words.insert("obj", ()); + words.insert("copy", ()); ret words; } @@ -999,6 +1000,10 @@ fn parse_bottom_expr(p: &parser) -> @ast::expr { hi = e.span.hi; expect(p, token::RPAREN); ex = ast::expr_chan(e); + } else if (eat_word(p, "copy")) { + let e = parse_expr(p); + ex = ast::expr_copy(e); + hi = e.span.hi; } else if (eat_word(p, "self")) { log "parsing a self-call..."; expect(p, token::DOT); diff --git a/src/comp/syntax/print/pprust.rs b/src/comp/syntax/print/pprust.rs index 59781bdbfba..3835435777f 100644 --- a/src/comp/syntax/print/pprust.rs +++ b/src/comp/syntax/print/pprust.rs @@ -881,6 +881,10 @@ fn print_expr(s: &ps, expr: &@ast::expr) { ibox(s, 0u); print_block(s, blk); } + ast::expr_copy(e) { + word_space(s, "copy"); + print_expr(s, e); + } ast::expr_move(lhs, rhs) { print_expr(s, lhs); space(s.s); diff --git a/src/comp/syntax/visit.rs b/src/comp/syntax/visit.rs index e0a5bebd256..2f366621c28 100644 --- a/src/comp/syntax/visit.rs +++ b/src/comp/syntax/visit.rs @@ -299,6 +299,7 @@ fn visit_expr[E](ex: &@expr, e: &E, v: &vt[E]) { expr_fn(f) { v.visit_fn(f, ~[], ex.span, none, ex.id, e, v); } expr_block(b) { v.visit_block(b, e, v); } expr_assign(a, b) { v.visit_expr(b, e, v); v.visit_expr(a, e, v); } + expr_copy(a) { v.visit_expr(a, e, v); } expr_move(a, b) { v.visit_expr(b, e, v); v.visit_expr(a, e, v); } expr_swap(a, b) { v.visit_expr(a, e, v); v.visit_expr(b, e, v); } expr_assign_op(_, a, b) { |
