Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }