Type.getMethodDescriptor(returnType, argumentTypes));
}
private void emitInvokeDynamic(SixModelObject insn, MethodVisitor m, ThreadContext tc) {
String name = getattr(insn, jastIndy, "$!name", 0, tc).get_str(tc);
SixModelObject argTypesSmo = getattr(insn, jastIndy, "@!arg_types", 1, tc);
Type retType = processType(getattr(insn, jastIndy, "$!ret_type", 2, tc).get_str(tc));
String bsmType = getattr(insn, jastIndy, "$!bsm_type", 3, tc).get_str(tc);
String bsmName = getattr(insn, jastIndy, "$!bsm_name", 4, tc).get_str(tc);
SixModelObject extraArgsSmo = getattr(insn, jastIndy, "@!extra_args", 5, tc);
int numArgs = (int) argTypesSmo.elems(tc);
Type[] argTypes = new Type[numArgs];
for (int i = 0; i < numArgs; i++) {
argTypes[i] = processType(atpos(argTypesSmo, i, tc).get_str(tc));
}
int numExtraArgs = (int) extraArgsSmo.elems(tc);
MethodType bsmMT = MethodType.methodType(CallSite.class, MethodHandles.Lookup.class,
java.lang.String.class, MethodType.class);
Object[] extraArgs = new Object[numExtraArgs];
for (int i = 0; i < numExtraArgs; i++) {
SixModelObject extra = atpos(extraArgsSmo, i, tc);
if (istype(extra, jastPushI, tc) != 0) {
extraArgs[i] = getattr_i(extra, jastPushI, "$!value", 0, tc);
bsmMT = bsmMT.appendParameterTypes(long.class);
}
else if (istype(extra, jastPushN, tc) != 0) {