in ILRepack/LineNumberWriter.cs [21:76]
public void AddMapping(int ilOffset, int linenumber)
{
if (count == 0)
{
if (ilOffset == 0 && linenumber != 0)
{
prevLineNum = linenumber;
count++;
WritePackedInteger(linenumber - (64 + 50));
return;
}
else
{
prevLineNum = linenumber & ~3;
WritePackedInteger(((-prevLineNum / 4) - (64 + 50)));
}
}
bool pc_overflow;
bool lineno_overflow;
byte lead;
int deltaPC = ilOffset - prevILOffset;
if (deltaPC >= 0 && deltaPC < 31)
{
lead = (byte)deltaPC;
pc_overflow = false;
}
else
{
lead = (byte)31;
pc_overflow = true;
}
int deltaLineNo = linenumber - prevLineNum;
const int bias = 2;
if (deltaLineNo >= -bias && deltaLineNo < 7 - bias)
{
lead |= (byte)((deltaLineNo + bias) << 5);
lineno_overflow = false;
}
else
{
lead |= (byte)(7 << 5);
lineno_overflow = true;
}
stream.WriteByte(lead);
if (pc_overflow)
{
WritePackedInteger(deltaPC - (64 + 31));
}
if (lineno_overflow)
{
WritePackedInteger(deltaLineNo);
}
prevILOffset = ilOffset;
prevLineNum = linenumber;
count++;
}