internal Assembly DoTypeResolve (Object name_or_tb)
{
if (TypeResolve == null)
return null;
string name;
if (name_or_tb is TypeBuilder)
name = ((TypeBuilder) name_or_tb).FullName;
else
name = (string) name_or_tb;
/* Prevent infinite recursion */
Hashtable ht = type_resolve_in_progress;
if (ht == null) {
ht = new Hashtable ();
type_resolve_in_progress = ht;
}
if (ht.Contains (name))
return null;
else
ht [name] = name;
try {
foreach (Delegate d in TypeResolve.GetInvocationList ()) {
ResolveEventHandler eh = (ResolveEventHandler) d;
Assembly assembly = eh (this, new ResolveEventArgs (name));
if (assembly != null)
return assembly;
}
return null;
}
finally {
ht.Remove (name);
}
}