protected static void EmitValueTypeLoadAddress(YaleIlGenerator ilg, Type targetType) { var index = ilg.GetTempLocalIndex(targetType); Utility.EmitStoreLocal(ilg, index); ilg.Emit(OpCodes.Ldloca_S, Convert.ToByte(index)); }
public override void Emit(YaleIlGenerator ilGenerator, ExpressionContext context) { var index = ilGenerator.GetTempLocalIndex(typeof(DateTime)); Utility.EmitLoadLocalAddress(ilGenerator, index); EmitLoad(_value.Ticks, ilGenerator); var constructor = typeof(DateTime).GetConstructor(new[] { typeof(Int64) }); ilGenerator.Emit(OpCodes.Call, constructor); Utility.EmitLoadLocal(ilGenerator, index); }
public override void Emit(YaleIlGenerator ilGenerator, ExpressionContext context) { var index = ilGenerator.GetTempLocalIndex(typeof(decimal)); Utility.EmitLoadLocalAddress(ilGenerator, index); var bits = decimal.GetBits(_value); EmitLoad(bits[0], ilGenerator); EmitLoad(bits[1], ilGenerator); EmitLoad(bits[2], ilGenerator); var flags = bits[3]; EmitLoad((flags >> 31) == -1, ilGenerator); EmitLoad(flags >> 16, ilGenerator); ilGenerator.Emit(OpCodes.Call, OurConstructorInfo); Utility.EmitLoadLocal(ilGenerator, index); }