| File: CodeGen\LocalConstantDefinition.cs | Web Access |
| Project: src\roslyn\src\Compilers\Core\Portable\Microsoft.CodeAnalysis.csproj (Microsoft.CodeAnalysis) |
// 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; using System.Collections.Immutable; using System.Diagnostics; using System.Reflection.Metadata; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.CodeGen { /// <summary> /// We need a CCI representation for local constants because they are emitted as locals in /// PDB scopes to improve the debugging experience (see LocalScopeProvider.GetConstantsInScope). /// </summary> internal sealed class LocalConstantDefinition : Cci.ILocalDefinition { public LocalConstantDefinition( string name, Location location, MetadataConstant compileTimeValue, ImmutableArray<bool> dynamicTransformFlags, ImmutableArray<string> tupleElementNames) { RoslynDebug.Assert(!RoslynString.IsNullOrEmpty(name)); RoslynDebug.Assert(compileTimeValue != null); Name = name; Location = location; CompileTimeValue = compileTimeValue; DynamicTransformFlags = dynamicTransformFlags.NullToEmpty(); TupleElementNames = tupleElementNames.NullToEmpty(); } public string Name { get; } public Location Location { get; } public MetadataConstant CompileTimeValue { get; } public Cci.ITypeReference Type => CompileTimeValue.Type; public bool IsConstant => true; public ImmutableArray<Cci.ICustomModifier> CustomModifiers => ImmutableArray<Cci.ICustomModifier>.Empty; public bool IsModified => false; public bool IsPinned => false; public bool IsReference => false; public LocalSlotConstraints Constraints => LocalSlotConstraints.None; public LocalVariableAttributes PdbAttributes => LocalVariableAttributes.None; public ImmutableArray<bool> DynamicTransformFlags { get; } public ImmutableArray<string> TupleElementNames { get; } public int SlotIndex => -1; public byte[]? Signature => null; public LocalSlotDebugInfo SlotInfo => new LocalSlotDebugInfo(SynthesizedLocalKind.UserDefined, LocalDebugId.None); } }