@@ -40,7 +40,7 @@ tag sty {
40
40
ty_str;
41
41
ty_box ( @ty) ;
42
42
ty_vec ( @ty) ;
43
- ty_tup ( vec[ tup ( mutability , @ty) ] ) ;
43
+ ty_tup ( vec[ @ty] ) ;
44
44
ty_fn ( vec[ arg] , @ty) ; // TODO: effect
45
45
ty_var ( int) ; // ephemeral type var
46
46
ty_local ( ast. def_id ) ; // type of a local var
@@ -66,16 +66,6 @@ type ty_getter = fn(ast.def_id) -> @ty;
66
66
// Error-reporting utility functions
67
67
68
68
fn ast_ty_to_str ( & @ast . ty ty) -> str {
69
- fn ast_tup_elem_to_str ( & tup( mutability, @ast. ty) elem ) -> str {
70
- auto s;
71
- if ( elem. _0 == ast. mut ) {
72
- s = "mutable " ;
73
- } else {
74
- s = "" ;
75
- }
76
-
77
- ret s + ast_ty_to_str ( elem. _1 ) ;
78
- }
79
69
80
70
fn ast_fn_input_to_str ( & rec( ast. mode mode, @ast. ty ty) input ) -> str {
81
71
auto s;
@@ -101,11 +91,9 @@ fn ast_ty_to_str(&@ast.ty ty) -> str {
101
91
case ( ast. ty_vec ( ?t) ) { s = "vec[" + ast_ty_to_str ( t) + "]" ; }
102
92
103
93
case ( ast. ty_tup ( ?elems) ) {
104
- auto f = ast_tup_elem_to_str ;
94
+ auto f = ast_ty_to_str ;
105
95
s = "tup(" ;
106
- s +=
107
- _str. connect ( _vec. map [ tup ( mutability, @ast. ty ) , str] ( f, elems) ,
108
- "," ) ;
96
+ s += _str. connect ( _vec. map [ @ast. ty , str] ( f, elems) , "," ) ;
109
97
s += ")" ;
110
98
}
111
99
@@ -153,17 +141,7 @@ fn path_to_str(&ast.path path) -> str {
153
141
ret _str. connect ( _vec. map [ ast. name , str] ( f, path) , "." ) ;
154
142
}
155
143
156
- fn ty_to_str ( @ty typ ) -> str {
157
- fn tup_elem_to_str ( & tup( mutability, @ty) elem) -> str {
158
- auto s;
159
- if ( elem. _0 == ast. mut ) {
160
- s = "mutable " ;
161
- } else {
162
- s = "";
163
- }
164
-
165
- ret s + ty_to_str ( elem . _1) ;
166
- }
144
+ fn ty_to_str ( & @ty typ ) -> str {
167
145
168
146
fn fn_input_to_str ( & rec( ast. mode mode, @ty ty) input) -> str {
169
147
auto s;
@@ -176,7 +154,11 @@ fn ty_to_str(@ty typ) -> str {
176
154
ret s + ty_to_str ( input . ty) ;
177
155
}
178
156
179
- auto s;
157
+ auto s = "" ;
158
+ if ( typ. mut == ast. mut ) {
159
+ s += "mutable " ;
160
+ }
161
+
180
162
alt ( typ. struct ) {
181
163
case ( ty_nil) { s = "()" ; }
182
164
case ( ty_bool) { s = "bool" ; }
@@ -189,8 +171,8 @@ fn ty_to_str(@ty typ) -> str {
189
171
case ( ty_vec ( ?t) ) { s = "vec[" + ty_to_str ( t) + "]" ; }
190
172
191
173
case ( ty_tup ( ?elems) ) {
192
- auto f = tup_elem_to_str ;
193
- auto strs = _vec. map [ tup ( mutability , @ty) , str ] ( f, elems) ;
174
+ auto f = ty_to_str ;
175
+ auto strs = _vec. map [ @ty, str] ( f, elems) ;
194
176
s = "tup(" + _str. connect ( strs, "," ) + ")" ;
195
177
}
196
178
@@ -234,9 +216,9 @@ fn ast_ty_to_ty(ty_getter getter, &@ast.ty ast_ty) -> @ty {
234
216
case ( ast. ty_box ( ?t) ) { sty = ty_box ( ast_ty_to_ty ( getter, t) ) ; }
235
217
case ( ast. ty_vec ( ?t) ) { sty = ty_vec ( ast_ty_to_ty ( getter, t) ) ; }
236
218
case ( ast. ty_tup ( ?fields) ) {
237
- let vec[ tup ( mutability , @ty) ] flds = vec ( ) ;
238
- for ( tup ( mutability , @ast. ty) field in fields) {
239
- flds += tup ( field . _0 , ast_ty_to_ty ( getter, field. _1 ) ) ;
219
+ let vec[ @ty] flds = vec ( ) ;
220
+ for ( @ast. ty field in fields) {
221
+ append [ @ty ] ( flds , ast_ty_to_ty ( getter, field) ) ;
240
222
}
241
223
sty = ty_tup ( flds) ;
242
224
}
@@ -710,10 +692,8 @@ fn unify(&fn_ctxt fcx, @ty expected, @ty actual) -> unify_result {
710
692
case ( ty_tup( ?expected_elems) ) {
711
693
alt ( actual. struct ) {
712
694
case ( ty_tup( ?actual_elems) ) {
713
- auto expected_len =
714
- _vec. len [ tup ( mutability, @ty) ] ( expected_elems) ;
715
- auto actual_len =
716
- _vec. len [ tup ( mutability, @ty) ] ( actual_elems) ;
695
+ auto expected_len = _vec. len [ @ty] ( expected_elems) ;
696
+ auto actual_len = _vec. len [ @ty] ( actual_elems) ;
717
697
if ( expected_len != actual_len) {
718
698
auto err = terr_tuple_size ( expected_len,
719
699
actual_len) ;
@@ -722,24 +702,23 @@ fn unify(&fn_ctxt fcx, @ty expected, @ty actual) -> unify_result {
722
702
723
703
// TODO: implement an iterator that can iterate over
724
704
// two arrays simultaneously.
725
- let vec[ tup ( mutability , @ty) ] result_elems = vec ( ) ;
705
+ let vec[ @ty] result_elems = vec ( ) ;
726
706
auto i = 0 u;
727
707
while ( i < expected_len) {
728
708
auto expected_elem = expected_elems. ( i) ;
729
709
auto actual_elem = actual_elems. ( i) ;
730
- if ( expected_elem. _0 != actual_elem. _0 ) {
710
+ if ( expected_elem. mut != actual_elem. mut ) {
731
711
auto err = terr_tuple_mutability;
732
712
ret ures_err( err, expected, actual) ;
733
713
}
734
714
735
715
auto result = unify_step ( fcx,
736
716
bindings,
737
- expected_elem. _1 ,
738
- actual_elem. _1 ) ;
717
+ expected_elem,
718
+ actual_elem) ;
739
719
alt ( result) {
740
720
case ( ures_ok ( ?rty) ) {
741
- result_elems += vec ( tup ( expected_elem. _0 ,
742
- rty) ) ;
721
+ append[ @ty] ( result_elems, rty) ;
743
722
}
744
723
case ( _) {
745
724
ret result;
@@ -1258,12 +1237,17 @@ fn check_expr(&fn_ctxt fcx, @ast.expr expr) -> @ast.expr {
1258
1237
1259
1238
case ( ast. expr_tup ( ?args, _) ) {
1260
1239
let vec[ tup ( mutability, @ast. expr ) ] args_1 = vec ( ) ;
1261
- let vec[ tup ( mutability , @ty) ] args_t = vec ( ) ;
1240
+ let vec[ @ty] args_t = vec ( ) ;
1262
1241
1263
1242
for ( tup( mutability, @ast. expr) arg in args) {
1264
1243
auto expr_1 = check_expr( fcx, arg. _1) ;
1265
1244
args_1 += tup( arg. _0, expr_1) ;
1266
- args_t += tup ( arg. _0 , expr_ty ( expr_1) ) ;
1245
+ if ( arg. _0 == ast. mut ) {
1246
+ append[ @ty] ( args_t, @rec( mut =ast. mut
1247
+ with * expr_ty( expr_1) ) ) ;
1248
+ } else {
1249
+ append[ @ty] ( args_t, expr_ty( expr_1) ) ;
1250
+ }
1267
1251
}
1268
1252
1269
1253
auto ann = ast. ann_type( plain_ty( ty_tup( args_t) ) ) ;
@@ -1278,11 +1262,11 @@ fn check_expr(&fn_ctxt fcx, @ast.expr expr) -> @ast.expr {
1278
1262
case ( ty_tup( ?args) ) {
1279
1263
let uint ix = field_num( fcx. ccx. sess,
1280
1264
expr. span, field) ;
1281
- if ( ix >= _vec. len [ tup ( mutability , @ty) ] ( args) ) {
1265
+ if ( ix >= _vec. len[ @ty] ( args) ) {
1282
1266
fcx. ccx. sess. span_err( expr. span,
1283
1267
"bad index on tuple" ) ;
1284
1268
}
1285
- auto ann = ast. ann_type ( args. ( ix) . _1 ) ;
1269
+ auto ann = ast. ann_type( args. ( ix) ) ;
1286
1270
ret @fold. respan[ ast. expr_] ( expr. span,
1287
1271
ast. expr_field( base_1,
1288
1272
field,
0 commit comments