@@ -59,6 +59,16 @@ impure fn parse_ty(@pstate st, str_def sd) -> @ty.t {
59
59
cname=option. none [ str] ) ;
60
60
}
61
61
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
+
62
72
impure fn parse_sty ( @pstate st , str_def sd) -> ty. sty {
63
73
alt ( next ( st) ) {
64
74
case ( 'n' ) { ret ty. ty_nil ; }
@@ -93,15 +103,15 @@ impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
93
103
st. pos = st. pos + 1 u;
94
104
ret ty. ty_tag ( sd ( def) , params) ;
95
105
}
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) ) ; }
98
108
case ( 'P' ) { ret ty. ty_port ( parse_ty ( st, sd) ) ; }
99
109
case ( 'C' ) { ret ty. ty_chan ( parse_ty ( st, sd) ) ; }
100
110
case ( 'T' ) {
101
111
check ( next ( st) == '[' ) ;
102
- let vec[ @ ty. t ] params = vec ( ) ;
112
+ let vec[ ty. mt ] params = vec ( ) ;
103
113
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) ) ;
105
115
}
106
116
st. pos = st. pos + 1 u;
107
117
ret ty. ty_tup ( params) ;
@@ -114,7 +124,7 @@ impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
114
124
while ( peek ( st) != '=' ) { name += _str. from_char ( next ( st) ) ; }
115
125
st. pos = st. pos + 1 u;
116
126
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) ) ) ;
118
128
}
119
129
st. pos = st. pos + 1 u;
120
130
ret ty. ty_rec ( fields) ;
0 commit comments