@@ -79,6 +79,22 @@ fn new_ext_hash() -> ext_hash {
79
79
ret std:: map:: mk_hashmap :: < key , def > ( hash, eq) ;
80
80
}
81
81
82
+ fn new_exp_hash ( ) -> exp_map {
83
+ type key = { path: str , ns : namespace } ;
84
+ fn hash ( v : key ) -> uint {
85
+ ret str:: hash ( v. path ) +
86
+ alt v. ns {
87
+ ns_value. { 1 u }
88
+ ns_type. { 2 u }
89
+ ns_module. { 3 u }
90
+ } ;
91
+ }
92
+ fn eq ( v1 : key , v2 : key ) -> bool {
93
+ ret str:: eq ( v1. path , v2. path ) && v1. ns == v2. ns ;
94
+ }
95
+ ret std:: map:: mk_hashmap :: < key , def > ( hash, eq) ;
96
+ }
97
+
82
98
tag mod_index_entry {
83
99
mie_view_item( @ast : : view_item) ;
84
100
mie_import_ident ( node_id, codemap:: span) ;
@@ -105,7 +121,7 @@ type indexed_mod = {
105
121
106
122
type def_map = hashmap < node_id , def > ;
107
123
type ext_map = hashmap < def_id , [ ident ] > ;
108
- type exp_map = hashmap < str , def > ;
124
+ type exp_map = hashmap < { path : str , ns : namespace } , def > ;
109
125
type impl_map = hashmap < node_id , iscopes > ;
110
126
type impl_cache = hashmap < def_id , @[ @_impl ] > ;
111
127
@@ -142,7 +158,7 @@ fn resolve_crate(sess: session, amap: ast_map::map, crate: @ast::crate) ->
142
158
def_map: new_int_hash ( ) ,
143
159
ast_map: amap,
144
160
imports: new_int_hash ( ) ,
145
- exp_map: new_str_hash ( ) ,
161
+ exp_map: new_exp_hash ( ) ,
146
162
mod_map: new_int_hash ( ) ,
147
163
block_map: new_int_hash ( ) ,
148
164
ext_map: new_def_hash ( ) ,
@@ -1363,6 +1379,9 @@ fn lookup_external(e: env, cnum: int, ids: [ident], ns: namespace) ->
1363
1379
let cname = cstore:: get_crate_data ( e. cstore , did. crate ) . name ;
1364
1380
let name =
1365
1381
csearch:: get_item_name ( e. cstore , did. crate , did. node ) ;
1382
+ log #fmt( "lookup_external: %s %d, %d, %s, %s" , cname,
1383
+ did. crate , did. node ,
1384
+ str:: connect ( ids, "::" ) , name) ;
1366
1385
e. ext_map . insert ( did, vec:: init ( ids) + [ name] ) ;
1367
1386
} else {
1368
1387
e. ext_map . insert ( did, ids) ;
@@ -1615,15 +1634,16 @@ fn check_exports(e: @env) {
1615
1634
let ( m, v, t) = ( lookup ( ns_module) ,
1616
1635
lookup ( ns_value) ,
1617
1636
lookup ( ns_type) ) ;
1618
- maybe_add_reexport ( e, path + ident, m) ;
1619
- maybe_add_reexport ( e, path + ident, v) ;
1620
- maybe_add_reexport ( e, path + ident, t) ;
1637
+ maybe_add_reexport ( e, path + ident, ns_module , m) ;
1638
+ maybe_add_reexport ( e, path + ident, ns_value , v) ;
1639
+ maybe_add_reexport ( e, path + ident, ns_type , t) ;
1621
1640
ret is_some( m) || is_some ( v) || is_some ( t) ;
1622
1641
}
1623
1642
1624
- fn maybe_add_reexport ( e : @env , path : str , def : option:: t < def > ) {
1643
+ fn maybe_add_reexport ( e : @env , path : str , ns : namespace ,
1644
+ def : option:: t < def > ) {
1625
1645
if option:: is_some ( def) {
1626
- e. exp_map . insert ( path, option:: get ( def) ) ;
1646
+ e. exp_map . insert ( { path: path , ns : ns } , option:: get ( def) ) ;
1627
1647
}
1628
1648
}
1629
1649
@@ -1635,9 +1655,9 @@ fn check_exports(e: @env) {
1635
1655
mie_import_ident( id, _) {
1636
1656
alt e. imports . get ( id) {
1637
1657
resolved ( v, t, m, _, rid, _) {
1638
- maybe_add_reexport ( e, val. path + rid, v) ;
1639
- maybe_add_reexport ( e, val. path + rid, t) ;
1640
- maybe_add_reexport ( e, val. path + rid, m) ;
1658
+ maybe_add_reexport ( e, val. path + rid, ns_value , v) ;
1659
+ maybe_add_reexport ( e, val. path + rid, ns_type , t) ;
1660
+ maybe_add_reexport ( e, val. path + rid, ns_module , m) ;
1641
1661
}
1642
1662
_ { }
1643
1663
}
0 commit comments