Как посчитать индексы локальных переменных в MethodVariableAccess?

Согласно [1], в фрейме метода массив локальных переменных содержит ссылку на вызываемый экземпляр, параметры и, наконец, любые другие переменные, используемые в коде метода. Также, long а также double значения занимают две локальные переменные.

При использовании Byte Buddy для генерации кода метода с помощью стековых манипуляций MethodVariableAccess.OffsetLoading индекс long а также double значения в один индекс, или это необходимо, так как используется ASM напрямую, для учета этих видов значений для расчета локального индекса var?

[1] https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html

1 ответ

Решение

MethodVariableAccess.OffsetLoading получает доступ к смещению, которое не называется индексом, чтобы точно это различить. Если long или же double Тип содержится в массиве, это относится к двум слотам. Byte Buddy использует эту абстракцию для взаимодействия с ASM, где для вызова соответствующего посетителя требуется одинаковое смещение.

Другие вопросы по тегам