Boo.Lang.Compiler.Steps.ConstantFolding.GetLiteralValue C# (CSharp) Метод

GetLiteralValue() приватный Метод

private GetLiteralValue ( Expression node ) : object
node Boo.Lang.Compiler.Ast.Expression
Результат object
        object GetLiteralValue(Expression node)
        {
            switch (node.NodeType)
            {
                case NodeType.CastExpression:
                    return GetLiteralValue(((CastExpression) node).Target);

                case NodeType.BoolLiteralExpression:
                    return ((BoolLiteralExpression) node).Value;

                case NodeType.IntegerLiteralExpression:
                    return ((IntegerLiteralExpression) node).Value;

                case NodeType.DoubleLiteralExpression:
                    return ((DoubleLiteralExpression) node).Value;

                case NodeType.MemberReferenceExpression:
                {
                    IField field = node.Entity as IField;
                    if (null != field && field.IsLiteral)
                    {
                        if (field.Type.IsEnum)
                        {
                            object o = field.StaticValue;
                            if (null != o && o != Error.Default)
                                return o;
                        }
                        else
                        {
                            Expression e = field.StaticValue as Expression;
                            return (null != e)
                                   ? GetLiteralValue(e)
                                   : field.StaticValue;
                        }
                    }
                    break;
                }
            }
            return null;
        }