Antmicro.Migrant.Generators.WriterGenerationContext.PushNullReferenceOnStack C# (CSharp) Method

PushNullReferenceOnStack() public method

public PushNullReferenceOnStack ( ) : void
return void
        public void PushNullReferenceOnStack()
        {
            PushPrimitiveWriterOntoStack();
            generator.Emit(OpCodes.Ldc_I4, Consts.NullObjectId);
            generator.Call<PrimitiveWriter>(x => x.Write(0));
        }

Usage Example

Beispiel #1
0
        internal static void GenerateWriteDeferredReference(WriterGenerationContext context, Variable valueLocal, Type formalType)
        {
            var finish         = context.Generator.DefineLabel();
            var isNotNull      = context.Generator.DefineLabel();
            var isNotTransient = context.Generator.DefineLabel();

            context.Generator.PushVariableOntoStack(valueLocal);
            context.Generator.Emit(OpCodes.Brtrue_S, isNotNull);

            context.PushNullReferenceOnStack();
            context.Generator.Emit(OpCodes.Br, finish);

            context.Generator.MarkLabel(isNotNull);
            var formalTypeIsActualType = (formalType.Attributes & TypeAttributes.Sealed) != 0;

            if (!formalTypeIsActualType)
            {
                context.Generator.PushVariableOntoStack(valueLocal);
                context.Generator.Call(() => Helpers.IsTransient((object)null));

                context.Generator.Emit(OpCodes.Brfalse_S, isNotTransient);
                context.PushNullReferenceOnStack();
                context.Generator.Emit(OpCodes.Br, finish);

                context.Generator.MarkLabel(isNotTransient);
                context.PushObjectWriterOntoStack();
                context.Generator.PushVariableOntoStack(valueLocal);
                context.Generator.Call <ObjectWriter>(x => x.WriteDeferredReference(null));
            }
            else
            {
                if (Helpers.IsTransient(formalType))
                {
                    context.PushNullReferenceOnStack();
                }
                else
                {
                    context.PushObjectWriterOntoStack();
                    context.Generator.PushVariableOntoStack(valueLocal);
                    context.Generator.Call <ObjectWriter>(x => x.WriteDeferredReference(null));
                }
            }
            context.Generator.MarkLabel(finish);
        }