Portanto, a primeira etapa que o Callframe :: Invoke_method faz é recuperar uma referência ao método para invocar, sem executar a resolução dos métodos virtuais:
Em seguida, o receptor do método (ou seja, obviamente, não é como uma JVM real (ou qualquer intérprete, nesse caso) funciona: existem várias estratégias de otimização, para evitar repetir a pesquisa todas as vezes. No exemplo acima, quando executamos o principal principal:: Teste, podemos acabar invocando base :: foo ou derivado :: foo, dependendo do tipo real do objeto que passou como argumento. 😊
Encontrar um manipulador de exceção correspondente é apenas uma questão de verificar todos eles, em ordem e parar com o primeiro que corresponde, ou seja, você deve se lembrar que, na Parte 2, mencionei que o atributo de código de um método contém uma tabela de exceção.
Fonte: https://andreabergia.com/blog/2023/09/a-jvm-in-rust-part-6-methods-and-exceptions/