@@ -512,25 +512,22 @@ pub impl Module {
512512pub struct TypeNsDef {
513513 privacy : Privacy ,
514514 module_def : Option < @mut Module > ,
515- type_def : Option < def >
515+ type_def : Option < def > ,
516+ type_span : Option < span >
516517}
517518
518519// Records a possibly-private value definition.
519520pub struct ValueNsDef {
520521 privacy : Privacy ,
521522 def : def ,
523+ value_span : Option < span > ,
522524}
523525
524526// Records the definitions (at most one for each namespace) that a name is
525527// bound to.
526528pub struct NameBindings {
527529 type_def : Option < TypeNsDef > , //< Meaning in type namespace.
528530 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 > ,
534531}
535532
536533pub impl NameBindings {
@@ -548,18 +545,19 @@ pub impl NameBindings {
548545 self . type_def = Some ( TypeNsDef {
549546 privacy : privacy,
550547 module_def : Some ( module_) ,
551- type_def : None
548+ type_def : None ,
549+ type_span : Some ( sp)
552550 } ) ;
553551 }
554552 Some ( copy type_def) => {
555553 self . type_def = Some ( TypeNsDef {
556554 privacy : privacy,
557555 module_def : Some ( module_) ,
556+ type_span : Some ( sp) ,
558557 .. type_def
559558 } ) ;
560559 }
561560 }
562- self . type_span = Some ( sp) ;
563561 }
564562
565563 /// Records a type definition.
@@ -570,24 +568,24 @@ pub impl NameBindings {
570568 self . type_def = Some ( TypeNsDef {
571569 privacy : privacy,
572570 module_def : None ,
573- type_def : Some ( def)
571+ type_def : Some ( def) ,
572+ type_span : Some ( sp)
574573 } ) ;
575574 }
576575 Some ( copy type_def) => {
577576 self . type_def = Some ( TypeNsDef {
578577 privacy : privacy,
579578 type_def : Some ( def) ,
579+ type_span : Some ( sp) ,
580580 .. type_def
581581 } ) ;
582582 }
583583 }
584- self . type_span = Some ( sp) ;
585584 }
586585
587586 /// Records a value definition.
588587 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) } ) ;
591589 }
592590
593591 /// Returns the module node if applicable.
@@ -686,8 +684,18 @@ pub impl NameBindings {
686684 fn span_for_namespace ( & self , namespace : Namespace ) -> Option < span > {
687685 if self . defined_in_namespace ( namespace) {
688686 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+ }
691699 }
692700 } else {
693701 None
@@ -698,9 +706,7 @@ pub impl NameBindings {
698706pub fn NameBindings ( ) -> NameBindings {
699707 NameBindings {
700708 type_def : None ,
701- value_def : None ,
702- type_span : None ,
703- value_span : None
709+ value_def : None
704710 }
705711}
706712
@@ -2110,10 +2116,9 @@ pub impl Resolver {
21102116 privacy : Public ,
21112117 module_def : Some ( module) ,
21122118 type_def : None ,
2119+ type_span : None
21132120 } ) ,
21142121 value_def : None ,
2115- type_span : None ,
2116- value_span : None ,
21172122 }
21182123 }
21192124
0 commit comments