@@ -193,41 +193,28 @@ Value _modify(SassMap map, Iterable<Value> keys, Value modify(Value old),
193
193
/// If both [map1] and [map2] have a map value associated with the same key,
194
194
/// this recursively merges those maps as well.
195
195
SassMap _deepMergeImpl (SassMap map1, SassMap map2) {
196
+ if (map1.contents.isEmpty) return map2;
196
197
if (map2.contents.isEmpty) return map1;
197
198
198
- // Avoid making a mutable copy of `map2` if it would totally overwrite `map1`
199
- // anyway.
200
- var mutable = false ;
201
- var result = map2.contents;
202
- void _ensureMutable () {
203
- if (mutable) return ;
204
- mutable = true ;
205
- result = Map .of (result);
206
- }
199
+ var result = Map .of (map1.contents);
207
200
208
- // Because values in `map2` take precedence over `map1`, we just check if any
209
- // entries in `map1` don't have corresponding keys in `map2`, or if they're
210
- // maps that need to be merged in their own right.
211
- map1.contents.forEach ((key, value) {
212
- var resultValue = result[key];
213
- if (resultValue == null ) {
214
- _ensureMutable ();
201
+ map2.contents.forEach ((key, value) {
202
+ var resultMap = result[key]? .tryMap ();
203
+ if (resultMap == null ) {
215
204
result[key] = value;
216
205
} else {
217
- var resultMap = resultValue.tryMap ();
218
206
var valueMap = value.tryMap ();
219
-
220
- if (resultMap != null && valueMap != null ) {
221
- var merged = _deepMergeImpl (valueMap, resultMap);
207
+ if (valueMap != null ) {
208
+ var merged = _deepMergeImpl (resultMap, valueMap);
222
209
if (identical (merged, resultMap)) return ;
223
-
224
- _ensureMutable ();
225
210
result[key] = merged;
211
+ } else {
212
+ result[key] = value;
226
213
}
227
214
}
228
215
});
229
216
230
- return mutable ? SassMap (result) : map2 ;
217
+ return SassMap (result);
231
218
}
232
219
233
220
/// Like [new BuiltInCallable.function] , but always sets the URL to `sass:map` .
0 commit comments