private void EmitOptimizedPower(FleeIlGenerator ilg, bool emitOverflow, bool unsigned) { var right = (Int32LiteralElement)this.myRightChild; var flag = right.Value == 0; if (flag) { ilg.Emit(OpCodes.Pop); LiteralElement.EmitLoad(1, ilg); ImplicitConverter.EmitImplicitNumericConvert(typeof(int), this.myLeftChild.ResultType, ilg); } else { var flag2 = right.Value == 1; if (!flag2) { var num = right.Value - 1; for (var i = 1; i <= num; i++) { ilg.Emit(OpCodes.Dup); } var num2 = right.Value - 1; for (var j = 1; j <= num2; j++) { this.EmitMultiply(ilg, emitOverflow, unsigned); } } } }
protected override Type GetResultType(Type leftType, Type rightType) { var flag = !ImplicitConverter.EmitImplicitNumericConvert(rightType, typeof(int), null); Type getResultType = null; if (!flag) { var flag2 = !Utility.IsIntegralType(leftType); if (flag2) { getResultType = null; } else { switch (Type.GetTypeCode(leftType)) { case TypeCode.SByte: case TypeCode.Byte: case TypeCode.Int16: case TypeCode.UInt16: case TypeCode.Int32: getResultType = typeof(int); break; case TypeCode.UInt32: getResultType = typeof(uint); break; case TypeCode.Int64: getResultType = typeof(long); break; case TypeCode.UInt64: getResultType = typeof(ulong); break; default: Debug.Assert(false, "unknown left shift operand"); break; } } } return(getResultType); }