public void EmitRead(Compiler.CompilerContext ctx, Compiler.Local valueFrom)

        {
            ctx.LoadValue(valueFrom);

            ctx.CastToObject(type);

            ctx.LoadReaderWriter();

            ctx.LoadValue(ctx.MapMetaKeyToCompiledKey(key));

            if (type == ctx.MapType(typeof(object)))
            {
                ctx.LoadNullRef();
            }

            else
            {
                ctx.LoadValue(type);
            }

            ctx.LoadValue((int)options);

            ctx.EmitCall(ctx.MapType(typeof(BclHelpers)).GetMethod("ReadNetObject"));

            ctx.CastFromObject(type);
        }
Exemple #2
0
 public void EmitWrite(Compiler.CompilerContext ctx, Compiler.Local valueFrom)
 {
     ctx.LoadValue(valueFrom);
     ctx.CastToObject(type);
     ctx.LoadReaderWriter();
     ctx.LoadValue(ctx.MapMetaKeyToCompiledKey(key));
     ctx.LoadValue((int)options);
     ctx.EmitCall(ctx.MapType(typeof(BclHelpers)).GetMethod("WriteNetObject"));
 }
 public void EmitWrite(Compiler.CompilerContext ctx, Compiler.Local valueFrom)
 {
     ctx.LoadValue(valueFrom);
     ctx.CastToObject(ExpectedType);
     ctx.LoadWriter(true);
     ctx.LoadValue(ctx.MapMetaKeyToCompiledKey(key));
     ctx.LoadValue((int)options);
     ctx.EmitCall(Compiler.WriterUtil.GetStaticMethod <BclHelpers>("WriteNetObject"));
 }
 public void EmitWrite(Compiler.CompilerContext ctx, Compiler.Local valueFrom)
 {
     using (ctx.StartDebugBlockAuto(this))
     {
         using (var value = ctx.GetLocalWithValue(ExpectedType, valueFrom))
         {
             _subTypeHelpers.EmitWrite(ctx.G, _model[_typeKey], value);
             ctx.G.Writer.NoteLateReference(ctx.MapMetaKeyToCompiledKey(_baseTypeKey), value);
         }
     }
 }
 void IProtoSerializer.EmitWrite(Compiler.CompilerContext ctx, Compiler.Local valueFrom)
 {
     if (!EmitDedicatedMethod(ctx, valueFrom, false))
     {
         ctx.LoadValue(valueFrom);
         if (Helpers.IsValueType(type))
         {
             ctx.CastToObject(type);
         }
         ctx.LoadValue(ctx.MapMetaKeyToCompiledKey(key)); // re-map for formality, but would expect identical, else dedicated method
         ctx.LoadReaderWriter();
         ctx.EmitCall(Helpers.GetStaticMethod(ctx.MapType(typeof(ProtoWriter)), recursionCheck ?  "WriteObject" : "WriteRecursionSafeObject", new Type[] { ctx.MapType(typeof(object)), ctx.MapType(typeof(int)), ctx.MapType(typeof(ProtoWriter)) }));
     }
 }
 void IProtoSerializer.EmitRead(Compiler.CompilerContext ctx, Compiler.Local valueFrom)
 {
     if (!EmitDedicatedMethod(ctx, valueFrom, true))
     {
         ctx.LoadValue(valueFrom);
         if (Helpers.IsValueType(type))
         {
             ctx.CastToObject(type);
         }
         ctx.LoadValue(ctx.MapMetaKeyToCompiledKey(key)); // re-map for formality, but would expect identical, else dedicated method
         ctx.LoadReaderWriter();
         ctx.EmitCall(Helpers.GetStaticMethod(ctx.MapType(typeof(ProtoReader)), "ReadObject"));
         ctx.CastFromObject(type);
     }
 }
Exemple #7
0
 void IProtoSerializer.EmitWrite(Compiler.CompilerContext ctx, Compiler.Local valueFrom)
 {
     using (ctx.StartDebugBlockAuto(this))
     {
         if (!EmitDedicatedMethod(ctx, valueFrom, false))
         {
             ctx.LoadValue(valueFrom);
             if (ExpectedType.IsValueType)
             {
                 ctx.CastToObject(ExpectedType);
             }
             ctx.LoadValue(ctx.MapMetaKeyToCompiledKey(_baseKey)); // re-map for formality, but would expect identical, else dedicated method
             ctx.LoadReaderWriter();
             ctx.EmitCall(ctx.MapType(typeof(ProtoWriter)).GetMethod("WriteRecursionSafeObject"));
         }
     }
 }
        public void EmitRead(Compiler.CompilerContext ctx, Compiler.Local valueFrom)
        {
            using (ctx.StartDebugBlockAuto(this))
            {
                var g = ctx.G;
                using (var value = ctx.GetLocalWithValueForEmitRead(this, valueFrom))
                {
                    _subTypeHelpers.EmitTryRead(
                        g,
                        value,
                        _model[_typeKey],
                        r =>
                    {
                        using (ctx.StartDebugBlockAuto(this, "returnGen"))
                        {
                            if (r == null)
                            {
                                g.If(value.AsOperand == null);
                                {
                                    g.ThrowProtoException(CantCreateInstanceMessage);
                                }
                                g.End();
                                g.Reader.NoteObject(value);
                            }
                            else
                            {
                                r.Serializer.EmitCreateInstance(ctx);
                                ctx.StoreValue(value);
                            }
                            g.Reader.NoteLateReference(ctx.MapMetaKeyToCompiledKey(_baseTypeKey), value);
                        }
                    });

                    if (EmitReadReturnsValue)
                    {
                        ctx.LoadValue(value);
                    }
                }
            }
        }
        public void EmitRead(Compiler.CompilerContext ctx, Compiler.Local entity)
        {
            using (var val = ctx.GetLocalWithValue(ExpectedType, entity))
            {
                ctx.LoadReader(true);
                ctx.LoadValue(val);
                ctx.CastToObject(ExpectedType);
                ctx.LoadValue(ctx.MapMetaKeyToCompiledKey(key));
                if (ExpectedType == typeof(object))
                {
                    ctx.LoadNullRef();
                }
                else
                {
                    ctx.LoadValue(ExpectedType);
                }
                ctx.LoadValue((int)options);

                ctx.EmitCall(typeof(BclHelpers).GetMethod("ReadNetObject",
                                                          new[] { typeof(ProtoReader), Compiler.ReaderUtil.ByRefStateType, typeof(object),
                                                                  typeof(int), typeof(Type), typeof(BclHelpers.NetObjectOptions) }));
                ctx.CastFromObject(ExpectedType);
            }
        }