@@ -2886,7 +2886,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
2886
2886
2887
2887
pub fn find_field_index ( self , ident : Ident , variant : & VariantDef ) -> Option < usize > {
2888
2888
variant. fields . iter ( ) . position ( |field| {
2889
- self . adjust_ident ( ident, variant . def_id , hir :: DUMMY_HIR_ID ) . 0 == field . ident . modern ( )
2889
+ self . hygienic_eq ( ident, field . ident , variant . def_id )
2890
2890
} )
2891
2891
}
2892
2892
@@ -3085,7 +3085,12 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
3085
3085
/// its supposed definition name (`def_name`). The method also needs `DefId` of the supposed
3086
3086
/// definition's parent/scope to perform comparison.
3087
3087
pub fn hygienic_eq ( self , use_name : Ident , def_name : Ident , def_parent_def_id : DefId ) -> bool {
3088
- self . adjust_ident ( use_name, def_parent_def_id, hir:: DUMMY_HIR_ID ) . 0 == def_name. modern ( )
3088
+ // We could use `Ident::eq` here, but we deliberately don't. The name
3089
+ // comparison fails frequently, and we want to avoid the expensive
3090
+ // `modern()` calls required for the span comparison whenever possible.
3091
+ use_name. name == def_name. name &&
3092
+ self . adjust_ident ( use_name, def_parent_def_id, hir:: DUMMY_HIR_ID ) . 0 . span . ctxt ( ) ==
3093
+ def_name. modern ( ) . span . ctxt ( )
3089
3094
}
3090
3095
3091
3096
pub fn adjust_ident ( self , mut ident : Ident , scope : DefId , block : hir:: HirId ) -> ( Ident , DefId ) {
0 commit comments