Как рассчитать параметр счетчика для вызова метода интерфейса в Java? - PullRequest
1 голос
/ 28 марта 2011

Я использую javassist и генерирую интерфейсы и другие вещи во время загрузки / выполнения.

Чтобы вызвать метод интерфейса (с байт-кодом invokeinterface), мы должны предоставить несколько параметров: indexbyte1, indexbyte2, count и 0 (из http://java.sun.com/docs/books/jvms/second_edition/html/Instructions2.doc6.html).

Уже имея абстрактный метод (CtMethod), который я хочу вызвать, как рассчитать его количество?

Например, в http://java.sun.com/docs/books/jvms/second_edition/html/Instructions2.doc6.html они говорят, что " Операнд count инструкции invokeinterface записывает меру количества значений аргумента, где значение аргумента типа long или типа double добавляет две единицы к значение счетчика и аргумент любого другого типа составляют одну единицу. Эта информация также может быть получена из дескриптора выбранного метода. Избыточность является исторической."

Но также скажите, что " Операндом count является байт без знака, который не должен быть равен нулю. "

Если абстрактный метод, который я хочу вызвать, не имеет параметров, он будет иметь счет 0 !? Но count не может быть 0. Дескриптор метода - () V.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Я не знаю подробностей javaassist, но я предполагаю, что count это размер стекового пространства, необходимого для вызова метода.Если это так, то вам нужно указать пространство для переменной 'this', которая помещается в стек перед любыми параметрами (так как вы делаете invokeinterface).Если это так, то для метода без параметров будет 1.

0 голосов
/ 29 марта 2011

Метод экземпляра по своей природе использует слово стека для субъекта вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...