@@ -75,12 +75,12 @@ tag import_state {
75
75
option:: t<def>) ; /* module */
76
76
}
77
77
78
- type ext_hash = hashmap < { did: def_id , ident : str , ns : namespace } , def > ;
78
+ type ext_hash = hashmap < { did: def_id , ident : istr , ns : namespace } , def > ;
79
79
80
80
fn new_ext_hash ( ) -> ext_hash {
81
- type key = { did : def_id , ident: str , ns : namespace } ;
81
+ type key = { did : def_id , ident: istr , ns : namespace } ;
82
82
fn hash ( v : & key ) -> uint {
83
- ret str :: hash ( v. ident ) + util:: common:: hash_def ( v. did ) +
83
+ ret istr :: hash ( v. ident ) + util:: common:: hash_def ( v. did ) +
84
84
alt v. ns {
85
85
ns_value. { 1 u }
86
86
ns_type. { 2 u }
@@ -89,7 +89,7 @@ fn new_ext_hash() -> ext_hash {
89
89
}
90
90
fn eq ( v1 : & key , v2 : & key ) -> bool {
91
91
ret util:: common:: def_eq ( v1. did , v2. did ) &&
92
- str :: eq ( v1. ident , v2. ident ) && v1. ns == v2. ns ;
92
+ istr :: eq ( v1. ident , v2. ident ) && v1. ns == v2. ns ;
93
93
}
94
94
ret std:: map:: mk_hashmap :: < key , def > ( hash, eq) ;
95
95
}
@@ -128,7 +128,7 @@ type env =
128
128
mod_map : hashmap < ast:: node_id , @indexed_mod > ,
129
129
ext_map : hashmap < def_id , [ ident ] > ,
130
130
ext_cache : ext_hash ,
131
- mutable reported: [ { ident: str , sc : scope } ] ,
131
+ mutable reported: [ { ident: istr , sc : scope } ] ,
132
132
sess : session } ;
133
133
134
134
@@ -477,7 +477,8 @@ fn resolve_import(e: &env, defid: ast::def_id, name: &ast::ident,
477
477
alt lookup_in_scope ( e, sc, sp, ids[ 0 ] , ns_module) {
478
478
some ( dcur) { dcur }
479
479
none. {
480
- unresolved_err ( e, sc, sp, ids[ 0 ] , ns_name ( ns_module) ) ;
480
+ unresolved_err ( e, sc, sp, ids[ 0 ] ,
481
+ ns_name ( ns_module) ) ;
481
482
remove_if_unresolved ( e. imports , defid. node ) ;
482
483
ret ( )
483
484
}
@@ -499,7 +500,8 @@ fn resolve_import(e: &env, defid: ast::def_id, name: &ast::ident,
499
500
{
500
501
some ( dcur) { dcur }
501
502
none. {
502
- unresolved_err ( e, sc, sp, ids[ i] , ns_name ( ns_module) ) ;
503
+ unresolved_err ( e, sc, sp, ids[ i] ,
504
+ ns_name ( ns_module) ) ;
503
505
remove_if_unresolved ( e. imports , defid. node ) ;
504
506
ret ( ) // FIXME (issue #521)
505
507
}
@@ -512,7 +514,7 @@ fn resolve_import(e: &env, defid: ast::def_id, name: &ast::ident,
512
514
val : & option:: t < def > , typ : & option:: t < def > ,
513
515
md : & option:: t < def > ) {
514
516
if is_none ( val) && is_none ( typ) && is_none ( md) {
515
- unresolved_err ( e, sc, sp, name, "import" ) ;
517
+ unresolved_err ( e, sc, sp, name, ~ "import") ;
516
518
} else { e. imports . insert ( defid. node , resolved ( val, typ, md) ) ; }
517
519
}
518
520
fn remove_if_unresolved ( imports : hashmap < ast:: node_id , import_state > ,
@@ -532,15 +534,16 @@ fn resolve_import(e: &env, defid: ast::def_id, name: &ast::ident,
532
534
533
535
534
536
// Utilities
535
- fn ns_name ( ns : namespace ) -> str {
537
+ fn ns_name ( ns : namespace ) -> istr {
536
538
alt ns {
537
- ns_type. { ret "typename" ; }
538
- ns_value. { ret "name" ; }
539
- ns_module. { ret "modulename" ; }
539
+ ns_type. { ret ~ "typename"; }
540
+ ns_value. { ret ~ "name "; }
541
+ ns_module. { ret ~ "modulename"; }
540
542
}
541
543
}
542
544
543
- fn unresolved_err ( e : & env , sc : & scopes , sp : & span , name : & ident , kind : & str ) {
545
+ fn unresolved_err ( e : & env , sc : & scopes , sp : & span ,
546
+ name : & ident , kind : & istr ) {
544
547
fn find_fn_or_mod_scope ( sc : scopes ) -> scope {
545
548
while true {
546
549
alt sc {
@@ -558,20 +561,21 @@ fn unresolved_err(e: &env, sc: &scopes, sp: &span, name: &ident, kind: &str) {
558
561
fail;
559
562
}
560
563
let err_scope = find_fn_or_mod_scope ( sc) ;
561
- for rs: { ident: str , sc: scope} in e. reported {
562
- if str :: eq ( rs. ident , istr :: to_estr ( name) )
564
+ for rs: { ident: istr , sc: scope} in e. reported {
565
+ if istr :: eq ( rs. ident , name)
563
566
&& err_scope == rs. sc { ret; }
564
567
}
565
- e. reported += [ { ident: istr :: to_estr ( name) , sc: err_scope} ] ;
566
- e. sess . span_err ( sp, mk_unresolved_msg ( name, kind) ) ;
568
+ e. reported += [ { ident: name, sc: err_scope} ] ;
569
+ e. sess . span_err ( sp, istr :: to_estr ( mk_unresolved_msg ( name, kind) ) ) ;
567
570
}
568
571
569
- fn unresolved_fatal ( e : & env , sp : & span , id : & ident , kind : & str ) -> ! {
570
- e. sess . span_fatal ( sp, mk_unresolved_msg ( id, kind) ) ;
572
+ fn unresolved_fatal ( e : & env , sp : & span , id : & ident , kind : & istr ) -> ! {
573
+ e. sess . span_fatal ( sp, istr :: to_estr ( mk_unresolved_msg ( id, kind) ) ) ;
571
574
}
572
575
573
- fn mk_unresolved_msg ( id : & ident , kind : & str ) -> str {
574
- ret #fmt[ "unresolved %s: %s" , kind, istr:: to_estr ( id) ] ;
576
+ fn mk_unresolved_msg ( id : & ident , kind : & istr ) -> istr {
577
+ ret istr:: from_estr (
578
+ #fmt[ "unresolved %s: %s" , istr:: to_estr ( kind) , istr:: to_estr ( id) ] ) ;
575
579
}
576
580
577
581
// Lookup helpers
@@ -602,7 +606,8 @@ fn lookup_path_strict(e: &env, sc: &scopes, sp: &span, pth: &ast::path_,
602
606
fn lookup_in_scope_strict ( e : & env , sc : scopes , sp : & span , name : & ident ,
603
607
ns : namespace ) -> option:: t < def > {
604
608
alt lookup_in_scope ( e, sc, sp, name, ns) {
605
- none. { unresolved_err ( e, sc, sp, name, ns_name ( ns) ) ; ret none; }
609
+ none. { unresolved_err ( e, sc, sp, name,
610
+ ns_name ( ns) ) ; ret none; }
606
611
some ( d) { ret some ( d) ; }
607
612
}
608
613
}
@@ -888,7 +893,8 @@ fn found_def_item(i: &@ast::item, ns: namespace) -> option::t<def> {
888
893
fn lookup_in_mod_strict ( e : & env , sc : & scopes , m : def , sp : & span , name : & ident ,
889
894
ns : namespace , dr : dir ) -> option:: t < def > {
890
895
alt lookup_in_mod ( e, m, sp, name, ns, dr) {
891
- none. { unresolved_err ( e, sc, sp, name, ns_name ( ns) ) ; ret none; }
896
+ none. { unresolved_err ( e, sc, sp, name,
897
+ ns_name ( ns) ) ; ret none; }
892
898
some ( d) { ret some ( d) ; }
893
899
}
894
900
}
@@ -900,14 +906,14 @@ fn lookup_in_mod(e: &env, m: &def, sp: &span, name: &ident, ns: namespace,
900
906
// examining a module in an external crate
901
907
902
908
let cached = e. ext_cache . find ( { did: defid,
903
- ident: istr :: to_estr ( name) , ns: ns} ) ;
909
+ ident: name, ns: ns} ) ;
904
910
if !is_none ( cached) { ret cached; }
905
911
let path = [ name] ;
906
912
if defid. node != -1 { path = e. ext_map . get ( defid) + path; }
907
913
let fnd = lookup_external ( e, defid. crate , path, ns) ;
908
914
if !is_none ( fnd) {
909
915
e. ext_cache . insert ( { did: defid,
910
- ident: istr :: to_estr ( name) , ns: ns} ,
916
+ ident: name, ns: ns} ,
911
917
option:: get ( fnd) ) ;
912
918
}
913
919
ret fnd;
@@ -1214,26 +1220,26 @@ fn check_mod_name(e: &env, name: &ident, entries: list<mod_index_entry>) {
1214
1220
let saw_mod = false ;
1215
1221
let saw_type = false ;
1216
1222
let saw_value = false ;
1217
- fn dup ( e : & env , sp : & span , word : & str , name : & ident ) {
1218
- e. sess . span_fatal ( sp, "duplicate definition of " + word
1219
- + istr:: to_estr ( name) ) ;
1223
+ fn dup ( e : & env , sp : & span , word : & istr , name : & ident ) {
1224
+ e. sess . span_fatal ( sp, "duplicate definition of " +
1225
+ istr:: to_estr ( word + name) ) ;
1220
1226
}
1221
1227
while true {
1222
1228
alt entries {
1223
1229
cons( entry, rest) {
1224
1230
if !is_none ( lookup_in_mie ( e, entry, ns_value) ) {
1225
1231
if saw_value {
1226
- dup ( e, mie_span ( entry) , "" , name) ;
1232
+ dup ( e, mie_span ( entry) , ~ "", name) ;
1227
1233
} else { saw_value = true ; }
1228
1234
}
1229
1235
if !is_none ( lookup_in_mie ( e, entry, ns_type) ) {
1230
1236
if saw_type {
1231
- dup ( e, mie_span ( entry) , "type " , name) ;
1237
+ dup ( e, mie_span ( entry) , ~ "type ", name);
1232
1238
} else { saw_type = true; }
1233
1239
}
1234
1240
if !is_none(lookup_in_mie(e, entry, ns_module)) {
1235
1241
if saw_mod {
1236
- dup ( e, mie_span ( entry) , "module " , name) ;
1242
+ dup(e, mie_span(entry), ~ " module ", name);
1237
1243
} else { saw_mod = true; }
1238
1244
}
1239
1245
entries = *rest;
@@ -1264,20 +1270,20 @@ fn check_item(e: &@env, i: &@ast::item, x: &(), v: &vt<()>) {
1264
1270
ast::item_fn(f, ty_params) {
1265
1271
check_fn(*e, i.span, f);
1266
1272
ensure_unique(*e, i.span, typaram_names(ty_params), ident_id,
1267
- "type parameter" ) ;
1273
+ ~ " type parameter") ;
1268
1274
}
1269
1275
ast:: item_obj ( ob, ty_params, _) {
1270
1276
fn field_name ( field : & ast:: obj_field ) -> ident { ret field. ident ; }
1271
- ensure_unique ( * e, i. span , ob. fields , field_name, "object field" ) ;
1277
+ ensure_unique ( * e, i. span , ob. fields , field_name, ~ "object field") ;
1272
1278
for m: @ast:: method in ob. methods {
1273
1279
check_fn ( * e, m. span , m. node . meth ) ;
1274
1280
}
1275
1281
ensure_unique ( * e, i. span , typaram_names ( ty_params) , ident_id,
1276
- "type parameter" ) ;
1282
+ ~ "type parameter") ;
1277
1283
}
1278
1284
ast:: item_tag ( _, ty_params) {
1279
1285
ensure_unique ( * e, i. span , typaram_names ( ty_params) , ident_id,
1280
- "type parameter" ) ;
1286
+ ~ "type parameter") ;
1281
1287
}
1282
1288
_ { }
1283
1289
}
@@ -1292,13 +1298,13 @@ fn check_pat(ch: checker, p: &@ast::pat) {
1292
1298
1293
1299
fn check_arm ( e : & @env , a : & ast:: arm , x : & ( ) , v : & vt < ( ) > ) {
1294
1300
visit:: visit_arm ( a, x, v) ;
1295
- let ch0 = checker ( * e, "binding" ) ;
1301
+ let ch0 = checker ( * e, ~ "binding") ;
1296
1302
check_pat ( ch0, a. pats [ 0 ] ) ;
1297
1303
let seen0 = ch0. seen ;
1298
1304
let i = vec:: len ( a. pats ) ;
1299
1305
while i > 1 u {
1300
1306
i -= 1 u;
1301
- let ch = checker ( * e, "binding" ) ;
1307
+ let ch = checker ( * e, ~ "binding") ;
1302
1308
check_pat ( ch, a. pats [ i] ) ;
1303
1309
1304
1310
// Ensure the bindings introduced in this pattern are the same as in
@@ -1322,15 +1328,15 @@ fn check_arm(e: &@env, a: &ast::arm, x: &(), v: &vt<()>) {
1322
1328
1323
1329
fn check_block ( e : & @env , b : & ast:: blk , x : & ( ) , v : & vt < ( ) > ) {
1324
1330
visit:: visit_block ( b, x, v) ;
1325
- let values = checker ( * e, "value" ) ;
1326
- let types = checker ( * e, "type" ) ;
1327
- let mods = checker ( * e, "module" ) ;
1331
+ let values = checker ( * e, ~ "value") ;
1332
+ let types = checker ( * e, ~ "type ") ;
1333
+ let mods = checker ( * e, ~ "module") ;
1328
1334
for st: @ast:: stmt in b. node . stmts {
1329
1335
alt st. node {
1330
1336
ast:: stmt_decl ( d, _) {
1331
1337
alt d. node {
1332
1338
ast:: decl_local ( locs) {
1333
- let local_values = checker ( * e, "value" ) ;
1339
+ let local_values = checker ( * e, ~ "value") ;
1334
1340
for loc in locs {
1335
1341
for each p in ast_util:: pat_bindings ( loc. node . pat ) {
1336
1342
let ident = alt p. node { pat_bind ( n) { n } } ;
@@ -1370,14 +1376,14 @@ fn check_block(e: &@env, b: &ast::blk, x: &(), v: &vt<()>) {
1370
1376
1371
1377
fn check_fn ( e : & env , sp : & span , f : & ast:: _fn ) {
1372
1378
fn arg_name ( a : & ast:: arg ) -> ident { ret a. ident ; }
1373
- ensure_unique ( e, sp, f. decl . inputs , arg_name, "argument" ) ;
1379
+ ensure_unique ( e, sp, f. decl . inputs , arg_name, ~ "argument") ;
1374
1380
}
1375
1381
1376
1382
fn check_expr ( e : & @env , ex : & @ast:: expr , x : & ( ) , v : & vt < ( ) > ) {
1377
1383
alt ex. node {
1378
1384
ast:: expr_rec ( fields, _) {
1379
1385
fn field_name ( f : & ast:: field ) -> ident { ret f. node . ident ; }
1380
- ensure_unique ( * e, ex. span , fields, field_name, "field" ) ;
1386
+ ensure_unique ( * e, ex. span , fields, field_name, ~ "field") ;
1381
1387
}
1382
1388
_ { }
1383
1389
}
@@ -1388,24 +1394,24 @@ fn check_ty(e: &@env, ty: &@ast::ty, x: &(), v: &vt<()>) {
1388
1394
alt ty. node {
1389
1395
ast:: ty_rec ( fields) {
1390
1396
fn field_name ( f : & ast:: ty_field ) -> ident { ret f. node . ident ; }
1391
- ensure_unique ( * e, ty. span , fields, field_name, "field" ) ;
1397
+ ensure_unique ( * e, ty. span , fields, field_name, ~ "field") ;
1392
1398
}
1393
1399
_ { }
1394
1400
}
1395
1401
visit:: visit_ty ( ty, x, v) ;
1396
1402
}
1397
1403
1398
- type checker = @{ mutable seen: [ ident ] , kind : str , sess : session } ;
1404
+ type checker = @{ mutable seen: [ ident ] , kind : istr , sess : session } ;
1399
1405
1400
- fn checker ( e : & env , kind : str ) -> checker {
1406
+ fn checker ( e : & env , kind : & istr ) -> checker {
1401
1407
let seen: [ ident ] = [ ] ;
1402
1408
ret @{ mutable seen: seen, kind : kind, sess : e. sess } ;
1403
1409
}
1404
1410
1405
1411
fn check_name ( ch : & checker , sp : & span , name : & ident ) {
1406
1412
for s: ident in ch. seen {
1407
1413
if istr:: eq ( s, name) {
1408
- ch. sess . span_fatal ( sp, "duplicate " + ch. kind
1414
+ ch. sess . span_fatal ( sp, "duplicate " + istr :: to_estr ( ch. kind )
1409
1415
+ " name: " + istr:: to_estr ( name) ) ;
1410
1416
}
1411
1417
}
@@ -1418,7 +1424,7 @@ fn add_name(ch: &checker, sp: &span, name: &ident) {
1418
1424
fn ident_id ( i : & ident ) -> ident { ret i; }
1419
1425
1420
1426
fn ensure_unique < T > ( e : & env , sp : & span , elts : & [ T ] , id : fn ( & T ) -> ident ,
1421
- kind : & str ) {
1427
+ kind : & istr ) {
1422
1428
let ch = checker ( e, kind) ;
1423
1429
for elt: T in elts { add_name ( ch, sp, id ( elt) ) ; }
1424
1430
}
0 commit comments