File: Contracts\EditAndContinue\ActiveStatementFlags.cs
Web Access
Project: src\src\Features\Core\Portable\Microsoft.CodeAnalysis.Features.csproj (Microsoft.CodeAnalysis.Features)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System;
 
namespace Microsoft.CodeAnalysis.Contracts.EditAndContinue;
 
/// <summary>
/// Flags regarding active statements information.
/// </summary>
[Flags]
internal enum ActiveStatementFlags
{
    None = 0,
 
    /// <summary>
    /// At least one of the threads whom this active statement belongs to is in a leaf frame.
    /// </summary>
    LeafFrame = 1,
 
    /// <summary>
    /// The statement is partially executed.
    /// </summary>
    /// <remarks>
    /// An active statement is partially executed if the thread is stopped in between two sequence points.
    /// This may happen when the users steps through the code in disassembly window (stepping over machine instructions),
    /// when the compiler emits a call to Debugger.Break (VB Stop statement), etc.
    /// 
    /// Partially executed active statement can't be edited.
    /// </remarks>
    PartiallyExecuted = 2,
 
    /// <summary>
    /// The statement IL is not in user code.
    /// </summary>
    NonUserCode = 4,
 
    /// <summary>
    /// Indicates that the active statement instruction belongs to the latest version of the containing method.
    /// If not set, the containing method was updated but the active statement was not remapped yet because the thread 
    /// has not returned to that instruction yet and was not remapped to the new version.
    /// </summary>
    /// <remarks>
    /// When the debugger asks the CLR for the active statement information it compares ICorDebugFunction.GetVersionNumber()
    /// and ICorDebugFunction.GetCurrentVersionNumber() to determine the value of this flag.
    /// </remarks>
    MethodUpToDate = 8,
 
    /// <summary>
    /// At least one of the threads whom this active statement belongs to is in a non-leaf frame.
    /// </summary>
    NonLeafFrame = 16,
 
    /// <summary>
    /// When applying updates while the code is executing, we will not attempt any remap for methods which are on the
    /// executing stack. This is done so we can avoid blocking an edit due an executing active statement. 
    /// Language services needs to acknowledge such active statements when emitting further remap information.
    /// </summary>
    Stale = 32
}