diff options
author | Michal Strehovský <MichalStrehovsky@users.noreply.github.com> | 2018-08-17 11:13:04 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-17 11:13:04 +0300 |
commit | 9bccc04347421e51eee79ab3bab2d6546a191357 (patch) | |
tree | aab90849b3f22e54fc51999bd11357cb6eac3125 /src | |
parent | be4d490756743c78841c3b31d43bcc7840047c0c (diff) | |
parent | 6f37d094505900ae316e5c44b5b9bbf33789f75c (diff) |
Merge pull request #6233 from dotnet/nmirror
Merge nmirror to master
Diffstat (limited to 'src')
5 files changed, 20 insertions, 15 deletions
diff --git a/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ClonedConstructedEETypeNode.cs b/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ClonedConstructedEETypeNode.cs index dda4941c2..7b7642938 100644 --- a/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ClonedConstructedEETypeNode.cs +++ b/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ClonedConstructedEETypeNode.cs @@ -15,7 +15,7 @@ namespace ILCompiler.DependencyAnalysis protected override string GetName(NodeFactory factory) => this.GetMangledName(factory.NameMangler) + " cloned"; - public override ObjectNode NodeForLinkage(NodeFactory factory) => this; + public override ISymbolNode NodeForLinkage(NodeFactory factory) => this; // // A cloned type must be named differently than the type it is a clone of so the linker diff --git a/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/EETypeNode.cs b/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/EETypeNode.cs index 6299c3fff..8db7d5547 100644 --- a/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/EETypeNode.cs +++ b/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/EETypeNode.cs @@ -56,7 +56,7 @@ namespace ILCompiler.DependencyAnalysis /// | /// [Pointer Size] | Pointer to the generic argument and variance info (optional) /// </summary> - public partial class EETypeNode : ObjectNode, IExportableSymbolNode, IEETypeNode, ISymbolDefinitionNode + public partial class EETypeNode : ObjectNode, IExportableSymbolNode, IEETypeNode, ISymbolDefinitionNode, ISymbolNodeWithLinkage { protected TypeDesc _type; internal EETypeOptionalFieldsBuilder _optionalFieldsBuilder = new EETypeOptionalFieldsBuilder(); @@ -90,9 +90,9 @@ namespace ILCompiler.DependencyAnalysis return false; } - public override ObjectNode NodeForLinkage(NodeFactory factory) + public virtual ISymbolNode NodeForLinkage(NodeFactory factory) { - return (ObjectNode)factory.NecessaryTypeSymbol(_type); + return factory.NecessaryTypeSymbol(_type); } public ExportForm GetExportForm(NodeFactory factory) => factory.CompilationModuleGroup.GetExportTypeForm(Type); diff --git a/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ISymbolNode.cs b/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ISymbolNode.cs index ac5b5a2de..feca8b45e 100644 --- a/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ISymbolNode.cs +++ b/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ISymbolNode.cs @@ -32,6 +32,16 @@ namespace ILCompiler.DependencyAnalysis bool RepresentsIndirectionCell { get; } } + /// <summary> + /// Represents a symbol backed by a different symbol for object emission purposes. + /// </summary> + public interface ISymbolNodeWithLinkage : ISymbolNode + { + /// <summary> + /// Return a node that is used for linkage + /// </summary> + ISymbolNode NodeForLinkage(NodeFactory factory); + } public interface ISortableSymbolNode : ISymbolNode, ISortableNode { diff --git a/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ObjectNode.cs b/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ObjectNode.cs index 6dcf96ae8..21490cadc 100644 --- a/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ObjectNode.cs +++ b/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ObjectNode.cs @@ -51,16 +51,6 @@ namespace ILCompiler.DependencyAnalysis return false; } - /// <summary> - /// Return a node that is used for linkage - /// </summary> - /// <param name="factory"></param> - /// <returns></returns> - public virtual ObjectNode NodeForLinkage(NodeFactory factory) - { - return this; - } - public override bool HasConditionalStaticDependencies => false; public override bool HasDynamicDependencies => false; public override bool InterestingForDynamicDependencyAnalysis => false; diff --git a/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ShadowConcreteMethodNode.cs b/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ShadowConcreteMethodNode.cs index 66c9e8ef1..5f1eef5b8 100644 --- a/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ShadowConcreteMethodNode.cs +++ b/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/ShadowConcreteMethodNode.cs @@ -20,7 +20,7 @@ namespace ILCompiler.DependencyAnalysis /// method body, as if it was generated. The node acts as a symbol for the canonical /// method for convenience. /// </summary> - public class ShadowConcreteMethodNode : DependencyNodeCore<NodeFactory>, IMethodNode + public class ShadowConcreteMethodNode : DependencyNodeCore<NodeFactory>, IMethodNode, ISymbolNodeWithLinkage { /// <summary> /// Gets the canonical method body that defines the dependencies of this node. @@ -53,6 +53,11 @@ namespace ILCompiler.DependencyAnalysis CanonicalMethodNode = canonicalMethod; } + public ISymbolNode NodeForLinkage(NodeFactory factory) + { + return CanonicalMethodNode; + } + public override IEnumerable<DependencyListEntry> GetStaticDependencies(NodeFactory factory) { DependencyList dependencies = new DependencyList(); |