internal void SerializeLocalSlots(Cci.BlobWriter writer) { int syntaxOffsetBaseline = -1; foreach (LocalSlotDebugInfo localSlot in this.LocalSlots) { if (localSlot.Id.SyntaxOffset < syntaxOffsetBaseline) { syntaxOffsetBaseline = localSlot.Id.SyntaxOffset; } } if (syntaxOffsetBaseline != -1) { writer.WriteByte(SyntaxOffsetBaseline); writer.WriteCompressedUInt((uint)(-syntaxOffsetBaseline)); } foreach (LocalSlotDebugInfo localSlot in this.LocalSlots) { SynthesizedLocalKind kind = localSlot.SynthesizedKind; Debug.Assert(kind <= SynthesizedLocalKind.MaxValidValueForLocalVariableSerializedToDebugInformation); if (!kind.IsLongLived()) { writer.WriteByte(0); continue; } byte b = (byte)(kind + 1); Debug.Assert((b & (1 << 7)) == 0); bool hasOrdinal = localSlot.Id.Ordinal > 0; if (hasOrdinal) { b |= 1 << 7; } writer.WriteByte(b); writer.WriteCompressedUInt((uint)(localSlot.Id.SyntaxOffset - syntaxOffsetBaseline)); if (hasOrdinal) { writer.WriteCompressedUInt((uint)localSlot.Id.Ordinal); } } }
internal void SerializeLambdaMap(Cci.BlobWriter writer) { Debug.Assert(this.MethodOrdinal >= -1); writer.WriteCompressedUInt((uint)(this.MethodOrdinal + 1)); int syntaxOffsetBaseline = -1; foreach (ClosureDebugInfo info in this.Closures) { if (info.SyntaxOffset < syntaxOffsetBaseline) { syntaxOffsetBaseline = info.SyntaxOffset; } } foreach (LambdaDebugInfo info in this.Lambdas) { if (info.SyntaxOffset < syntaxOffsetBaseline) { syntaxOffsetBaseline = info.SyntaxOffset; } } writer.WriteCompressedUInt((uint)(-syntaxOffsetBaseline)); writer.WriteCompressedUInt((uint)this.Closures.Length); foreach (ClosureDebugInfo info in this.Closures) { writer.WriteCompressedUInt((uint)(info.SyntaxOffset - syntaxOffsetBaseline)); } foreach (LambdaDebugInfo info in this.Lambdas) { Debug.Assert(info.ClosureOrdinal >= LambdaDebugInfo.MinClosureOrdinal); Debug.Assert(info.LambdaId.Generation == 0); writer.WriteCompressedUInt((uint)(info.SyntaxOffset - syntaxOffsetBaseline)); writer.WriteCompressedUInt((uint)(info.ClosureOrdinal - LambdaDebugInfo.MinClosureOrdinal)); } }