Beispiel #1
0
		public override void Emit(FleeILGenerator ilg, System.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);
		}
Beispiel #2
0
		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);
		}
Beispiel #3
0
		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));
		}
Beispiel #4
0
        // Load a PropertyDescriptor based property
		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);
		}