@@ -510,13 +510,6 @@ pub struct NameBindings {
510
510
value_def : Option < ValueNsDef > , //< Meaning in value namespace.
511
511
}
512
512
513
- /// Ways in which a trait can be referenced
514
- enum TraitReferenceType {
515
- TraitImplementation , // impl SomeTrait for T { ... }
516
- TraitDerivation , // trait T : SomeTrait { ... }
517
- TraitBoundingTypeParameter , // fn f<T:SomeTrait>() { ... }
518
- }
519
-
520
513
impl NameBindings {
521
514
/// Creates a new module in this set of name bindings.
522
515
pub fn define_module ( @mut self ,
@@ -3561,7 +3554,23 @@ impl Resolver {
3561
3554
3562
3555
// Resolve derived traits.
3563
3556
for traits. iter( ) . advance |trt| {
3564
- self . resolve_trait_reference( * trt, visitor, TraitDerivation ) ;
3557
+ match self . resolve_path( trt. path, TypeNS , true ,
3558
+ visitor) {
3559
+ None =>
3560
+ self . session. span_err( trt. path. span,
3561
+ "attempt to derive a \
3562
+ nonexistent trait") ,
3563
+ Some ( def) => {
3564
+ // Write a mapping from the trait ID to the
3565
+ // definition of the trait into the definition
3566
+ // map.
3567
+
3568
+ debug ! ( "(resolving trait) found trait def: \
3569
+ %?", def) ;
3570
+
3571
+ self . record_def( trt. ref_id, def) ;
3572
+ }
3573
+ }
3565
3574
}
3566
3575
3567
3576
for ( * methods) . iter( ) . advance |method| {
@@ -3812,31 +3821,22 @@ impl Resolver {
3812
3821
visitor: ResolveVisitor ) {
3813
3822
match * type_parameter_bound {
3814
3823
TraitTyParamBound ( tref) => {
3815
- self . resolve_trait_reference( tref, visitor, TraitBoundingTypeParameter )
3824
+ self . resolve_trait_reference( tref, visitor)
3816
3825
}
3817
3826
RegionTyParamBound => { }
3818
3827
}
3819
3828
}
3820
3829
3821
3830
pub fn resolve_trait_reference( @mut self ,
3822
3831
trait_reference: & trait_ref,
3823
- visitor: ResolveVisitor ,
3824
- reference_type: TraitReferenceType ) {
3832
+ visitor: ResolveVisitor ) {
3825
3833
match self . resolve_path( trait_reference. path, TypeNS , true , visitor) {
3826
3834
None => {
3827
- let path_str = self . idents_to_str( trait_reference. path. idents) ;
3828
-
3829
- let usage_str = match reference_type {
3830
- TraitBoundingTypeParameter => "bound type parameter with" ,
3831
- TraitImplementation => "implement" ,
3832
- TraitDerivation => "derive"
3833
- } ;
3834
-
3835
- let msg = fmt ! ( "attempt to %s a nonexistent trait `%s`" , usage_str, path_str) ;
3836
- self . session. span_err( trait_reference. path. span, msg) ;
3835
+ let idents = self . idents_to_str( trait_reference. path. idents) ;
3836
+ self . session. span_err( trait_reference. path. span,
3837
+ fmt ! ( "attempt to implement an unknown trait `%s`" , idents) ) ;
3837
3838
}
3838
3839
Some ( def) => {
3839
- debug ! ( "(resolving trait) found trait def: %?" , def) ;
3840
3840
self . record_def( trait_reference. ref_id, def) ;
3841
3841
}
3842
3842
}
@@ -3930,7 +3930,7 @@ impl Resolver {
3930
3930
let original_trait_refs;
3931
3931
match opt_trait_reference {
3932
3932
Some ( trait_reference) => {
3933
- self . resolve_trait_reference( trait_reference, visitor, TraitImplementation ) ;
3933
+ self . resolve_trait_reference( trait_reference, visitor) ;
3934
3934
3935
3935
// Record the current set of trait references.
3936
3936
let mut new_trait_refs = ~[ ] ;
0 commit comments