|
// 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.Runtime.Serialization;
namespace Microsoft.CodeAnalysis.Contracts.EditAndContinue;
/// <summary>
/// Active statement debug information retrieved from the runtime and the PDB.
/// </summary>
/// <remarks>
/// Creates a ManagedActiveStatementDebugInfo.
/// </remarks>
/// <param name="activeInstruction">Instruction of the active statement that is being executed.</param>
/// <param name="documentName">Document name as found in the PDB, if the active statement location was determined.</param>
/// <param name="sourceSpan">Location of the closest non-hidden sequence point from the active statement.</param>
/// <param name="flags">Active statement flags shared across all threads that own the active statement.</param>
[DataContract]
internal readonly struct ManagedActiveStatementDebugInfo(
ManagedInstructionId activeInstruction,
string? documentName,
SourceSpan sourceSpan,
ActiveStatementFlags flags)
{
/// <summary>
/// The instruction of the active statement that is being executed.
/// </summary>
[DataMember(Name = "activeInstruction")]
public ManagedInstructionId ActiveInstruction { get; } = activeInstruction;
/// <summary>
/// Document name as found in the PDB, or null if the debugger can't determine the location of the active statement.
/// </summary>
[DataMember(Name = "documentName")]
public string? DocumentName { get; } = documentName;
/// <summary>
/// Location of the closest non-hidden sequence point retrieved from the PDB,
/// or default(<see cref="SourceSpan"/>) if the debugger can't determine the location of the active statement.
/// </summary>
[DataMember(Name = "sourceSpan")]
public SourceSpan SourceSpan { get; } = sourceSpan;
/// <summary>
/// Aggregated across any threads that own the active instruction.
/// </summary>
[DataMember(Name = "flags")]
public ActiveStatementFlags Flags { get; } = flags;
public bool HasSourceLocation => DocumentName != null;
}
|