Skip to content

Commit c18e44b

Browse files
committed
auto merge of #6501 : june0cho/rust/incoming, r=graydon
Fix #3783.
2 parents 7012c42 + 37fe2b6 commit c18e44b

File tree

1 file changed

+24
-19
lines changed

1 file changed

+24
-19
lines changed

src/librustc/middle/resolve.rs

+24-19
Original file line numberDiff line numberDiff line change
@@ -512,25 +512,22 @@ pub impl Module {
512512
pub 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.
519520
pub 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.
526528
pub 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

536533
pub 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 {
698706
pub 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

@@ -2111,10 +2117,9 @@ pub impl Resolver {
21112117
privacy: Public,
21122118
module_def: Some(module),
21132119
type_def: None,
2120+
type_span: None
21142121
}),
21152122
value_def: None,
2116-
type_span: None,
2117-
value_span: None,
21182123
}
21192124
}
21202125

0 commit comments

Comments
 (0)