private static LiteralElement CreateImplicitReal(string image, IServiceProvider services) { var options = (ExpressionOptions)services.GetService(typeof(ExpressionOptions)); LiteralElement createImplicitReal = null; switch (options.RealLiteralDataType) { case RealLiteralDataType.Single: createImplicitReal = SingleLiteralElement.Parse(image, services); break; case RealLiteralDataType.Double: createImplicitReal = DoubleLiteralElement.Parse(image, services); break; case RealLiteralDataType.Decimal: createImplicitReal = DecimalLiteralElement.Parse(image, services); break; default: Debug.Fail("Unknown value"); break; } return(createImplicitReal); }
public static LiteralElement Create(string image, IServiceProvider services) { LiteralElement element = CreateSingle(image, services); var flag = element != null; LiteralElement create; if (flag) { create = element; } else { element = CreateDecimal(image, services); var flag2 = element != null; if (flag2) { create = element; } else { element = CreateDouble(image, services); var flag3 = element != null; if (flag3) { create = element; } else { element = CreateImplicitReal(image, services); create = element; } } } return(create); }
public static LiteralElement CreateFromInteger(string image, IServiceProvider services) { LiteralElement element = CreateSingle(image, services); var flag = element != null; LiteralElement createFromInteger; if (flag) { createFromInteger = element; } else { element = CreateDecimal(image, services); var flag2 = element != null; if (flag2) { createFromInteger = element; } else { var options = (ExpressionOptions)services.GetService(typeof(ExpressionOptions)); var integersAsDoubles = options.IntegersAsDoubles; createFromInteger = integersAsDoubles ? DoubleLiteralElement.Parse(image, services) : null; } } return(createFromInteger); }
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); }
public static LiteralElement Create(string image, bool isHex, bool negated, IServiceProvider services) { var comparison = StringComparison.OrdinalIgnoreCase; var flag = !isHex; LiteralElement Create; if (flag) { var realElement = RealLiteralElement.CreateFromInteger(image, services); var flag2 = realElement != null; if (flag2) { Create = realElement; return(Create); } } var hasUSuffix = image.EndsWith("u", comparison) & !image.EndsWith("lu", comparison); var hasLSuffix = image.EndsWith("l", comparison) & !image.EndsWith("ul", comparison); var hasULSuffix = image.EndsWith("ul", comparison) | image.EndsWith("lu", comparison); var hasSuffix = hasUSuffix | hasLSuffix | hasULSuffix; var numStyles = NumberStyles.Integer; if (isHex) { numStyles = NumberStyles.AllowHexSpecifier; image = image.Remove(0, 2); } var flag3 = !hasSuffix; if (flag3) { LiteralElement constant = Int32LiteralElement.TryCreate(image, isHex, negated); var flag4 = constant != null; if (flag4) { Create = constant; } else { constant = UInt32LiteralElement.TryCreate(image, numStyles); var flag5 = constant != null; if (flag5) { Create = constant; } else { constant = Int64LiteralElement.TryCreate(image, isHex, negated); var flag6 = constant != null; if (flag6) { Create = constant; } else { Create = new UInt64LiteralElement(image, numStyles); } } } } else { var flag7 = hasUSuffix; if (flag7) { image = image.Remove(image.Length - 1); LiteralElement constant = UInt32LiteralElement.TryCreate(image, numStyles); var flag8 = constant != null; if (flag8) { Create = constant; } else { Create = new UInt64LiteralElement(image, numStyles); } } else { var flag9 = hasLSuffix; if (flag9) { image = image.Remove(image.Length - 1); LiteralElement constant = Int64LiteralElement.TryCreate(image, isHex, negated); var flag10 = constant != null; if (flag10) { Create = constant; } else { Create = new UInt64LiteralElement(image, numStyles); } } else { Debug.Assert(hasULSuffix, "expecting ul suffix"); image = image.Remove(image.Length - 2); Create = new UInt64LiteralElement(image, numStyles); } } } return(Create); }