protected static void EmitValueTypeLoadAddress(FleeILGenerator ilg, Type targetType) { int index = ilg.GetTempLocalIndex(targetType); Utility.EmitStoreLocal(ilg, index); ilg.Emit(OpCodes.Ldloca_S, Convert.ToByte(index)); }
public override void Emit(FleeILGenerator ilg, IServiceProvider services) { int index = ilg.GetTempLocalIndex(typeof(TimeSpan)); Utility.EmitLoadLocalAddress(ilg, index); LiteralElement.EmitLoad(_myValue.Ticks, ilg); ilg.Emit(OpCodes.Call, _timeSpanConstructor); Utility.EmitLoadLocal(ilg, index); }
public override void Emit(FleeILGenerator ilg, IServiceProvider services) { int index = ilg.GetTempLocalIndex(typeof(DateTime)); Utility.EmitLoadLocalAddress(ilg, index); LiteralElement.EmitLoad(_myValue.Ticks, ilg); ConstructorInfo ci = typeof(DateTime).GetConstructor(new Type[] { typeof(long) }); ilg.Emit(OpCodes.Call, ci); Utility.EmitLoadLocal(ilg, index); }
public override void Emit(FleeILGenerator ilg, IServiceProvider services) { int index = ilg.GetTempLocalIndex(typeof(decimal)); Utility.EmitLoadLocalAddress(ilg, index); int[] bits = decimal.GetBits(_myValue); EmitLoad(bits[0], ilg); EmitLoad(bits[1], ilg); EmitLoad(bits[2], ilg); int flags = bits[3]; EmitLoad((flags >> 31) == -1, ilg); EmitLoad(flags >> 16, ilg); ilg.Emit(OpCodes.Call, OurConstructorInfo); Utility.EmitLoadLocal(ilg, index); }
/// <summary> /// Load a PropertyDescriptor based property /// </summary> /// <param name="ilg"></param> private void EmitVirtualPropertyLoad(FleeILGenerator ilg) { // The previous value is already on the top of the stack but we need it at the bottom // Get a temporary local index int index = ilg.GetTempLocalIndex(MyPrevious.ResultType); // Store the previous value there Utility.EmitStoreLocal(ilg, index); // Load the variable collection EmitLoadVariables(ilg); // Load the property name ilg.Emit(OpCodes.Ldstr, MyName); // Load the previous value and convert it to object Utility.EmitLoadLocal(ilg, index); ImplicitConverter.EmitImplicitConvert(MyPrevious.ResultType, typeof(object), ilg); // Call the method to get the actual value MethodInfo mi = VariableCollection.GetVirtualPropertyLoadMethod(this.ResultType); this.EmitMethodCall(mi, ilg); }