public override void Generate (ILGenerator gen) { if (incMet != null) { CodeGenerationHelper.GenerateMethodCall (gen, null, incMet, exp); return; } exp.Generate (gen); Type t = exp.GetResultType (); switch (Type.GetTypeCode (t)) { case TypeCode.Byte: gen.Emit (OpCodes.Ldc_I4_1); gen.Emit (OpCodes.Add); gen.Emit (OpCodes.Conv_U1); break; case TypeCode.Double: gen.Emit (OpCodes.Ldc_R8, 1); gen.Emit (OpCodes.Add); break; case TypeCode.Int16: gen.Emit (OpCodes.Ldc_I4_1); gen.Emit (OpCodes.Add); gen.Emit (OpCodes.Conv_I2); break; case TypeCode.UInt32: case TypeCode.Int32: gen.Emit (OpCodes.Ldc_I4_1); gen.Emit (OpCodes.Add); break; case TypeCode.UInt64: case TypeCode.Int64: gen.Emit (OpCodes.Ldc_I4_1); gen.Emit (OpCodes.Add); gen.Emit (OpCodes.Conv_U8); break; case TypeCode.SByte: gen.Emit (OpCodes.Ldc_I4_1); gen.Emit (OpCodes.Add); gen.Emit (OpCodes.Conv_I1); break; case TypeCode.Single: gen.Emit (OpCodes.Ldc_R4, 1); gen.Emit (OpCodes.Add); break; case TypeCode.UInt16: gen.Emit (OpCodes.Ldc_I4_1); gen.Emit (OpCodes.Add); gen.Emit (OpCodes.Conv_U2); break; } }
public override void Generate(ILGenerator gen) { exp.GenerateSet(gen, new CodeAddOne(exp)); exp.Generate(gen); }
public override void Generate(ILGenerator gen) { exp.Generate(gen); Type t = exp.GetResultType(); switch (Type.GetTypeCode(t)) { case TypeCode.Byte: gen.Emit(OpCodes.Ldc_I4_1); gen.Emit(OpCodes.Add); gen.Emit(OpCodes.Conv_U1); break; case TypeCode.Decimal: MethodInfo met = typeof(Decimal).GetMethod("op_Increment"); CodeGenerationHelper.GenerateMethodCall(gen, null, met, exp); break; case TypeCode.Double: gen.Emit(OpCodes.Ldc_R8, 1); gen.Emit(OpCodes.Add); break; case TypeCode.Int16: gen.Emit(OpCodes.Ldc_I4_1); gen.Emit(OpCodes.Add); gen.Emit(OpCodes.Conv_I2); break; case TypeCode.UInt32: case TypeCode.Int32: gen.Emit(OpCodes.Ldc_I4_1); gen.Emit(OpCodes.Add); break; case TypeCode.UInt64: case TypeCode.Int64: gen.Emit(OpCodes.Ldc_I4_1); gen.Emit(OpCodes.Add); gen.Emit(OpCodes.Conv_U8); break; case TypeCode.SByte: gen.Emit(OpCodes.Ldc_I4_1); gen.Emit(OpCodes.Add); gen.Emit(OpCodes.Conv_I1); break; case TypeCode.Single: gen.Emit(OpCodes.Ldc_R4, 1); gen.Emit(OpCodes.Add); break; case TypeCode.UInt16: gen.Emit(OpCodes.Ldc_I4_1); gen.Emit(OpCodes.Add); gen.Emit(OpCodes.Conv_U2); break; } exp.GenerateSet(gen, exp); }