private void WriteMethodDataSection(WriterContext ctxt, BlobWriter writer, bool isMoreSects, Func <OpCode, object, Row> findRow) { writer.Align(4); var size = ExceptionHandlingClauses.Count * 12 + 4; var isFat = size > 0xff || ExceptionHandlingClauses.Any(m => m.IsFat()); var flags = CorILMethodSect.EHTable; if (isFat) { flags |= CorILMethodSect.FatFormat; } if (isMoreSects) { flags |= CorILMethodSect.MoreSects; } writer.WriteByte((byte)flags); if (isFat) { size = ExceptionHandlingClauses.Count * 24 + 4; writer.WriteUInt24((uint)size); } else { writer.WriteByte((byte)size); writer.WriteUInt16(0); } for (var i = 0; i < ExceptionHandlingClauses.Count; i++) { ExceptionHandlingClauses[i].Write(ctxt, writer, isFat, findRow); } }
public void Write(WriterContext ctxt, BlobWriter writer) { writer.WriteUInt32(Page); var blockSize = (uint)((Entries.Length * FixupEntry.Size) + 8); writer.WriteUInt32(blockSize); for (var i = 0; i < Entries.Length; i++) Entries[i].Write(ctxt, writer); writer.Align(4); }
private void WriteMethodDataSection(WriterContext ctxt, BlobWriter writer, bool isMoreSects, Func<OpCode, object, Row> findRow) { writer.Align(4); var size = ExceptionHandlingClauses.Count * 12 + 4; var isFat = size > 0xff || ExceptionHandlingClauses.Any(m => m.IsFat()); var flags = CorILMethodSect.EHTable; if (isFat) flags |= CorILMethodSect.FatFormat; if (isMoreSects) flags |= CorILMethodSect.MoreSects; writer.WriteByte((byte)flags); if (isFat) { size = ExceptionHandlingClauses.Count * 24 + 4; writer.WriteUInt24((uint)size); } else { writer.WriteByte((byte)size); writer.WriteUInt16(0); } for (var i = 0; i < ExceptionHandlingClauses.Count; i++) ExceptionHandlingClauses[i].Write(ctxt, writer, isFat, findRow); }