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); } } } }
private static void EmitElementArrayLoad(ExpressionElement[] elements, Type arrayElementType, FleeIlGenerator ilg, IServiceProvider services) { LiteralElement.EmitLoad(elements.Length, ilg); ilg.Emit(OpCodes.Newarr, arrayElementType); var local = ilg.DeclareLocal(arrayElementType.MakeArrayType()); var arrayLocalIndex = local.LocalIndex; Utility.EmitStoreLocal(ilg, arrayLocalIndex); var num = elements.Length - 1; for (var i = 0; i <= num; i++) { Utility.EmitLoadLocal(ilg, arrayLocalIndex); LiteralElement.EmitLoad(i, ilg); var element = elements[i]; element.Emit(ilg, services); ImplicitConverter.EmitImplicitConvert(element.ResultType, arrayElementType, ilg); Utility.EmitArrayStore(ilg, arrayElementType); } Utility.EmitLoadLocal(ilg, arrayLocalIndex); }