tableMethod() && !pMD->GetClass()->IsValueClass()) { OBJECTREF curobj = GetActiveObject(pPFrame); if (curobj != 0) pDispatchingMT = curobj->GetMethodTable(); } return pMD->DoPrestub(pDispatchingMT); } PreStubWorker 函数的参数是一个方法帧,从中可以获取当前函数的 MD,进而调用此方法的 DoPresub 函数完成实际工作。而 MethodDesc:oPrestub 方法(vm/prestub.cpp:590)中,在进行实际代码生成时,会根据方法的类型进行各种特殊情况的处理: 以下内容为程序代码: const BYTE * MethodDesc:[img]/images/biggrin.gif[/img]oPrestub(MethodTable *pDispatchingMT) { Stub *pStub = NULL; //... if (IsSpecialStub()) { //... } else if (IsIL()) { //... } else //!IsSpecialStub() && !IsIL() case { if (IsECall()) { // See if it is an FCALL and already "jitted页码:[1] [2] [3] [4] [5] [6] [7] [8] [9] 第5页、共9页 |