60 {
61 if(count == 0)
62 {
63 if(ilOffset == 0 && linenumber != 0)
64 {
65 prevLineNum = linenumber;
66 count++;
67 WritePackedInteger(linenumber - (64 + 50));
68 return;
69 }
70 else
71 {
72 prevLineNum = linenumber & ~3;
73 WritePackedInteger(((-prevLineNum / 4) - (64 + 50)));
74 }
75 }
76 bool pc_overflow;
77 bool lineno_overflow;
78 byte lead;
79 int deltaPC = ilOffset - prevILOffset;
80 if(deltaPC >= 0 && deltaPC < 31)
81 {
82 lead = (byte)deltaPC;
83 pc_overflow = false;
84 }
85 else
86 {
87 lead = (byte)31;
88 pc_overflow = true;
89 }
90 int deltaLineNo = linenumber - prevLineNum;
91 const int bias = 2;
92 if(deltaLineNo >= -bias && deltaLineNo < 7 - bias)
93 {
94 lead |= (byte)((deltaLineNo + bias) << 5);
95 lineno_overflow = false;
96 }
97 else
98 {
99 lead |= (byte)(7 << 5);
100 lineno_overflow = true;
101 }
102 stream.WriteByte(lead);
103 if(pc_overflow)
104 {
105 WritePackedInteger(deltaPC - (64 + 31));
106 }
107 if(lineno_overflow)
108 {
109 WritePackedInteger(deltaLineNo);
110 }
111 prevILOffset = ilOffset;
112 prevLineNum = linenumber;
113 count++;
114 }