// ..., [arg1, [arg2 ...]] ...
// INVOKEINTERFACE
// ..., objectref, [arg1, [arg2 ...]] ...
// INVOKEDYNAMIC 186 unused
//
StackElement pointer = currentStackElement;
final Type[] types = Type.getArgumentTypes(desc);
for (int index = types.length - 1; index >= 0; index--) {
pointer = pop(pointer, typeFromAsmType(types[index]));
}
if (opcode == Opcodes.INVOKESTATIC) {
internalCall = true;
} else {
if (!EnumStackEltType.REF.equals(pointer.getType())) {
throw new EnhanceException("bad type " + pointer.getType()
+ " for opcode " + opcode);
}
internalCall = !ownedMethodCall || pointer.isThisReference();
pointer = pop(pointer);
}
final Type returnType = Type.getReturnType(desc);
if (!Type.VOID_TYPE.equals(returnType)) {
pointer = push(pointer, typeFromAsmType(returnType));