@@ -512,25 +512,22 @@ pub impl Module {
512
512
pub struct TypeNsDef {
513
513
privacy : Privacy ,
514
514
module_def : Option < @mut Module > ,
515
- type_def : Option < def >
515
+ type_def : Option < def > ,
516
+ type_span : Option < span >
516
517
}
517
518
518
519
// Records a possibly-private value definition.
519
520
pub struct ValueNsDef {
520
521
privacy : Privacy ,
521
522
def : def ,
523
+ value_span : Option < span > ,
522
524
}
523
525
524
526
// Records the definitions (at most one for each namespace) that a name is
525
527
// bound to.
526
528
pub struct NameBindings {
527
529
type_def : Option < TypeNsDef > , //< Meaning in type namespace.
528
530
value_def : Option < ValueNsDef > , //< Meaning in value namespace.
529
-
530
- // For error reporting
531
- // FIXME (#3783): Merge me into TypeNsDef and ValueNsDef.
532
- type_span : Option < span > ,
533
- value_span : Option < span > ,
534
531
}
535
532
536
533
pub impl NameBindings {
@@ -548,18 +545,19 @@ pub impl NameBindings {
548
545
self . type_def = Some ( TypeNsDef {
549
546
privacy : privacy,
550
547
module_def : Some ( module_) ,
551
- type_def : None
548
+ type_def : None ,
549
+ type_span : Some ( sp)
552
550
} ) ;
553
551
}
554
552
Some ( copy type_def) => {
555
553
self . type_def = Some ( TypeNsDef {
556
554
privacy : privacy,
557
555
module_def : Some ( module_) ,
556
+ type_span : Some ( sp) ,
558
557
.. type_def
559
558
} ) ;
560
559
}
561
560
}
562
- self . type_span = Some ( sp) ;
563
561
}
564
562
565
563
/// Records a type definition.
@@ -570,24 +568,24 @@ pub impl NameBindings {
570
568
self . type_def = Some ( TypeNsDef {
571
569
privacy : privacy,
572
570
module_def : None ,
573
- type_def : Some ( def)
571
+ type_def : Some ( def) ,
572
+ type_span : Some ( sp)
574
573
} ) ;
575
574
}
576
575
Some ( copy type_def) => {
577
576
self . type_def = Some ( TypeNsDef {
578
577
privacy : privacy,
579
578
type_def : Some ( def) ,
579
+ type_span : Some ( sp) ,
580
580
.. type_def
581
581
} ) ;
582
582
}
583
583
}
584
- self . type_span = Some ( sp) ;
585
584
}
586
585
587
586
/// Records a value definition.
588
587
fn define_value ( @mut self , privacy : Privacy , def : def , sp : span ) {
589
- self . value_def = Some ( ValueNsDef { privacy : privacy, def : def } ) ;
590
- self . value_span = Some ( sp) ;
588
+ self . value_def = Some ( ValueNsDef { privacy : privacy, def : def, value_span : Some ( sp) } ) ;
591
589
}
592
590
593
591
/// Returns the module node if applicable.
@@ -686,8 +684,18 @@ pub impl NameBindings {
686
684
fn span_for_namespace ( & self , namespace : Namespace ) -> Option < span > {
687
685
if self . defined_in_namespace ( namespace) {
688
686
match namespace {
689
- TypeNS => self . type_span ,
690
- ValueNS => self . value_span ,
687
+ TypeNS => {
688
+ match self . type_def {
689
+ None => None ,
690
+ Some ( type_def) => type_def. type_span
691
+ }
692
+ }
693
+ ValueNS => {
694
+ match self . value_def {
695
+ None => None ,
696
+ Some ( value_def) => value_def. value_span
697
+ }
698
+ }
691
699
}
692
700
} else {
693
701
None
@@ -698,9 +706,7 @@ pub impl NameBindings {
698
706
pub fn NameBindings ( ) -> NameBindings {
699
707
NameBindings {
700
708
type_def : None ,
701
- value_def : None ,
702
- type_span : None ,
703
- value_span : None
709
+ value_def : None
704
710
}
705
711
}
706
712
@@ -2111,10 +2117,9 @@ pub impl Resolver {
2111
2117
privacy : Public ,
2112
2118
module_def : Some ( module) ,
2113
2119
type_def : None ,
2120
+ type_span : None
2114
2121
} ) ,
2115
2122
value_def : None ,
2116
- type_span : None ,
2117
- value_span : None ,
2118
2123
}
2119
2124
}
2120
2125
0 commit comments