@@ -40,11 +40,11 @@ fn lookup_name(&env e, import_map index,
40
40
ast . ident i) -> option. t[ def ] {
41
41
auto d_ = lookup_name_wrapped ( e, i) ;
42
42
alt ( d_) {
43
- case ( none[ def_wrap] ) {
43
+ case ( none[ tup ( @env , def_wrap) ] ) {
44
44
ret none[ def] ;
45
45
}
46
- case ( some[ def_wrap] ( ?d) ) {
47
- alt ( d) {
46
+ case ( some[ tup ( @env , def_wrap) ] ( ?d) ) {
47
+ alt ( d. _1 ) {
48
48
case ( def_wrap_use ( ?it) ) {
49
49
alt ( it. node ) {
50
50
case ( ast. view_item_use ( _, _, ?id) ) {
@@ -115,14 +115,14 @@ fn find_final_def(&env e, &span sp, vec[ident] idents) -> def_wrap {
115
115
auto next_i = rest_idents. ( 0 ) ;
116
116
auto next_ = lookup_name_wrapped ( tmp_e, next_i) ;
117
117
alt ( next_) {
118
- case ( none[ def_wrap] ) {
118
+ case ( none[ tup ( @env , def_wrap) ] ) {
119
119
e. sess . span_err ( sp, "unresolved name: " + next_i) ;
120
120
fail;
121
121
}
122
- case ( some[ def_wrap] ( ?next) ) {
122
+ case ( some[ tup ( @env , def_wrap) ] ( ?next) ) {
123
123
auto combined_e = update_env_for_item ( e, i) ;
124
124
ret found_something ( combined_e, pending, sp,
125
- rest_idents, next) ;
125
+ rest_idents, next. _1 ) ;
126
126
}
127
127
}
128
128
}
@@ -141,20 +141,20 @@ fn find_final_def(&env e, &span sp, vec[ident] idents) -> def_wrap {
141
141
auto first = idents. ( 0 ) ;
142
142
auto d_ = lookup_name_wrapped ( e, first) ;
143
143
alt ( d_) {
144
- case ( none[ def_wrap] ) {
144
+ case ( none[ tup ( @env , def_wrap) ] ) {
145
145
e. sess . span_err ( sp, "unresolved name: " + first) ;
146
146
fail;
147
147
}
148
- case ( some[ def_wrap] ( ?d) ) {
149
- ret found_something ( e , pending, sp, idents, d) ;
148
+ case ( some[ tup ( @env , def_wrap) ] ( ?d) ) {
149
+ ret found_something ( * d . _0 , pending, sp, idents, d. _1 ) ;
150
150
}
151
151
}
152
152
}
153
153
auto pending = new_def_hash[ bool] ( ) ;
154
154
ret inner( e, pending, sp, idents) ;
155
155
}
156
156
157
- fn lookup_name_wrapped ( & env e, ast . ident i) -> option. t[ def_wrap ] {
157
+ fn lookup_name_wrapped ( & env e, ast . ident i) -> option. t[ tup ( @ env , def_wrap ) ] {
158
158
159
159
// log "resolving name " + i;
160
160
@@ -308,8 +308,23 @@ fn lookup_name_wrapped(&env e, ast.ident i) -> option.t[def_wrap] {
308
308
ret none[ def_wrap] ;
309
309
}
310
310
311
- ret std. list . find [ scope, def_wrap] ( e. scopes ,
312
- bind in_scope ( i, _) ) ;
311
+ alt ( e. scopes ) {
312
+ case ( nil[ scope] ) {
313
+ ret none[ tup ( @env, def_wrap) ] ;
314
+ }
315
+ case ( cons[ scope] ( ?hd, ?tl) ) {
316
+ auto x = in_scope ( i, hd) ;
317
+ alt ( x) {
318
+ case ( some[ def_wrap] ( ?x) ) {
319
+ ret some ( tup ( @e, x) ) ;
320
+ }
321
+ case ( none[ def_wrap] ) {
322
+ auto outer_env = rec ( scopes = * tl with e) ;
323
+ ret lookup_name_wrapped ( outer_env, i) ;
324
+ }
325
+ }
326
+ }
327
+ }
313
328
}
314
329
315
330
fn fold_pat_tag ( & env e, & span sp, import_map index, ident i,
0 commit comments