// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System;

namespace ArduinoCsCompiler
{
    [Flags]
    public enum MethodFlags : byte
    {
        /// <summary>
        /// The method has no special properties
        /// </summary>
        None = 0,

        /// <summary>
        /// The method is static
        /// </summary>
        Static = 1,

        /// <summary>
        /// The method is virtual
        /// </summary>
        Virtual = 2,

        /// <summary>
        /// Method will resolve to a built-in function on the arduino
        /// </summary>
        SpecialMethod = 4,

        /// <summary>
        /// The method returns void
        /// </summary>
        Void = 8,

        /// <summary>
        /// The method is a constructor, which only implicitly returns "this".
        /// The flag is not used on static ctors, these are handled like an ordinary static method
        /// </summary>
        Ctor = 16,

        /// <summary>
        /// The method is abstract or an interface declaration
        /// </summary>
        Abstract = 32,

        /// <summary>
        /// The method has at least one exception clause
        /// </summary>
        ExceptionClausesPresent = 64,

        /// <summary>
        /// The method is synchronized (implicitly locked on call)
        /// </summary>
        Synchronized = 128,
    }
}