public void GenerateSave(IILGen ilGenerator, Action<IILGen> pushWriter, Action<IILGen> pushCtx, Action<IILGen> pushValue, Type valueType)
{
pushWriter(ilGenerator);
pushValue(ilGenerator);
if (valueType==typeof(byte[]))
ilGenerator.Call(() => default(AbstractBufferedWriter).WriteByteArray(null));
else if (valueType==typeof(ByteBuffer))
ilGenerator.Call(() => default(AbstractBufferedWriter).WriteByteArray(ByteBuffer.NewEmpty()));
else throw new ArgumentOutOfRangeException(nameof(valueType));
}