Skip to content

Commit 1d0b4c4

Browse files
committed
---
yaml --- r: 1757 b: refs/heads/master c: 84c0d86 h: refs/heads/master i: 1755: 488311c v: v3
1 parent e930075 commit 1d0b4c4

File tree

3 files changed

+31
-11
lines changed

3 files changed

+31
-11
lines changed

[refs]

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 86d05655b48af5aa2bea7c0e191d0cbe22810e29
2+
refs/heads/master: 84c0d8638ebf766cc4f6e442bbd4f01c5810795a

trunk/src/comp/front/creader.rs

+15-5
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,16 @@ impure fn parse_ty(@pstate st, str_def sd) -> @ty.t {
5959
cname=option.none[str]);
6060
}
6161

62+
impure fn parse_mt(@pstate st, str_def sd) -> ty.mt {
63+
auto mut;
64+
alt (peek(st)) {
65+
case ('m') {next(st); mut = ast.mut;}
66+
case ('?') {next(st); mut = ast.maybe_mut;}
67+
case (_) {mut=ast.imm;}
68+
}
69+
ret rec(ty=parse_ty(st, sd), mut=mut);
70+
}
71+
6272
impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
6373
alt (next(st)) {
6474
case ('n') {ret ty.ty_nil;}
@@ -93,15 +103,15 @@ impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
93103
st.pos = st.pos + 1u;
94104
ret ty.ty_tag(sd(def), params);
95105
}
96-
case ('@') {ret ty.ty_box(parse_ty(st, sd));}
97-
case ('V') {ret ty.ty_vec(parse_ty(st, sd));}
106+
case ('@') {ret ty.ty_box(parse_mt(st, sd));}
107+
case ('V') {ret ty.ty_vec(parse_mt(st, sd));}
98108
case ('P') {ret ty.ty_port(parse_ty(st, sd));}
99109
case ('C') {ret ty.ty_chan(parse_ty(st, sd));}
100110
case ('T') {
101111
check(next(st) == '[');
102-
let vec[@ty.t] params = vec();
112+
let vec[ty.mt] params = vec();
103113
while (peek(st) != ']') {
104-
params = _vec.push[@ty.t](params, parse_ty(st, sd));
114+
params = _vec.push[ty.mt](params, parse_mt(st, sd));
105115
}
106116
st.pos = st.pos + 1u;
107117
ret ty.ty_tup(params);
@@ -114,7 +124,7 @@ impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
114124
while (peek(st) != '=') {name += _str.from_char(next(st));}
115125
st.pos = st.pos + 1u;
116126
fields = _vec.push[ty.field]
117-
(fields, rec(ident=name, ty=parse_ty(st, sd)));
127+
(fields, rec(ident=name, mt=parse_mt(st, sd)));
118128
}
119129
st.pos = st.pos + 1u;
120130
ret ty.ty_rec(fields);

trunk/src/comp/middle/metadata.rs

+15-5
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,16 @@ fn ty_str(@ty.t t, def_str ds) -> str {
2626
ret sty_str(t.struct, ds);
2727
}
2828

29+
fn mt_str(&ty.mt mt, def_str ds) -> str {
30+
auto mut_str;
31+
alt (mt.mut) {
32+
case (ast.imm) { mut_str = ""; }
33+
case (ast.mut) { mut_str = "m"; }
34+
case (ast.maybe_mut) { mut_str = "?"; }
35+
}
36+
ret mut_str + ty_str(mt.ty, ds);
37+
}
38+
2939
fn sty_str(ty.sty st, def_str ds) -> str {
3040
alt (st) {
3141
case (ty.ty_nil) {ret "n";}
@@ -53,20 +63,20 @@ fn sty_str(ty.sty st, def_str ds) -> str {
5363
for (@ty.t t in tys) {acc += ty_str(t, ds);}
5464
ret acc + "]";
5565
}
56-
case (ty.ty_box(?t)) {ret "@" + ty_str(t, ds);}
57-
case (ty.ty_vec(?t)) {ret "V" + ty_str(t, ds);}
66+
case (ty.ty_box(?mt)) {ret "@" + mt_str(mt, ds);}
67+
case (ty.ty_vec(?mt)) {ret "V" + mt_str(mt, ds);}
5868
case (ty.ty_port(?t)) {ret "P" + ty_str(t, ds);}
5969
case (ty.ty_chan(?t)) {ret "C" + ty_str(t, ds);}
60-
case (ty.ty_tup(?tys)) {
70+
case (ty.ty_tup(?mts)) {
6171
auto acc = "T[";
62-
for (@ty.t t in tys) {acc += ty_str(t, ds);}
72+
for (ty.mt mt in mts) {acc += mt_str(mt, ds);}
6373
ret acc + "]";
6474
}
6575
case (ty.ty_rec(?fields)) {
6676
auto acc = "R[";
6777
for (ty.field field in fields) {
6878
acc += field.ident + "=";
69-
acc += ty_str(field.ty, ds);
79+
acc += mt_str(field.mt, ds);
7080
}
7181
ret acc + "]";
7282
}

0 commit comments

Comments
 (0)