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); }
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); } }
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); } }