extern "C" Object * __isinst_class(void * p, MethodTable * pTargetMT) { Object * o = (Object *)p; if (o == NULL) return o; MethodTable * pMT = o->RawGetMethodTable(); do { if (pMT == pTargetMT) return o; if (pMT->IsArray()) break; pMT = pMT->GetParent(); } while (pMT); // TODO: Handle corner cases return NULL; }
extern "C" Object * __castclass_class(void * p, MethodTable * pTargetMT) { Object * o = (Object *)p; if (o == NULL) return o; MethodTable * pMT = o->RawGetMethodTable(); do { if (pMT == pTargetMT) return o; if (pMT->IsArray()) break; pMT = pMT->GetParent(); } while (pMT); // TODO: Handle corner cases, throw proper exception throw "__castclass_class"; }