Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
                    }
                }
            }
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }