in src/Refasmer/Importer/ReferenceAssemblyAttr.cs [71:107]
private EntityHandle FindOrCreateReferenceAssemblyAttributeCtor()
{
var ctorHandle = FindMethod(FullNames.ReferenceAssembly, ".ctor", CheckRefAsmAttrCtorSignature);
if (!IsNil(ctorHandle))
{
Trace?.Invoke($"Found {FullNames.ReferenceAssembly} constructor with void signature {_reader.ToString(ctorHandle)}");
return Import(ctorHandle);
}
Trace?.Invoke($"Not found {FullNames.ReferenceAssembly} constructor");
var runtimeRef = FindRuntimeReference();
if (!IsNil(runtimeRef))
{
Trace?.Invoke($"Found runtime reference {_reader.ToString(runtimeRef)}");
var referenceAssemblyAttrTypeRef = _builder.AddTypeReference(runtimeRef,
_builder.GetOrAddString(FullNames.CompilerServices),
_builder.GetOrAddString("ReferenceAssemblyAttribute"));
var ctor = new BlobBuilder();
new BlobEncoder(ctor).MethodSignature(isInstanceMethod: true).Parameters(0, t => t.Void(), p => { });
var ctorBlob = _builder.GetOrAddBlob(ctor);
ctorHandle = _builder.AddMemberReference(referenceAssemblyAttrTypeRef, _builder.GetOrAddString(".ctor"),
ctorBlob);
Trace?.Invoke($"Created ReferenceAssemblyAttribute constructor reference {RowId(ctorHandle)}");
return ctorHandle;
}
Trace?.Invoke($"Not found runtime reference");
return CreateCustomReferenceAssemblyAttributeCtor();
}