Code/ExpressiveOptions.cs
using System;

namespace Expressive
{
    /// <summary>
    /// Options to alter the way in which an <see cref="Expression"/> is parsed and evaluated.
    /// </summary>
    [Flags]
    public enum ExpressiveOptions
    {
        /// <summary>
        /// Specifies that no options are set.
        /// </summary>
        None = 1,

        /// <summary>
        /// Specifies case-insensitive matching.
        /// </summary>
        [Obsolete("This will be removed in future versions with IgnoreCaseForParsing, IgnoreCaseForEquality and IgnoreCaseAll replacing it.")]
        IgnoreCase = 2,

        /// <summary>
        /// No-cache mode. Ignores any pre-compiled expression in the cache.
        /// </summary>
        NoCache = 4,

        /// <summary>
        /// When using Round(), if a number is halfway between two others, it is rounded toward the nearest number that is away from zero.
        /// </summary>
        RoundAwayFromZero = 8,

        /// <summary>
        /// Specifies case-insensitive matching for parsing expressions (e.g. function/operator/variable names do not need to match case).
        /// </summary>
        IgnoreCaseForParsing = 16,

        /// <summary>
        /// Specifies case-insensitive matching for performing equality comparisons (e.g. THIS == this).
        /// </summary>
        IgnoreCaseForEquality = 32,

        /// <summary>
        /// Specifies case-insensitive matching for both parsing and performing equality comparisons.
        /// </summary>
        IgnoreCaseAll = IgnoreCaseForParsing | IgnoreCaseForEquality,

        /// <summary>
        /// All options are used.
        /// </summary>
#pragma warning disable 618 // As it is our own warning this is safe enough until we actually get rid
        All = IgnoreCase | NoCache | RoundAwayFromZero | IgnoreCaseAll
#pragma warning restore 618
    }
}