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 locations, bool cannotUse, bool isImplicitlyDeclared, FieldSymbol? correspondingDefaultFieldOpt) : base(container, underlyingField, tupleElementIndex, locations, isImplicitlyDeclared, correspondingDefaultFieldOpt) { _name = name; _cannotUse = cannotUse; } internal override UseSiteInfo 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((DiagnosticInfo)(object)new CSDiagnosticInfo(ErrorCode.ERR_TupleInferredNamesNotAvailable, _name, new CSharpRequiredLanguageVersion(MessageID.IDS_FeatureInferredTupleNames.RequiredVersion()))); } return base.GetUseSiteInfo(); } internal override TypeWithAnnotations GetFieldType(ConsList fieldsBeingBound) { return _underlyingField.GetFieldType(fieldsBeingBound); } public override ImmutableArray 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); } }