2016-10-18 2 views
0

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

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

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

ответ

1

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

Смежные вопросы