@@ -35,7 +35,7 @@ tag def_wrap {
35
35
def_wrap_import ( @ast. view_item ) ;
36
36
def_wrap_mod ( @ast. item ) ;
37
37
def_wrap_other ( def) ;
38
- def_wrap_expr_field ( uint) ;
38
+ def_wrap_expr_field ( uint, def ) ;
39
39
def_wrap_resolving;
40
40
}
41
41
@@ -72,6 +72,9 @@ fn unwrap_def(def_wrap d) -> def {
72
72
case ( def_wrap_other ( ?d) ) {
73
73
ret d;
74
74
}
75
+ case ( def_wrap_expr_field ( _, ?d) ) {
76
+ ret d;
77
+ }
75
78
}
76
79
}
77
80
@@ -140,9 +143,9 @@ fn find_final_def(&env e, import_map index,
140
143
case ( def_wrap_use ( ?c) ) {
141
144
e. sess . span_err ( sp, "Crate access is not implemented" ) ;
142
145
}
143
- case ( _ ) {
146
+ case ( def_wrap_other ( ?d ) ) {
144
147
let uint l = _vec. len [ ident] ( idents) ;
145
- ret def_wrap_expr_field ( l) ;
148
+ ret def_wrap_expr_field ( l, d ) ;
146
149
}
147
150
}
148
151
fail;
@@ -419,26 +422,13 @@ fn fold_pat_tag(&env e, &span sp, ast.path p, vec[@ast.pat] args,
419
422
fn fold_expr_path ( & env e, & span sp, & ast . path p, & option. t[ def] d ,
420
423
ann a) -> @ast . expr {
421
424
auto n_idents = _vec. len [ ast. ident ] ( p. node . idents ) ;
422
-
423
425
check ( n_idents != 0 u) ;
424
- auto id0 = p. node . idents . ( 0 ) ;
425
-
426
- auto d_ = lookup_name ( e, id0) ;
427
-
428
- alt ( d_) {
429
- case ( some[ def] ( _) ) {
430
- // log "resolved name " + n.node.ident;
431
- }
432
- case ( none[ def] ) {
433
- e. sess . span_err ( sp, "unresolved name: " + id0) ;
434
- }
435
- }
436
426
437
427
auto index = new_def_hash[ def_wrap] ( ) ;
438
428
auto d = find_final_def ( e, index, sp, p. node . idents , none[ ast. def_id ] ) ;
439
429
let uint path_len = 0 u;
440
430
alt ( d) {
441
- case ( def_wrap_expr_field ( ?remaining) ) {
431
+ case ( def_wrap_expr_field ( ?remaining, _ ) ) {
442
432
path_len = n_idents - remaining + 1 u;
443
433
}
444
434
case ( def_wrap_other ( _) ) {
@@ -453,7 +443,8 @@ fn fold_expr_path(&env e, &span sp, &ast.path p, &option.t[def] d,
453
443
}
454
444
auto path_elems =
455
445
_vec. slice [ ident] ( p. node . idents , 0 u, path_len) ;
456
- auto p_ = rec ( node=rec ( idents = vec ( id0) with p. node ) with p) ;
446
+ auto p_ = rec ( node=rec ( idents = path_elems with p. node ) with p) ;
447
+ auto d_ = some ( unwrap_def ( d) ) ;
457
448
auto ex = @fold. respan [ ast. expr_ ] ( sp, ast. expr_path ( p_, d_, a) ) ;
458
449
auto i = path_len;
459
450
while ( i < n_idents) {
@@ -473,7 +464,7 @@ fn fold_view_item_import(&env e, &span sp,
473
464
auto last_id = is. ( len - 1 u) ;
474
465
auto d = find_final_def ( e, index, sp, is, some ( id) ) ;
475
466
alt ( d) {
476
- case ( def_wrap_expr_field ( ?remain) ) {
467
+ case ( def_wrap_expr_field ( ?remain, _ ) ) {
477
468
auto ident = is. ( len - remain) ;
478
469
e. sess . span_err ( sp, ident + " is not a module or crate" ) ;
479
470
}
0 commit comments