@@ -28,6 +28,7 @@ import std::option;
28
28
import std:: option:: some;
29
29
import std:: option:: none;
30
30
import std:: str;
31
+ import std:: vec;
31
32
32
33
export resolve_crate;
33
34
export def_map;
@@ -97,7 +98,7 @@ type glob_imp_def = tup(def, @ast::view_item);
97
98
type indexed_mod =
98
99
rec ( option:: t[ ast:: _mod ] m ,
99
100
mod_index index,
100
- mutable glob_imp_def [ ] glob_imports,
101
+ mutable vec [ glob_imp_def ] glob_imports ,
101
102
hashmap[ str, import_state] glob_imported_names ) ;
102
103
103
104
@@ -113,7 +114,7 @@ type env =
113
114
ast_map:: map ast_map ,
114
115
hashmap[ ast:: node_id, import_state] imports ,
115
116
hashmap[ ast:: node_id, @indexed_mod] mod_map ,
116
- hashmap[ def_id, ident [ ] ] ext_map ,
117
+ hashmap[ def_id, vec [ ident ] ] ext_map ,
117
118
ext_hash ext_cache ,
118
119
session sess) ;
119
120
@@ -133,7 +134,7 @@ fn resolve_crate(session sess, &ast_map::map amap, @ast::crate crate) ->
133
134
ast_map=amap,
134
135
imports=new_int_hash[ import_state] ( ) ,
135
136
mod_map=new_int_hash[ @indexed_mod] ( ) ,
136
- ext_map=new_def_hash[ ident [ ] ] ( ) ,
137
+ ext_map=new_def_hash[ vec [ ident ] ] ( ) ,
137
138
ext_cache=new_ext_hash ( ) ,
138
139
sess=sess) ;
139
140
map_crate ( e, crate ) ;
@@ -160,7 +161,7 @@ fn map_crate(&@env e, &@ast::crate c) {
160
161
e. mod_map . insert ( -1 ,
161
162
@rec ( m=some ( c. node . module ) ,
162
163
index=index_mod ( c. node . module ) ,
163
- mutable glob_imports=~ [ ] ,
164
+ mutable glob_imports=[ ] ,
164
165
glob_imported_names=new_str_hash[ import_state] ( ) ) ) ;
165
166
fn index_vi ( @env e , & @ast:: view_item i, & scopes sc, & vt[ scopes] v ) {
166
167
alt ( i. node ) {
@@ -178,15 +179,15 @@ fn map_crate(&@env e, &@ast::crate c) {
178
179
e. mod_map . insert ( i. id ,
179
180
@rec ( m=some ( md) ,
180
181
index=index_mod ( md) ,
181
- mutable glob_imports=~ [ ] ,
182
+ mutable glob_imports=[ ] ,
182
183
glob_imported_names=s) ) ;
183
184
}
184
185
case ( ast:: item_native_mod ( ?nmd) ) {
185
186
auto s = new_str_hash[ import_state] ( ) ;
186
187
e. mod_map . insert ( i. id ,
187
188
@rec ( m=none[ ast:: _mod] ,
188
189
index=index_nmod ( nmd) ,
189
- mutable glob_imports=~ [ ] ,
190
+ mutable glob_imports=[ ] ,
190
191
glob_imported_names=s) ) ;
191
192
}
192
193
case ( _) { }
@@ -223,7 +224,7 @@ fn map_crate(&@env e, &@ast::crate c) {
223
224
auto imp = follow_import ( * e, sc, path, vi. span ) ;
224
225
if ( option:: is_some ( imp) ) {
225
226
find_mod ( e, sc) . glob_imports +=
226
- ~ [ tup ( option:: get ( imp) , vi) ] ;
227
+ [ tup ( option:: get ( imp) , vi) ] ;
227
228
}
228
229
}
229
230
case ( _) { }
@@ -398,8 +399,14 @@ fn resolve_constr(@env e, node_id id, &@ast::constr c, &scopes sc,
398
399
if ( option:: is_some( new_def) ) {
399
400
alt ( option:: get( new_def) ) {
400
401
case ( ast:: def_fn( ?pred_id, ast:: pure_fn) ) {
402
+ // FIXME: Remove this vec->ivec conversion.
403
+ let ( @ast:: constr_arg_general[ uint] ) [ ] cag_ivec = ~[ ] ;
404
+ for ( @ast:: constr_arg_general[ uint] cag in c. node. args) {
405
+ cag_ivec += ~[ cag] ;
406
+ }
407
+
401
408
let ty:: constr_general[ uint] c_ =
402
- rec( path=c. node. path, args=c . node . args , id=pred_id) ;
409
+ rec( path=c. node. path, args=cag_ivec , id=pred_id) ;
403
410
let ty:: constr_def new_constr = respan( c. span, c_) ;
404
411
add_constr( e, id, new_constr) ;
405
412
}
@@ -877,7 +884,7 @@ fn lookup_in_mod(&env e, &def m, &span sp, &ident name, namespace ns,
877
884
878
885
auto cached = e. ext_cache. find( tup( defid, name, ns) ) ;
879
886
if ( !option:: is_none( cached) ) { ret cached; }
880
- auto path = ~ [ name] ;
887
+ auto path = [ name] ;
881
888
if ( defid. _1 != -1 ) { path = e. ext_map. get( defid) + path; }
882
889
auto fnd = lookup_external( e, defid. _0, path, ns) ;
883
890
if ( !option:: is_none( fnd) ) {
@@ -986,11 +993,11 @@ fn lookup_glob_in_mod(&env e, @indexed_mod info, &span sp, &ident id,
986
993
}
987
994
988
995
auto matches =
989
- ivec :: filter_map( bind lookup_in_mod_( e, _, sp, id, ns, dr) ,
990
- { info. glob_imports } ) ;
991
- if ( ivec :: len( matches) == 0 u) {
996
+ vec :: filter_map( bind lookup_in_mod_( e, _, sp, id, ns, dr) ,
997
+ { info. glob_imports } ) ;
998
+ if ( vec :: len( matches) == 0 u) {
992
999
ret none[ def] ;
993
- } else if ( ivec :: len( matches) == 1 u) {
1000
+ } else if ( vec :: len( matches) == 1 u) {
994
1001
ret some[ def] ( matches. ( 0 ) . _0) ;
995
1002
} else {
996
1003
for ( glob_imp_def match in matches) {
@@ -1152,13 +1159,9 @@ fn ns_for_def(def d) -> namespace {
1152
1159
} ;
1153
1160
}
1154
1161
1155
- fn lookup_external ( & env e, int cnum , & ident [ ] ids, namespace ns) ->
1162
+ fn lookup_external ( & env e, int cnum , vec [ ident ] ids , namespace ns) ->
1156
1163
option:: t [ def ] {
1157
- // FIXME: Remove this ivec->vec conversion.
1158
- auto ids_vec = [ ] ;
1159
- for ( ident i in ids ) { ids_vec += [ i] ; }
1160
-
1161
- for ( def d in csearch:: lookup_defs( e. sess. get_cstore( ) , cnum, ids_vec) ) {
1164
+ for ( def d in csearch:: lookup_defs( e. sess. get_cstore( ) , cnum, ids) ) {
1162
1165
e. ext_map . insert ( ast:: def_id_of_def ( d) , ids) ;
1163
1166
if ( ns == ns_for_def ( d) ) { ret some ( d) ; }
1164
1167
}
@@ -1278,13 +1281,13 @@ fn check_arm(@env e, &ast::arm a, &() x, &vt[()] v) {
1278
1281
walk_pat ( ch, a. pats . ( i) ) ;
1279
1282
// Ensure the bindings introduced in this pattern are the same as in
1280
1283
// the first pattern.
1281
- if ( ivec :: len ( ch. seen ) != ivec :: len ( seen0) ) {
1284
+ if ( vec :: len ( ch. seen ) != vec :: len ( seen0) ) {
1282
1285
e. sess . span_err ( a. pats . ( i) . span ,
1283
1286
"inconsistent number of bindings" ) ;
1284
1287
} else {
1285
1288
for ( ident name in ch. seen) {
1286
- if ( option:: is_none ( ivec :: find ( bind str:: eq ( name, _) ,
1287
- seen0) ) ) {
1289
+ if ( option:: is_none ( vec :: find ( bind str:: eq ( name, _) ,
1290
+ seen0) ) ) {
1288
1291
// Fight the alias checker
1289
1292
auto name_ = name;
1290
1293
e. sess . span_err
@@ -1345,10 +1348,10 @@ fn check_fn(&env e, &span sp, &ast::_fn f) {
1345
1348
ensure_unique_ivec ( e, sp, f. decl . inputs , arg_name, "argument" ) ;
1346
1349
}
1347
1350
1348
- type checker = @rec( mutable ident [ ] seen, str kind, session sess) ;
1351
+ type checker = @rec ( mutable vec [ ident ] seen , str kind , session sess) ;
1349
1352
1350
1353
fn checker ( & env e, str kind ) -> checker {
1351
- let ident [ ] seen = ~ [ ] ;
1354
+ let vec [ ident ] seen = [ ] ;
1352
1355
ret @rec( mutable seen=seen, kind=kind, sess=e. sess ) ;
1353
1356
}
1354
1357
@@ -1358,12 +1361,12 @@ fn add_name(&checker ch, &span sp, &ident name) {
1358
1361
ch. sess . span_fatal ( sp, "duplicate " + ch. kind + " name: " + name) ;
1359
1362
}
1360
1363
}
1361
- ch. seen += ~ [ name ] ;
1364
+ vec :: push ( ch. seen , name) ;
1362
1365
}
1363
1366
1364
1367
fn ident_id ( & ident i) -> ident { ret i; }
1365
1368
1366
- fn ensure_unique[ T ] ( & env e, & span sp, & T [ ] elts, fn( & T ) -> ident id,
1369
+ fn ensure_unique[ T ] ( & env e, & span sp, & vec [ T ] elts, fn ( & T ) -> ident id,
1367
1370
& str kind) {
1368
1371
auto ch = checker ( e, kind) ;
1369
1372
for ( T elt in elts) { add_name ( ch, sp, id ( elt) ) ; }
0 commit comments