@@ -497,6 +497,7 @@ struct TypeNsDef {
497
497
}
498
498
499
499
// Records a possibly-private value definition.
500
+ #[ deriving( Clone ) ]
500
501
struct ValueNsDef {
501
502
is_public : bool , // see note in ImportResolution about how to use this
502
503
def : Def ,
@@ -507,7 +508,7 @@ struct ValueNsDef {
507
508
// bound to.
508
509
struct NameBindings {
509
510
type_def : RefCell < Option < TypeNsDef > > , //< Meaning in type namespace.
510
- value_def : Option < ValueNsDef > , //< Meaning in value namespace.
511
+ value_def : RefCell < Option < ValueNsDef > > , //< Meaning in value namespace.
511
512
}
512
513
513
514
/// Ways in which a trait can be referenced
@@ -614,8 +615,11 @@ impl NameBindings {
614
615
615
616
/// Records a value definition.
616
617
fn define_value ( & mut self , def : Def , sp : Span , is_public : bool ) {
617
- self . value_def = Some ( ValueNsDef { def : def, value_span : Some ( sp) ,
618
- is_public : is_public } ) ;
618
+ self . value_def . set ( Some ( ValueNsDef {
619
+ def : def,
620
+ value_span : Some ( sp) ,
621
+ is_public : is_public,
622
+ } ) ) ;
619
623
}
620
624
621
625
/// Returns the module node if applicable.
@@ -644,7 +648,7 @@ impl NameBindings {
644
648
fn defined_in_namespace ( & self , namespace : Namespace ) -> bool {
645
649
match namespace {
646
650
TypeNS => return self . type_def . get ( ) . is_some ( ) ,
647
- ValueNS => return self . value_def . is_some ( )
651
+ ValueNS => return self . value_def . get ( ) . is_some ( )
648
652
}
649
653
}
650
654
@@ -653,7 +657,7 @@ impl NameBindings {
653
657
TypeNS => match self . type_def . get ( ) {
654
658
Some ( def) => def. is_public , None => false
655
659
} ,
656
- ValueNS => match self . value_def {
660
+ ValueNS => match self . value_def . get ( ) {
657
661
Some ( def) => def. is_public , None => false
658
662
}
659
663
}
@@ -683,7 +687,7 @@ impl NameBindings {
683
687
}
684
688
}
685
689
ValueNS => {
686
- match self . value_def {
690
+ match self . value_def . get ( ) {
687
691
None => None ,
688
692
Some ( value_def) => Some ( value_def. def )
689
693
}
@@ -701,7 +705,7 @@ impl NameBindings {
701
705
}
702
706
}
703
707
ValueNS => {
704
- match self . value_def {
708
+ match self . value_def . get ( ) {
705
709
None => None ,
706
710
Some ( value_def) => value_def. value_span
707
711
}
@@ -716,7 +720,7 @@ impl NameBindings {
716
720
fn NameBindings ( ) -> NameBindings {
717
721
NameBindings {
718
722
type_def : RefCell :: new ( None ) ,
719
- value_def : None
723
+ value_def : RefCell :: new ( None ) ,
720
724
}
721
725
}
722
726
@@ -2220,7 +2224,7 @@ impl Resolver {
2220
2224
type_def : None ,
2221
2225
type_span : None
2222
2226
} ) ) ,
2223
- value_def : None ,
2227
+ value_def : RefCell :: new ( None ) ,
2224
2228
}
2225
2229
}
2226
2230
@@ -4534,8 +4538,9 @@ impl Resolver {
4534
4538
Success ( ( target, _) ) => {
4535
4539
debug ! ( "(resolve bare identifier pattern) succeeded in \
4536
4540
finding {} at {:?}",
4537
- self . session. str_of( name) , target. bindings. value_def) ;
4538
- match target. bindings . value_def {
4541
+ self . session. str_of( name) ,
4542
+ target. bindings. value_def. get( ) ) ;
4543
+ match target. bindings . value_def . get ( ) {
4539
4544
None => {
4540
4545
fail ! ( "resolved name in the value namespace to a \
4541
4546
set of name bindings with no def?!") ;
0 commit comments