diff options
author | Michael Letterle <mletterle@preemptive.com> | 2017-03-31 11:31:53 -0400 |
---|---|---|
committer | Russ Keldorph <russ.keldorph@microsoft.com> | 2017-04-26 12:30:48 -0700 |
commit | bf579f8fdc6dbc77c3d989b9992590d55784028e (patch) | |
tree | 13987dde9b5e8172fb538221bc31acc9ff330fb8 /src/ilasm | |
parent | 077cf9cb03213c42eef2a9df99312697ca9faa52 (diff) | |
download | coreclr-bf579f8fdc6dbc77c3d989b9992590d55784028e.tar.gz coreclr-bf579f8fdc6dbc77c3d989b9992590d55784028e.tar.bz2 coreclr-bf579f8fdc6dbc77c3d989b9992590d55784028e.zip |
Lookup System.Runtime and mscorlib references by Assembly name
Rather than by alias.
Fixes #10595
Diffstat (limited to 'src/ilasm')
-rw-r--r-- | src/ilasm/asmman.cpp | 11 | ||||
-rw-r--r-- | src/ilasm/asmman.hpp | 2 | ||||
-rw-r--r-- | src/ilasm/assembler.cpp | 16 |
3 files changed, 25 insertions, 4 deletions
diff --git a/src/ilasm/asmman.cpp b/src/ilasm/asmman.cpp index 22e780f554..47dc6eb5c5 100644 --- a/src/ilasm/asmman.cpp +++ b/src/ilasm/asmman.cpp @@ -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) { diff --git a/src/ilasm/asmman.hpp b/src/ilasm/asmman.hpp index 0ee875b805..00f4d52f13 100644 --- a/src/ilasm/asmman.hpp +++ b/src/ilasm/asmman.hpp @@ -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) diff --git a/src/ilasm/assembler.cpp b/src/ilasm/assembler.cpp index 957b0bd22b..be535abce8 100644 --- a/src/ilasm/assembler.cpp +++ b/src/ilasm/assembler.cpp @@ -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"); |