aboutsummaryrefslogtreecommitdiff
path: root/src/comp/front
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2010-11-29 15:42:09 -0800
committerGraydon Hoare <[email protected]>2010-11-29 15:42:09 -0800
commite6b7f763853d0d847288111e7050841e05a885f4 (patch)
tree50d5ac8828cf4c5889e944848bee55229e810430 /src/comp/front
parentChange mutability into a type constructor. (diff)
downloadrust-e6b7f763853d0d847288111e7050841e05a885f4.tar.xz
rust-e6b7f763853d0d847288111e7050841e05a885f4.zip
Add ty_rec and parse it.
Diffstat (limited to 'src/comp/front')
-rw-r--r--src/comp/front/ast.rs1
-rw-r--r--src/comp/front/parser.rs17
2 files changed, 18 insertions, 0 deletions
diff --git a/src/comp/front/ast.rs b/src/comp/front/ast.rs
index 3b1a31b8..f90f8df6 100644
--- a/src/comp/front/ast.rs
+++ b/src/comp/front/ast.rs
@@ -153,6 +153,7 @@ tag ty_ {
ty_box(@ty);
ty_vec(@ty);
ty_tup(vec[@ty]);
+ ty_rec(vec[tup(ident,@ty)]);
ty_fn(vec[rec(mode mode, @ty ty)], @ty); // TODO: effect
ty_path(path, option.t[def]);
ty_mutable(@ty);
diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs
index 6b0c2cc8..f0014f6b 100644
--- a/src/comp/front/parser.rs
+++ b/src/comp/front/parser.rs
@@ -187,6 +187,23 @@ impure fn parse_ty(parser p) -> @ast.ty {
t = ast.ty_tup(elems.node);
}
+ case (token.REC) {
+ p.bump();
+ impure fn parse_field(parser p) -> tup(ast.ident, @ast.ty) {
+ auto ty = parse_ty(p);
+ auto id = parse_ident(p);
+ ret tup(id,ty);
+ }
+ auto f = parse_field; // FIXME: trans_const_lval bug
+ auto elems =
+ parse_seq[tup(ast.ident, @ast.ty)](token.LPAREN,
+ token.RPAREN,
+ some(token.COMMA),
+ f, p);
+ hi = p.get_span();
+ t = ast.ty_rec(elems.node);
+ }
+
case (token.MUTABLE) {
p.bump();
auto t0 = parse_ty(p);