Skip to content
← Back

src/semantic/dotnet/loaded_assembly_resolver.ghul

1
namespace Semantic.DotNet is
2
use System.Reflection.Assembly
3
use System.Reflection.AssemblyName
4
use System.Reflection.MetadataAssemblyResolver
5
use System.Reflection.MetadataLoadContext
6
7
// Resolves a reference from one loaded assembly to another. The load
8
// context asks its resolver for every assembly a type's metadata names,
9
// and a path resolver knows only the paths it was built with, so an
10
// assembly added to a reference set already in use - an earlier
11
// submission, in a compile server - could not be found from a later
12
// one that refers to it. An assembly already loaded under the name is
13
// the answer; anything else is the path resolver's.
14
class LOADED_ASSEMBLY_RESOLVER(
15
_loaded: (string) -> Assembly?,
16
_fallback: MetadataAssemblyResolver
17
): MetadataAssemblyResolver is
18
resolve(context: MetadataLoadContext, assembly_name: AssemblyName) -> Assembly? is
19
if let name = assembly_name.name then
20
if let assembly = _loaded(name) then
21
return assembly
22
fi
23
fi
24
25
return _fallback.resolve(context, assembly_name)
26
si
27
si
28
si