X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fflowanalysis.cs;h=267879c043b75ef8dc40f3df4f150503cd69317c;hb=f98d0799d89401853f59e4427764932d633b8935;hp=b9189c1f3d6d8aa31ef785065331a78c969c275b;hpb=0b4bc83e79ca3057693089dc7f926004bb9d9592;p=mono.git diff --git a/mcs/mcs/flowanalysis.cs b/mcs/mcs/flowanalysis.cs index b9189c1f3d6..267879c043b 100644 --- a/mcs/mcs/flowanalysis.cs +++ b/mcs/mcs/flowanalysis.cs @@ -552,7 +552,7 @@ namespace Mono.CSharp public static DefiniteAssignmentBitSet operator & (DefiniteAssignmentBitSet a, DefiniteAssignmentBitSet b) { - if (AreEqual (a, b)) + if (IsEqual (a, b)) return a; DefiniteAssignmentBitSet res; @@ -575,7 +575,7 @@ namespace Mono.CSharp public static DefiniteAssignmentBitSet operator | (DefiniteAssignmentBitSet a, DefiniteAssignmentBitSet b) { - if (AreEqual (a, b)) + if (IsEqual (a, b)) return a; DefiniteAssignmentBitSet res; @@ -678,7 +678,7 @@ namespace Mono.CSharp large_bits[index >> 5] |= (1 << (index & 31)); } - public static bool AreEqual (DefiniteAssignmentBitSet a, DefiniteAssignmentBitSet b) + static bool IsEqual (DefiniteAssignmentBitSet a, DefiniteAssignmentBitSet b) { if (a.large_bits == null) return (a.bits & ~copy_on_write_flag) == (b.bits & ~copy_on_write_flag); @@ -690,5 +690,20 @@ namespace Mono.CSharp return true; } + + public static bool IsIncluded (DefiniteAssignmentBitSet set, DefiniteAssignmentBitSet test) + { + var set_bits = set.large_bits; + if (set_bits == null) + return (set.bits & test.bits & ~copy_on_write_flag) == (set.bits & ~copy_on_write_flag); + + var test_bits = test.large_bits; + for (int i = 0; i < set_bits.Length; ++i) { + if ((set_bits[i] & test_bits[i]) != set_bits[i]) + return false; + } + + return true; + } } }