private void EnsureInitialized(DictionaryAnalysisData <AnalysisEntity, TAbstractAnalysisValue> input) { if (input.Count == 0) { input[GlobalEntity] = ValueDomain.Bottom; } else { Debug.Assert(input.ContainsKey(GlobalEntity)); } }
public override CoreCopyAnalysisData Merge(CoreCopyAnalysisData map1, CoreCopyAnalysisData map2) { Debug.Assert(map1 != null); Debug.Assert(map2 != null); CopyAnalysisData.AssertValidCopyAnalysisData(map1); CopyAnalysisData.AssertValidCopyAnalysisData(map2); var result = new DictionaryAnalysisData <AnalysisEntity, CopyAbstractValue>(); foreach (var kvp in map1) { var key = kvp.Key; var value1 = kvp.Value; // If the key exists in both maps, use the merged value. // Otherwise, use the default value. CopyAbstractValue mergedValue; if (map2.TryGetValue(key, out var value2)) { mergedValue = ValueDomain.Merge(value1, value2); } else { mergedValue = _getDefaultCopyValue(key); } result.Add(key, mergedValue); } foreach (var kvp in map2) { if (!result.ContainsKey(kvp.Key)) { result.Add(kvp.Key, _getDefaultCopyValue(kvp.Key)); } } CopyAnalysisData.AssertValidCopyAnalysisData(result); return(result); }
#pragma warning disable CA1725 // Parameter names should match base declaration public override CoreCopyAnalysisData Merge(CoreCopyAnalysisData map1, CoreCopyAnalysisData map2) #pragma warning restore CA1725 // Parameter names should match base declaration { CopyAnalysisData.AssertValidCopyAnalysisData(map1); CopyAnalysisData.AssertValidCopyAnalysisData(map2); var result = new DictionaryAnalysisData <AnalysisEntity, CopyAbstractValue>(); foreach (var kvp in map1) { var key = kvp.Key; var value1 = kvp.Value; // If the key exists in both maps, use the merged value. // Otherwise, use the default value. CopyAbstractValue mergedValue; if (map2.TryGetValue(key, out var value2)) { mergedValue = ValueDomain.Merge(value1, value2); } else { mergedValue = _getDefaultCopyValue(key); } result.Add(key, mergedValue); } foreach (var kvp in map2) { if (!result.ContainsKey(kvp.Key)) { result.Add(kvp.Key, _getDefaultCopyValue(kvp.Key)); } } CopyAnalysisData.AssertValidCopyAnalysisData(result); return(result); }