private static ImmutableArray <bool> GetFlags(DynamicLocalInfo bucket) { int flagCount = bucket.FlagCount; ulong flags = bucket.Flags; var builder = ArrayBuilder <bool> .GetInstance(flagCount); for (int i = 0; i < flagCount; i++) { builder.Add((flags & (1u << i)) != 0); } return(builder.ToImmutableAndFree()); }
private static BlobHandle SerializeDynamicLocalBlob(MetadataBuilder metadataBuilder, DynamicLocalInfo dynamicInfo) { Debug.Assert(dynamicInfo.FlagCount > 0); Debug.Assert(dynamicInfo.Flags != 0); var builder = new BlobBuilder(); int c = dynamicInfo.FlagCount - 1; ulong flags = dynamicInfo.Flags; // trim trailing 0s: while ((flags & (1u << c)) == 0) { c--; } int b = 0; int shift = 0; for (int i = 0; i <= c; i++) { bool bit = (flags & (1u << c)) != 0; if (bit) { b |= 1 << shift; } if (shift == 7) { builder.WriteByte((byte)b); b = 0; shift = 0; } else { shift++; } } if (b != 0) { builder.WriteByte((byte)b); } return(metadataBuilder.GetOrAddBlob(builder)); }