이 코드의 해석

granite의 이미지

공개 코드를 분석하다 도저히 구문을 해석할 수 없는 코드가 나와 부끄럽지만 질문드립니다.

void* execute(Class* class, MethodBlock *mb) {
         void *ret;
          (*(u4 *(*)(Class*, MethodBlock*, u4*))mb->native_invoker)(class, mb, ret);
          return ret;
}

native_invoker는 mb에서 void* 형으로 선언되 있습니다.
mb->native_invoker라는 함수를 호출하는것 같은데 구문이 복잡해 감을 잡을 수가 없네요.

doldori의 이미지

함수 포인터에 대해서는 알고 계시다고 가정하고...
typedef를 써서 바꿔보면 좀 더 알기 쉽죠.

typedef u4 *(*PF)(Class*, MethodBlock*, u4*);
(*(PF)mb->native_invoker)(class, mb, ret);

void*인 mb->native_invoker를 함수 포인터로 캐스팅한 후
mb->native_invoker가 가리키고 있는 함수를 호출하는 것입니다.