Как посчитать индексы локальных переменных в 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, где для вызова соответствующего посетителя требуется одинаковое смещение.