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

56 lines
2.4 KiB
C#

using System.Collections.Immutable;
using Microsoft.Cci;
using Microsoft.CodeAnalysis.CSharp.Emit.NoPia;
using Microsoft.CodeAnalysis.CSharp.Symbols;
using Microsoft.CodeAnalysis.Emit;
namespace Microsoft.CodeAnalysis.CSharp.Emit;
internal sealed class SpecializedFieldReference : TypeMemberReference, ISpecializedFieldReference, IFieldReference, ITypeMemberReference, IReference, INamedEntity
{
private readonly FieldSymbol _underlyingField;
protected override Symbol UnderlyingSymbol => _underlyingField;
IFieldReference ISpecializedFieldReference.UnspecializedVersion => (IFieldReference)(object)_underlyingField.OriginalDefinition.GetCciAdapter();
ISpecializedFieldReference IFieldReference.AsSpecializedFieldReference => (ISpecializedFieldReference)(object)this;
ImmutableArray<ICustomModifier> IFieldReference.RefCustomModifiers => ImmutableArray<ICustomModifier>.CastUp<CustomModifier>(_underlyingField.RefCustomModifiers);
bool IFieldReference.IsByReference => (int)_underlyingField.RefKind > 0;
bool IFieldReference.IsContextualNamedEntity => false;
public SpecializedFieldReference(FieldSymbol underlyingField)
{
_underlyingField = underlyingField;
}
public override void Dispatch(MetadataVisitor visitor)
{
visitor.Visit((IFieldReference)(object)this);
}
ITypeReference IFieldReference.GetType(EmitContext context)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Expected O, but got Unknown
TypeWithAnnotations typeWithAnnotations = _underlyingField.TypeWithAnnotations;
ImmutableArray<CustomModifier> customModifiers = typeWithAnnotations.CustomModifiers;
ITypeReference val = ((PEModuleBuilder<CSharpCompilation, SourceModuleSymbol, AssemblySymbol, TypeSymbol, NamedTypeSymbol, MethodSymbol, SyntaxNode, EmbeddedTypesManager, ModuleCompilationState>)(PEModuleBuilder)(object)context.Module).Translate(typeWithAnnotations.Type, (SyntaxNode)(object)(CSharpSyntaxNode)(object)((EmitContext)(ref context)).SyntaxNode, context.Diagnostics);
if (customModifiers.Length == 0)
{
return val;
}
return (ITypeReference)new ModifiedTypeReference(val, ImmutableArray<ICustomModifier>.CastUp<CustomModifier>(customModifiers));
}
IFieldDefinition IFieldReference.GetResolvedField(EmitContext context)
{
return null;
}
}