diff options
author | Rahul Kumar <rahku@microsoft.com> | 2016-10-24 14:46:40 -0700 |
---|---|---|
committer | Rahul Kumar <rahku@microsoft.com> | 2016-10-25 14:42:10 -0700 |
commit | 3556e1210f50975515ceec5abe306cb805587b51 (patch) | |
tree | 7d3a748619f44e44e337dff8bd98f3fdbcea74dc /src/vm/assemblynative.cpp | |
parent | c537c3f54282fae452f85a3975a39a7ec1c35bba (diff) | |
download | coreclr-3556e1210f50975515ceec5abe306cb805587b51.tar.gz coreclr-3556e1210f50975515ceec5abe306cb805587b51.tar.bz2 coreclr-3556e1210f50975515ceec5abe306cb805587b51.zip |
Add implementation of AppDomain.GetAssemblies
Diffstat (limited to 'src/vm/assemblynative.cpp')
-rw-r--r-- | src/vm/assemblynative.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/vm/assemblynative.cpp b/src/vm/assemblynative.cpp index 90c58fc59c..f372bcb349 100644 --- a/src/vm/assemblynative.cpp +++ b/src/vm/assemblynative.cpp @@ -807,6 +807,41 @@ Assembly* AssemblyNative::LoadFromPEImage(ICLRPrivBinder* pBinderContext, PEImag RETURN pLoadedAssembly; } +/* static */ +void QCALLTYPE AssemblyNative::GetLoadedAssembliesInternal(QCall::ObjectHandleOnStack assemblies) +{ + QCALL_CONTRACT; + + BEGIN_QCALL; + + MethodTable * pAssemblyClass = MscorlibBinder::GetClass(CLASS__ASSEMBLY); + + PTR_AppDomain pCurDomain = GetAppDomain(); + + SetSHash<PTR_DomainAssembly> assemblySet; + pCurDomain->GetCacheAssemblyList(assemblySet); + size_t nArrayElems = assemblySet.GetCount(); + PTRARRAYREF AsmArray = NULL; + + GCX_COOP(); + + GCPROTECT_BEGIN(AsmArray); + AsmArray = (PTRARRAYREF) AllocateObjectArray( (DWORD)nArrayElems, pAssemblyClass); + for(auto it = assemblySet.Begin(); it != assemblySet.End(); it++) + { + PTR_DomainAssembly assem = *it; + OBJECTREF o = (OBJECTREF)assem->GetExposedAssemblyObject(); + _ASSERTE(o != NULL); + _ASSERTE(nArrayElems > 0); + AsmArray->SetAt(--nArrayElems, o); + } + + assemblies.Set(AsmArray); + + GCPROTECT_END(); + + END_QCALL; +} /* static */ void QCALLTYPE AssemblyNative::LoadFromPath(INT_PTR ptrNativeAssemblyLoadContext, LPCWSTR pwzILPath, LPCWSTR pwzNIPath, QCall::ObjectHandleOnStack retLoadedAssembly) |