void QCALLTYPE COMDynamicWrite::TermCreateClass(QCall::ModuleHandle pModule, INT32 tk, QCall::ObjectHandleOnStack retType) { QCALL_CONTRACT; TypeHandle typeHnd; BEGIN_QCALL; _ASSERTE(pModule->GetReflectionModule()->GetClassWriter()); // Use the same service, regardless of whether we are generating a normal // class, or the special class for the module that holds global functions // & methods. pModule->GetReflectionModule()->AddClass(tk); // manually load the class if it is not the global type if (!IsNilToken(tk)) { TypeKey typeKey(pModule, tk); typeHnd = pModule->GetClassLoader()->LoadTypeHandleForTypeKey(&typeKey, TypeHandle()); } if (!typeHnd.IsNull()) { GCX_COOP(); retType.Set(typeHnd.GetManagedClassObject()); } END_QCALL; return; }
~ObjArrayHolder() { WRAPPER_NO_CONTRACT; GCX_COOP(); for (unsigned int i=0; i<m_numAcquired; i++) { TYPE value = (TYPE) (*m_pValues)->GetAt(i); RELEASEF(value); } }
void MethodDescBackpatchInfoTracker::AddSlotAndPatch_Locked(MethodDesc *pMethodDesc, LoaderAllocator *pLoaderAllocatorOfSlot, TADDR slot, EntryPointSlots::SlotType slotType, PCODE currentEntryPoint) { WRAPPER_NO_CONTRACT; _ASSERTE(IsLockedByCurrentThread()); _ASSERTE(pMethodDesc != nullptr); _ASSERTE(pMethodDesc->MayHaveEntryPointSlotsToBackpatch()); GCX_COOP(); UINT_PTR slotData; slotData = EntryPointSlots::ConvertSlotAndTypePairToUINT_PTR(slot, slotType); m_backpatchInfoHash.Add(pMethodDesc, slotData, pLoaderAllocatorOfSlot); EntryPointSlots::Backpatch_Locked(slot, slotType, currentEntryPoint); }
void QCALLTYPE WindowsRuntimeBufferHelper::StoreOverlappedPtrInCCW(QCall::ObjectHandleOnStack winRtBuffer, LPOVERLAPPED lpOverlapped) { QCALL_CONTRACT; BEGIN_QCALL; GCX_COOP(); OBJECTREF buffer = ObjectToOBJECTREF(*winRtBuffer.m_ppObject); ComCallWrapper *ccw = ComCallWrapper::GetWrapperForObject(buffer); SimpleComCallWrapper *simpleCCW = ccw->GetSimpleWrapper(); simpleCCW->StoreOverlappedPointer(lpOverlapped); END_QCALL; }
void MethodDescBackpatchInfoTracker::Backpatch_Locked(MethodDesc *pMethodDesc, PCODE entryPoint) { WRAPPER_NO_CONTRACT; _ASSERTE(IsLockedByCurrentThread()); _ASSERTE(pMethodDesc != nullptr); GCX_COOP(); auto lambda = [&entryPoint](OBJECTREF obj, MethodDesc *pMethodDesc, UINT_PTR slotData) { TADDR slot; EntryPointSlots::SlotType slotType; EntryPointSlots::ConvertUINT_PTRToSlotAndTypePair(slotData, &slot, &slotType); EntryPointSlots::Backpatch_Locked(slot, slotType, entryPoint); return true; // Keep walking }; m_backpatchInfoHash.VisitValuesOfKey(pMethodDesc, lambda); }