void EmitNonNullWriter(WriterEmitContext ctx) { var il = ctx.Il; if (ctx.HasManifestToWrite) { ctx.WriteManifest(); } using (ctx.GetLocal <int>(out var offset)) { ctx.LoadCurrentOffset(); il.Store(offset); // add 2 for the length of variable il.LoadIntValue(2); ctx.AddToCurrentOffset(); Writer.EmitWrite(ctx); // stack empty, value written directly to the buffer ctx.LoadBuffer(offset); // stack: byte* ctx.LoadCurrentOffset(); il.Load(offset); il.Emit(OpCodes.Sub); // stack: byte*, value il.LoadIntValue(2); il.Emit(OpCodes.Sub); // -2 for length il.StoreIndirectLittleEndian(typeof(short)); // save length } }