1
+ use std:: collections:: hash_map:: Entry ;
1
2
use std:: collections:: { BTreeMap , BTreeSet , HashMap , HashSet } ;
2
3
use std:: fmt:: Write ;
3
4
@@ -86,16 +87,17 @@ fn create_dependencies_vars<'a>(
86
87
. or_default ( )
87
88
. insert ( ( kind, platform) , solver. new_var ( ) ) ;
88
89
89
- let dep_feature_var_map = dep
90
- . features ( )
91
- . iter ( )
92
- . map ( |& f| ( f, solver. new_var ( ) ) )
93
- . collect ( ) ;
94
-
95
- var_for_is_dependencies_features_used
90
+ let dep_feature_vars = var_for_is_dependencies_features_used
96
91
. entry ( name)
97
92
. or_default ( )
98
- . insert ( ( kind, platform) , dep_feature_var_map) ;
93
+ . entry ( ( kind, platform) )
94
+ . or_default ( ) ;
95
+
96
+ for & feature_name in dep. features ( ) {
97
+ if let Entry :: Vacant ( entry) = dep_feature_vars. entry ( feature_name) {
98
+ entry. insert ( solver. new_var ( ) ) ;
99
+ }
100
+ }
99
101
}
100
102
101
103
for feature_values in pkg_features. values ( ) {
@@ -109,12 +111,14 @@ fn create_dependencies_vars<'a>(
109
111
continue ;
110
112
} ;
111
113
112
- for dep_features_vars in var_for_is_dependencies_features_used
114
+ for dep_feature_vars in var_for_is_dependencies_features_used
113
115
. get_mut ( & dep_name)
114
116
. expect ( "feature dep name exists" )
115
117
. values_mut ( )
116
118
{
117
- dep_features_vars. insert ( dep_feature, solver. new_var ( ) ) ;
119
+ if let Entry :: Vacant ( entry) = dep_feature_vars. entry ( dep_feature) {
120
+ entry. insert ( solver. new_var ( ) ) ;
121
+ }
118
122
}
119
123
}
120
124
}
0 commit comments