@@ -161,43 +161,6 @@ NOINLINE static ReflectClassBaseObject* GetRuntimeTypeHelper(LPVOID __me, TypeHa
161161
162162#define RETURN_CLASS_OBJECT (typeHandle, keepAlive ) FC_INNER_RETURN(ReflectClassBaseObject*, GetRuntimeTypeHelper(__me, typeHandle, keepAlive))
163163
164- NOINLINE ReflectModuleBaseObject* GetRuntimeModuleHelper (LPVOID __me, Module *pModule, OBJECTREF keepAlive)
165- {
166- FC_INNER_PROLOG_NO_ME_SETUP ();
167- if (pModule == NULL )
168- return NULL ;
169-
170- OBJECTREF refModule = pModule->GetExposedObjectIfExists ();
171- if (refModule != NULL )
172- return (ReflectModuleBaseObject*)OBJECTREFToObject (refModule);
173-
174- HELPER_METHOD_FRAME_BEGIN_RET_ATTRIB_1 (Frame::FRAME_ATTR_EXACT_DEPTH|Frame::FRAME_ATTR_CAPTURE_DEPTH_2, keepAlive);
175- refModule = pModule->GetExposedObject ();
176- HELPER_METHOD_FRAME_END ();
177-
178- FC_INNER_EPILOG ();
179- return (ReflectModuleBaseObject*)OBJECTREFToObject (refModule);
180- }
181-
182- NOINLINE AssemblyBaseObject* GetRuntimeAssemblyHelper (LPVOID __me, Assembly *pAssembly, OBJECTREF keepAlive)
183- {
184- FC_INNER_PROLOG_NO_ME_SETUP ();
185- if (pAssembly == NULL )
186- return NULL ;
187-
188- OBJECTREF refAssembly = (pAssembly != NULL ) ? pAssembly->GetExposedObjectIfExists () : NULL ;
189-
190- if (refAssembly != NULL )
191- return (AssemblyBaseObject*)OBJECTREFToObject (refAssembly);
192-
193- HELPER_METHOD_FRAME_BEGIN_RET_ATTRIB_1 (Frame::FRAME_ATTR_EXACT_DEPTH|Frame::FRAME_ATTR_CAPTURE_DEPTH_2, keepAlive);
194- refAssembly = pAssembly->GetExposedObject ();
195- HELPER_METHOD_FRAME_END ();
196-
197- FC_INNER_EPILOG ();
198- return (AssemblyBaseObject*)OBJECTREFToObject (refAssembly);
199- }
200-
201164FCIMPL1 (ReflectClassBaseObject*, RuntimeTypeHandle::GetRuntimeType, EnregisteredTypeHandle th)
202165{
203166 FCALL_CONTRACT;
@@ -298,23 +261,35 @@ FCIMPL1(INT32, RuntimeTypeHandle::GetCorElementType, ReflectClassBaseObject *pTy
298261}
299262FCIMPLEND
300263
301- FCIMPL1 (AssemblyBaseObject*, RuntimeTypeHandle::GetAssembly, ReflectClassBaseObject *pTypeUNSAFE) {
302- CONTRACTL {
303- FCALL_CHECK;
304- }
305- CONTRACTL_END;
264+ FCIMPL1 (AssemblyBaseObject*, RuntimeTypeHandle::GetAssemblyIfExists, ReflectClassBaseObject *pTypeUNSAFE)
265+ {
266+ FCALL_CONTRACT;
306267
307268 REFLECTCLASSBASEREF refType = (REFLECTCLASSBASEREF)ObjectToOBJECTREF (pTypeUNSAFE);
308-
309269 if (refType == NULL )
310- FCThrowRes ( kArgumentNullException , W ( " Arg_InvalidHandle " )) ;
270+ return NULL ;
311271
312272 Assembly* pAssembly = refType->GetType ().GetAssembly ();
313-
314- FC_RETURN_ASSEMBLY_OBJECT (pAssembly, refType );
273+ OBJECTREF refAssembly = pAssembly-> GetExposedObjectIfExists ();
274+ return (AssemblyBaseObject*) OBJECTREFToObject (refAssembly );
315275}
316276FCIMPLEND
317277
278+ extern " C" void QCALLTYPE RuntimeTypeHandle_GetAssemblySlow (QCall::ObjectHandleOnStack type, QCall::ObjectHandleOnStack assembly)
279+ {
280+ QCALL_CONTRACT;
281+
282+ BEGIN_QCALL;
283+ GCX_COOP ();
284+
285+ if (type.Get () == NULL )
286+ COMPlusThrow (kArgumentNullException , W (" Arg_InvalidHandle" ));
287+
288+ Assembly* pAssembly = ((REFLECTCLASSBASEREF)type.Get ())->GetType ().GetAssembly ();
289+ assembly.Set (pAssembly->GetExposedObject ());
290+ END_QCALL;
291+ }
292+
318293FCIMPL1 (FC_BOOL_RET, RuntimeFieldHandle::AcquiresContextFromThis, FieldDesc* pField)
319294{
320295 CONTRACTL {
@@ -351,25 +326,35 @@ FCIMPL1(Object*, RuntimeFieldHandle::GetLoaderAllocator, FieldDesc* pField)
351326}
352327FCIMPLEND
353328
354- FCIMPL1 (ReflectModuleBaseObject*, RuntimeTypeHandle::GetModule, ReflectClassBaseObject *pTypeUNSAFE) {
355- CONTRACTL {
356- FCALL_CHECK;
357- }
358- CONTRACTL_END;
359-
360- Module *result;
329+ FCIMPL1 (ReflectModuleBaseObject*, RuntimeTypeHandle::GetModuleIfExists, ReflectClassBaseObject *pTypeUNSAFE)
330+ {
331+ FCALL_CONTRACT;
361332
362333 REFLECTCLASSBASEREF refType = (REFLECTCLASSBASEREF)ObjectToOBJECTREF (pTypeUNSAFE);
363-
364334 if (refType == NULL )
365- FCThrowRes (kArgumentNullException , W (" Arg_InvalidHandle" ));
366-
367- result = refType->GetType ().GetModule ();
335+ return NULL ;
368336
369- FC_RETURN_MODULE_OBJECT (result, refType);
337+ Module* pModule = refType->GetType ().GetModule ();
338+ OBJECTREF refModule = pModule->GetExposedObjectIfExists ();
339+ return (ReflectModuleBaseObject*)OBJECTREFToObject (refModule);
370340}
371341FCIMPLEND
372342
343+ extern " C" void QCALLTYPE RuntimeTypeHandle_GetModuleSlow (QCall::ObjectHandleOnStack type, QCall::ObjectHandleOnStack module )
344+ {
345+ QCALL_CONTRACT;
346+
347+ BEGIN_QCALL;
348+ GCX_COOP ();
349+
350+ if (type.Get () == NULL )
351+ COMPlusThrow (kArgumentNullException , W (" Arg_InvalidHandle" ));
352+
353+ Module* pModule = ((REFLECTCLASSBASEREF)type.Get ())->GetType ().GetModule ();
354+ module .Set (pModule->GetExposedObject ());
355+ END_QCALL;
356+ }
357+
373358FCIMPL1 (ReflectClassBaseObject *, RuntimeTypeHandle::GetBaseType, ReflectClassBaseObject *pTypeUNSAFE) {
374359 CONTRACTL {
375360 FCALL_CHECK;
@@ -2679,17 +2664,17 @@ FCIMPL2(FieldDesc*, RuntimeFieldHandle::GetStaticFieldForGenericType, FieldDesc
26792664}
26802665FCIMPLEND
26812666
2682- FCIMPL1 (ReflectModuleBaseObject*, AssemblyHandle::GetManifestModule, AssemblyBaseObject* pAssemblyUNSAFE) {
2667+ FCIMPL1 (ReflectModuleBaseObject*, AssemblyHandle::GetManifestModule, AssemblyBaseObject* pAssemblyUNSAFE)
2668+ {
26832669 FCALL_CONTRACT;
26842670
26852671 ASSEMBLYREF refAssembly = (ASSEMBLYREF)ObjectToOBJECTREF (pAssemblyUNSAFE);
2686-
26872672 if (refAssembly == NULL )
2688- FCThrowRes (kArgumentNullException , W (" Arg_InvalidHandle" ));
2689-
2690- Assembly* currentAssembly = refAssembly->GetAssembly ();
2673+ return NULL ;
26912674
2692- FC_RETURN_MODULE_OBJECT (currentAssembly->GetModule (), refAssembly);
2675+ Module* pModule = refAssembly->GetAssembly ()->GetModule ();
2676+ OBJECTREF refModule = pModule->GetExposedObjectIfExists ();
2677+ return (ReflectModuleBaseObject*)OBJECTREFToObject (refModule);
26932678}
26942679FCIMPLEND
26952680
@@ -2716,6 +2701,20 @@ FCIMPL1(INT32, AssemblyHandle::GetToken, AssemblyBaseObject* pAssemblyUNSAFE) {
27162701}
27172702FCIMPLEND
27182703
2704+ extern " C" void QCALLTYPE AssemblyHandle_GetManifestModuleSlow (QCall::ObjectHandleOnStack assembly, QCall::ObjectHandleOnStack module )
2705+ {
2706+ QCALL_CONTRACT;
2707+
2708+ BEGIN_QCALL;
2709+ GCX_COOP ();
2710+
2711+ if (assembly.Get () == NULL )
2712+ COMPlusThrow (kArgumentNullException , W (" Arg_InvalidHandle" ));
2713+
2714+ Module* pModule = ((ASSEMBLYREF)assembly.Get ())->GetAssembly ()->GetModule ();
2715+ module .Set (pModule->GetExposedObject ());
2716+ END_QCALL;
2717+ }
27192718
27202719extern " C" void QCALLTYPE ModuleHandle_GetPEKind (QCall::ModuleHandle pModule, DWORD* pdwPEKind, DWORD* pdwMachine)
27212720{
0 commit comments