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); }
private CopyAnalysisData(CopyAnalysisData data1, CopyAnalysisData data2, MapAbstractDomain <AnalysisEntity, CopyAbstractValue> coreDataAnalysisDomain) : base(data1, data2, coreDataAnalysisDomain) { AssertValidCopyAnalysisData(); }
private CopyAnalysisData(CopyAnalysisData fromData) : base(fromData) { AssertValidCopyAnalysisData(); }
internal CopyBlockAnalysisResult(BasicBlock basicBlock, CopyAnalysisData blockAnalysisData) : base(basicBlock) { Data = blockAnalysisData?.CoreAnalysisData.ToImmutableDictionary() ?? ImmutableDictionary <AnalysisEntity, CopyAbstractValue> .Empty; IsReachable = blockAnalysisData?.IsReachableBlockData ?? true; }