Я работаю над проектом инструментовки байт-кода. В настоящее время при обработке объектов верификатор выдает ошибку большую часть времени. Поэтому я хотел бы прояснить ситуацию с правилами для объектов (я прочитал JVMS, но не смог найти ответ, который искал):
Я использую НОВУЮ инструкцию:
оригинальный байт-код
NEW <MyClass>
DUP
INVOKESPECIAL <MyClass.<init>>
после контрольно-измерительных приборов
NEW <MyClass>
DUP
INVOKESTATIC <Profiler.handleNEW>
DUP
INVOKESPECIAL <MyClass.<init>>
Обратите внимание, что я добавил вызов Profiler.handleNEW (), который принимает в качестве аргумента ссылку на объект (недавно созданный объект).
В приведенном выше фрагменте кода выдается ошибка VerificationError. Хотя, если я не добавлю INVOKESTATIC (оставляя только DUP), это не так. Так какое правило я нарушаю? Я могу дублировать неинициализированную ссылку, но не могу передать ее в качестве параметра? Буду признателен за любую помощь. Спасибо