Files
2026-08-27 10:56:38 -06:00

59 lines
2.2 KiB
C#

using System.Collections.Immutable;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.CSharp.Symbols;
internal sealed class TupleVirtualElementFieldSymbol : TupleElementFieldSymbol
{
private readonly string _name;
private readonly bool _cannotUse;
public override string Name => _name;
internal override int? TypeLayoutOffset => null;
public override FieldSymbol OriginalDefinition => this;
public override bool IsVirtualTupleField => true;
public TupleVirtualElementFieldSymbol(NamedTypeSymbol container, FieldSymbol underlyingField, string name, int tupleElementIndex, ImmutableArray<Location> locations, bool cannotUse, bool isImplicitlyDeclared, FieldSymbol? correspondingDefaultFieldOpt)
: base(container, underlyingField, tupleElementIndex, locations, isImplicitlyDeclared, correspondingDefaultFieldOpt)
{
_name = name;
_cannotUse = cannotUse;
}
internal override UseSiteInfo<AssemblySymbol> GetUseSiteInfo()
{
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
if (_cannotUse)
{
return new UseSiteInfo<AssemblySymbol>((DiagnosticInfo)(object)new CSDiagnosticInfo(ErrorCode.ERR_TupleInferredNamesNotAvailable, _name, new CSharpRequiredLanguageVersion(MessageID.IDS_FeatureInferredTupleNames.RequiredVersion())));
}
return base.GetUseSiteInfo();
}
internal override TypeWithAnnotations GetFieldType(ConsList<FieldSymbol> fieldsBeingBound)
{
return _underlyingField.GetFieldType(fieldsBeingBound);
}
public override ImmutableArray<CSharpAttributeData> GetAttributes()
{
return _underlyingField.GetAttributes();
}
internal override FieldSymbol AsMember(NamedTypeSymbol newOwner)
{
NamedTypeSymbol newUnderlyingOwner = GetNewUnderlyingOwner(newOwner);
FieldSymbol correspondingDefaultFieldOpt = null;
if ((object)_correspondingDefaultField != this)
{
correspondingDefaultFieldOpt = _correspondingDefaultField.OriginalDefinition.AsMember(newOwner);
}
return new TupleVirtualElementFieldSymbol(newOwner, _underlyingField.OriginalDefinition.AsMember(newUnderlyingOwner), _name, TupleElementIndex, Locations, _cannotUse, IsImplicitlyDeclared, correspondingDefaultFieldOpt);
}
}