private static void GenerateInvokeCallbacksAndExecute(WriterGenerationContext context, bool generatePreSerializationCallback, bool generatePostSerializationCallback, Variable valueLocal, Type type, Action <WriterGenerationContext> bodyBuilder)
{
if (generatePreSerializationCallback || generatePostSerializationCallback)
{
context.Generator.BeginExceptionBlock();
}
if (generatePreSerializationCallback)
{
context.PushObjectWriterOntoStack();
context.Generator.PushFieldValueOntoStack <ObjectWriter, Action <object> >(x => x.preSerializationCallback);
context.Generator.PushVariableOntoStack(valueLocal);
context.Generator.Call <Action <object> >(x => x.Invoke(null));
}
bodyBuilder(context);
if (generatePreSerializationCallback || generatePostSerializationCallback)
{
context.Generator.BeginFinallyBlock();
}
if (generatePostSerializationCallback)
{
context.PushObjectWriterOntoStack();
context.Generator.PushFieldValueOntoStack <ObjectWriter, Action <object> >(x => x.postSerializationCallback);
context.Generator.PushVariableOntoStack(valueLocal);
context.Generator.Call <Action <object> >(x => x.Invoke(null));
}
if (generatePreSerializationCallback || generatePostSerializationCallback)
{
context.Generator.EndExceptionBlock();
}
}