81 lines
4.9 KiB
C#
81 lines
4.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Immutable;
|
|
using System.Reflection;
|
|
using Microsoft.Cci;
|
|
using Microsoft.CodeAnalysis.CSharp.Symbols;
|
|
using Microsoft.CodeAnalysis.Emit;
|
|
using Microsoft.CodeAnalysis.Emit.NoPia;
|
|
|
|
namespace Microsoft.CodeAnalysis.CSharp.Emit.NoPia;
|
|
|
|
internal sealed class EmbeddedMethod : CommonEmbeddedMethod<PEModuleBuilder, ModuleCompilationState, EmbeddedTypesManager, SyntaxNode, CSharpAttributeData, Symbol, AssemblySymbol, NamedTypeSymbol, FieldSymbol, MethodSymbol, EventSymbol, PropertySymbol, ParameterSymbol, TypeParameterSymbol, EmbeddedType, EmbeddedField, EmbeddedMethod, EmbeddedEvent, EmbeddedProperty, EmbeddedParameter, EmbeddedTypeParameter>
|
|
{
|
|
internal override EmbeddedTypesManager TypeManager => ((CommonEmbeddedType<PEModuleBuilder, ModuleCompilationState, EmbeddedTypesManager, SyntaxNode, CSharpAttributeData, Symbol, AssemblySymbol, NamedTypeSymbol, FieldSymbol, MethodSymbol, EventSymbol, PropertySymbol, ParameterSymbol, TypeParameterSymbol, EmbeddedType, EmbeddedField, EmbeddedMethod, EmbeddedEvent, EmbeddedProperty, EmbeddedParameter, EmbeddedTypeParameter>)base.ContainingType).TypeManager;
|
|
|
|
protected override bool IsAbstract => base.UnderlyingMethod.AdaptedMethodSymbol.IsAbstract;
|
|
|
|
protected override bool IsAccessCheckedOnOverride => base.UnderlyingMethod.AdaptedMethodSymbol.IsAccessCheckedOnOverride;
|
|
|
|
protected override bool IsConstructor => (int)base.UnderlyingMethod.AdaptedMethodSymbol.MethodKind == 1;
|
|
|
|
protected override bool IsExternal => base.UnderlyingMethod.AdaptedMethodSymbol.IsExternal;
|
|
|
|
protected override bool IsHiddenBySignature => !base.UnderlyingMethod.AdaptedMethodSymbol.HidesBaseMethodsByName;
|
|
|
|
protected override bool IsNewSlot => base.UnderlyingMethod.AdaptedMethodSymbol.IsMetadataNewSlot();
|
|
|
|
protected override IPlatformInvokeInformation PlatformInvokeData => (IPlatformInvokeInformation)(object)base.UnderlyingMethod.AdaptedMethodSymbol.GetDllImportData();
|
|
|
|
protected override bool IsRuntimeSpecial => base.UnderlyingMethod.AdaptedMethodSymbol.HasRuntimeSpecialName;
|
|
|
|
protected override bool IsSpecialName => base.UnderlyingMethod.AdaptedMethodSymbol.HasSpecialName;
|
|
|
|
protected override bool IsSealed => base.UnderlyingMethod.AdaptedMethodSymbol.IsMetadataFinal;
|
|
|
|
protected override bool IsStatic => base.UnderlyingMethod.AdaptedMethodSymbol.IsStatic;
|
|
|
|
protected override bool IsVirtual => base.UnderlyingMethod.AdaptedMethodSymbol.IsMetadataVirtual();
|
|
|
|
protected override bool ReturnValueIsMarshalledExplicitly => base.UnderlyingMethod.AdaptedMethodSymbol.ReturnValueIsMarshalledExplicitly;
|
|
|
|
protected override IMarshallingInformation ReturnValueMarshallingInformation => (IMarshallingInformation)(object)base.UnderlyingMethod.AdaptedMethodSymbol.ReturnValueMarshallingInformation;
|
|
|
|
protected override ImmutableArray<byte> ReturnValueMarshallingDescriptor => base.UnderlyingMethod.AdaptedMethodSymbol.ReturnValueMarshallingDescriptor;
|
|
|
|
protected override TypeMemberVisibility Visibility => PEModuleBuilder.MemberVisibility(base.UnderlyingMethod.AdaptedMethodSymbol);
|
|
|
|
protected override string Name => base.UnderlyingMethod.AdaptedMethodSymbol.MetadataName;
|
|
|
|
protected override bool AcceptsExtraArguments => base.UnderlyingMethod.AdaptedMethodSymbol.IsVararg;
|
|
|
|
protected override ISignature UnderlyingMethodSignature => (ISignature)(object)base.UnderlyingMethod;
|
|
|
|
protected override INamespace ContainingNamespace => (INamespace)(object)base.UnderlyingMethod.AdaptedMethodSymbol.ContainingNamespace.GetCciAdapter();
|
|
|
|
public EmbeddedMethod(EmbeddedType containingType, MethodSymbol underlyingMethod)
|
|
: base(containingType, underlyingMethod)
|
|
{
|
|
}
|
|
|
|
protected override IEnumerable<CSharpAttributeData> GetCustomAttributesToEmit(PEModuleBuilder moduleBuilder)
|
|
{
|
|
return base.UnderlyingMethod.AdaptedSymbol.GetCustomAttributesToEmit(moduleBuilder);
|
|
}
|
|
|
|
protected override ImmutableArray<EmbeddedParameter> GetParameters()
|
|
{
|
|
return EmbeddedTypesManager.EmbedParameters((CommonEmbeddedMember<PEModuleBuilder, ModuleCompilationState, EmbeddedTypesManager, SyntaxNode, CSharpAttributeData, Symbol, AssemblySymbol, NamedTypeSymbol, FieldSymbol, MethodSymbol, EventSymbol, PropertySymbol, ParameterSymbol, TypeParameterSymbol, EmbeddedType, EmbeddedField, EmbeddedMethod, EmbeddedEvent, EmbeddedProperty, EmbeddedParameter, EmbeddedTypeParameter>)(object)this, base.UnderlyingMethod.AdaptedMethodSymbol.Parameters);
|
|
}
|
|
|
|
protected override ImmutableArray<EmbeddedTypeParameter> GetTypeParameters()
|
|
{
|
|
return ImmutableArrayExtensions.SelectAsArray<TypeParameterSymbol, EmbeddedMethod, EmbeddedTypeParameter>(base.UnderlyingMethod.AdaptedMethodSymbol.TypeParameters, (Func<TypeParameterSymbol, EmbeddedMethod, EmbeddedTypeParameter>)((TypeParameterSymbol t, EmbeddedMethod m) => new EmbeddedTypeParameter(m, t.GetCciAdapter())), this);
|
|
}
|
|
|
|
protected override MethodImplAttributes GetImplementationAttributes(EmitContext context)
|
|
{
|
|
return base.UnderlyingMethod.AdaptedMethodSymbol.ImplementationAttributes;
|
|
}
|
|
}
|