blob: 796ffce38953afe37e97f4e38f3fcacaf4a91457 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using Internal.TypeSystem;
using Internal.TypeSystem.Ecma;
namespace ILCompiler.DependencyAnalysis
{
/// <summary>
/// Represents a method that is imported from the runtime library.
/// </summary>
public class RuntimeImportMethodNode : ExternSymbolNode, IMethodNode, IExportableSymbolNode
{
private MethodDesc _method;
public RuntimeImportMethodNode(MethodDesc method)
: base(((EcmaMethod)method).GetRuntimeImportName())
{
_method = method;
}
public MethodDesc Method
{
get
{
return _method;
}
}
public ExportForm GetExportForm(NodeFactory factory)
{
// Force non-fake exports for RuntimeImportMethods that have '*' as their module. ('*' means the method is
// REALLY a reference to the linked in native code)
if (((EcmaMethod)_method).GetRuntimeImportDllName() == "*")
{
ExportForm exportForm = factory.CompilationModuleGroup.GetExportMethodForm(_method, false);
if (exportForm == ExportForm.ByName)
return ExportForm.None; // Method symbols exported by name are naturally handled by the linker
return exportForm;
}
return ExportForm.None;
}
public override int ClassCode => -1173492615;
public override int CompareToImpl(ISortableNode other, CompilerComparer comparer)
{
return comparer.Compare(_method, ((RuntimeImportMethodNode)other)._method);
}
}
}
|