56 lines
2.4 KiB
C#
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;
|
|
}
|
|
}
|