Ejemplo n.º 1
0
 public static void GenerateSaveEx(this ITypeDescriptor descriptor, IILGen ilGenerator, Action <IILGen> pushWriter, Action <IILGen> pushCtx, Action <IILGen> pushSubValue, Type subValueType)
 {
     if (descriptor.StoredInline)
     {
         descriptor.GenerateSave(ilGenerator, pushWriter, pushCtx, pushSubValue, subValueType);
     }
     else
     {
         ilGenerator
         .Do(pushCtx)
         .Do(pushSubValue)
         .Callvirt(() => default(ITypeBinarySerializerContext).StoreObject(null));
     }
 }
Ejemplo n.º 2
0
        Layer1ComplexSaver BuildComplexSaver(ITypeDescriptor descriptor, Type type)
        {
            var method = ILBuilder.Instance.NewMethod <Layer1ComplexSaver>(descriptor.Name + "Saver" + type.ToSimpleName());
            var il     = method.Generator;

            descriptor.GenerateSave(il, ilgen => ilgen.Ldarg(0), ilgen => ilgen.Ldarg(1), ilgen =>
            {
                ilgen.Ldarg(2);
                if (type != typeof(object))
                {
                    ilgen.UnboxAny(type);
                }
            }, type);
            il.Ret();
            return(method.Create());
        }
Ejemplo n.º 3
0
 public static void GenerateSaveEx(this ITypeDescriptor descriptor, IILGen ilGenerator,
                                   Action <IILGen> pushWriter, Action <IILGen> pushCtx, Action <IILGen> pushSubValue, Type subValueType)
 {
     if (descriptor.StoredInline)
     {
         descriptor.GenerateSave(ilGenerator, pushWriter, pushCtx, pushSubValue, subValueType);
     }
     else
     {
         ilGenerator
         .Do(pushCtx)
         .Do(pushWriter)
         .Do(pushSubValue)
         .Callvirt(typeof(ITypeBinarySerializerContext).GetMethod(nameof(ITypeBinarySerializerContext.StoreObject)) !);
     }
 }
Ejemplo n.º 4
0
        Action <AbstractBufferedWriter, ITypeBinarySerializerContext, object> NewComplexSaver(ITypeDescriptor descriptor)
        {
            var method = ILBuilder.Instance.NewMethod <Action <AbstractBufferedWriter, ITypeBinarySerializerContext, object> >(descriptor.Name + "ComplexSaver");
            var il     = method.Generator;

            descriptor.GenerateSave(il, ilgen => ilgen.Ldarg(0), ilgen => ilgen.Ldarg(1), ilgen =>
            {
                ilgen.Ldarg(2);
                var type = descriptor.GetPreferredType();
                if (type != typeof(object))
                {
                    ilgen.UnboxAny(type);
                }
            }, descriptor.GetPreferredType());
            il.Ret();
            return(method.Create());
        }
Ejemplo n.º 5
0
        Action <AbstractBufferedWriter, object> NewSimpleSaver(ITypeDescriptor descriptor)
        {
            if (descriptor.AnyOpNeedsCtx())
            {
                return(null);
            }
            var method = ILBuilder.Instance.NewMethod <Action <AbstractBufferedWriter, object> >(descriptor.Name + "SimpleSaver");
            var il     = method.Generator;

            descriptor.GenerateSave(il, ilgen => ilgen.Ldarg(0), null, ilgen =>
            {
                ilgen.Ldarg(1);
                var type = descriptor.GetPreferredType();
                if (type != typeof(object))
                {
                    ilgen.UnboxAny(type);
                }
            }, descriptor.GetPreferredType());
            il.Ret();
            return(method.Create());
        }
Ejemplo n.º 6
0
 Action<AbstractBufferedWriter, ITypeBinarySerializerContext, object> BuildComplexSaver(ITypeDescriptor descriptor)
 {
     var method = ILBuilder.Instance.NewMethod<Action<AbstractBufferedWriter, ITypeBinarySerializerContext, object>>(descriptor.Name + "Saver");
     var il = method.Generator;
     descriptor.GenerateSave(il, ilgen => ilgen.Ldarg(0), ilgen => ilgen.Ldarg(1), ilgen =>
     {
         ilgen.Ldarg(2);
         var type = descriptor.GetPreferedType();
         if (type != typeof(object))
         {
             ilgen.Castclass(type);
         }
     }, descriptor.GetPreferedType());
     il.Ret();
     return method.Create();
 }
Ejemplo n.º 7
0
 Action<AbstractBufferedWriter, object> NewSimpleSaver(ITypeDescriptor descriptor)
 {
     if (descriptor.AnyOpNeedsCtx()) return null;
     var method = ILBuilder.Instance.NewMethod<Action<AbstractBufferedWriter, object>>(descriptor.Name + "SimpleSaver");
     var il = method.Generator;
     descriptor.GenerateSave(il, ilgen => ilgen.Ldarg(0), null, ilgen =>
         {
             ilgen.Ldarg(1);
             var type = descriptor.GetPreferedType();
             if (type != typeof(object))
             {
                 ilgen.UnboxAny(type);
             }
         }, descriptor.GetPreferedType());
     il.Ret();
     return method.Create();
 }