Lookup System.Runtime and mscorlib references by Assembly name
authorMichael Letterle <mletterle@preemptive.com>
Fri, 31 Mar 2017 15:31:53 +0000 (11:31 -0400)
committerRuss Keldorph <russ.keldorph@microsoft.com>
Wed, 26 Apr 2017 19:30:48 +0000 (12:30 -0700)
Rather than by alias.

Fixes dotnet/coreclr#10595

Commit migrated from https://github.com/dotnet/coreclr/commit/bf579f8fdc6dbc77c3d989b9992590d55784028e

src/coreclr/src/ilasm/asmman.cpp
src/coreclr/src/ilasm/asmman.hpp
src/coreclr/src/ilasm/assembler.cpp

index 22e780f..47dc6eb 100644 (file)
@@ -131,6 +131,17 @@ mdToken             AsmMan::GetAsmRefTokByName(__in __nullterminated const char*
     AsmManAssembly* tmp = GetAsmRefByName(szAsmRefName);
     return(tmp ? tmp->tkTok : mdAssemblyRefNil);
 }
+AsmManAssembly*     AsmMan::GetAsmRefByAsmName(__in __nullterminated const char* szAsmName)
+{
+    AsmManAssembly* ret = NULL;
+    if(szAsmName)
+    {
+        for(int i=0; (ret = m_AsmRefLst.PEEK(i))&&
+            (strcmp(ret->szName,szAsmName)); i++);
+    }
+    return ret;
+}
+
 //==============================================================================================================
 void    AsmMan::SetModuleName(__inout_opt __nullterminated char* szName)
 {
index 0ee875b..00f4d52 100644 (file)
@@ -272,6 +272,8 @@ public:
     void    SetManifestResFile(__in __nullterminated char* szFileName, ULONG ulOffset);
     void    SetManifestResAsmRef(__in __nullterminated char* szAsmRefName);
 
+    AsmManAssembly*     GetAsmRefByAsmName(__in __nullterminated const char* szAsmName);
+    
     mdToken             GetFileTokByName(__in __nullterminated char* szFileName);
     mdToken             GetAsmRefTokByName(__in __nullterminated const char* szAsmRefName);
     mdToken             GetAsmTokByName(__in __nullterminated const char* szAsmName)
index 957b0bd..be535ab 100644 (file)
@@ -276,14 +276,22 @@ mdToken Assembler::GetAsmRef(__in __nullterminated const char* szName)
 
 mdToken Assembler::GetBaseAsmRef()
 {
-    if (RidFromToken(m_pManifest->GetAsmRefTokByName("System.Runtime")) != 0)
+    AsmManAssembly* sysRuntime = m_pManifest->GetAsmRefByAsmName("System.Runtime");
+    if(sysRuntime != NULL)
     {
-        return GetAsmRef("System.Runtime");
+        return GetAsmRef(sysRuntime->szAlias ? sysRuntime->szAlias : sysRuntime->szName);
     }
 
-    if (RidFromToken(m_pManifest->GetAsmRefTokByName("netstandard")) != 0)
+    AsmManAssembly* mscorlibAsm = m_pManifest->GetAsmRefByAsmName("mscorlib");
+    if(mscorlibAsm != NULL)
     {
-        return GetAsmRef("netstandard");
+        return GetAsmRef(mscorlibAsm->szAlias ? mscorlibAsm->szAlias : mscorlibAsm->szName);
+    }
+
+    AsmManAssembly* netstandardAsm = m_pManifest->GetAsmRefByAsmName("netstandard");
+    if (netstandardAsm != NULL)
+    {
+        return GetAsmRef(netstandardAsm->szAlias ? netstandardAsm->szAlias : netstandardAsm->szName);
     }
 
     return GetAsmRef("mscorlib");