// Path: src/org/objectweb/asm/tree/InvokeDynamicInsnNode.java
// public class InvokeDynamicInsnNode extends AbstractInsnNode {
// 
//     /**
//      * Invokedynamic name.
//      */
//     public String name;
// 
//     /**
//      * Invokedynamic descriptor.
//      */
//     public String desc;
// 
//     /**
//      * Bootstrap method
//      */
//     public Handle bsm;
// 
//     /**
//      * Bootstrap constant arguments
//      */
//     public Object[] bsmArgs;
// 
//     /**
//      * Constructs a new {@link InvokeDynamicInsnNode}.
//      * 
//      * @param name
//      *            invokedynamic name.
//      * @param desc
//      *            invokedynamic descriptor (see {@link org.objectweb.asm.Type}).
//      * @param bsm
//      *            the bootstrap method.
//      * @param bsmArgs
//      *            the boostrap constant arguments.
//      */
//     public InvokeDynamicInsnNode(final String name, final String desc,
//             final Handle bsm, final Object... bsmArgs) {
//         super(Opcodes.INVOKEDYNAMIC);
//         this.name = name;
//         this.desc = desc;
//         this.bsm = bsm;
//         this.bsmArgs = bsmArgs;
//     }
// 
//     @Override
//     public int getType() {
//         return INVOKE_DYNAMIC_INSN;
//     }
// 
//     @Override
//     public void accept(final MethodVisitor mv) {
//         mv.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
//         acceptAnnotations(mv);
//     }
// 
//     @Override
//     public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
//         return new InvokeDynamicInsnNode(name, desc, bsm, bsmArgs)
//                 .cloneAnnotations(this);
//     }
// }


import org.objectweb.asm.Type;
import org.objectweb.asm.tree.AbstractInsnNode;
import org.objectweb.asm.tree.FieldInsnNode;
import org.objectweb.asm.tree.InvokeDynamicInsnNode;
import org.objectweb.asm.tree.MethodInsnNode;
import java.util.List;
            throw new AnalyzerException(insn, "Second argument",
                    BasicValue.INT_VALUE, value2);
        } else if (!isSubTypeOf(value3, expected3)) {
            throw new AnalyzerException(insn, "Third argument", expected3,
                    value3);
        }
        return null;
    }

    @Override
    public BasicValue naryOperation(final AbstractInsnNode insn,
            final List<? extends BasicValue> values) throws AnalyzerException {
        int opcode = insn.getOpcode();
        if (opcode == MULTIANEWARRAY) {
            for (int i = 0; i < values.size(); ++i) {
                if (!BasicValue.INT_VALUE.equals(values.get(i))) {
                    throw new AnalyzerException(insn, null,
                            BasicValue.INT_VALUE, values.get(i));
                }
            }
        } else {
            int i = 0;
            int j = 0;
            if (opcode != INVOKESTATIC && opcode != INVOKEDYNAMIC) {
                Type owner = Type.getObjectType(((MethodInsnNode) insn).owner);
                if (!isSubTypeOf(values.get(i++), newValue(owner))) {
                    throw new AnalyzerException(insn, "Method owner",
                            newValue(owner), values.get(0));
                }
            }
// Path: src/org/objectweb/asm/tree/InvokeDynamicInsnNode.java
// public class InvokeDynamicInsnNode extends AbstractInsnNode {
// 
//     /**
//      * Invokedynamic name.
//      */
//     public String name;
// 
//     /**
//      * Invokedynamic descriptor.
//      */
//     public String desc;
// 
//     /**
//      * Bootstrap method
//      */
//     public Handle bsm;
// 
//     /**
//      * Bootstrap constant arguments
//      */
//     public Object[] bsmArgs;
// 
//     /**
//      * Constructs a new {@link InvokeDynamicInsnNode}.
//      * 
//      * @param name
//      *            invokedynamic name.
//      * @param desc
//      *            invokedynamic descriptor (see {@link org.objectweb.asm.Type}).
//      * @param bsm
//      *            the bootstrap method.
//      * @param bsmArgs
//      *            the boostrap constant arguments.
//      */
//     public InvokeDynamicInsnNode(final String name, final String desc,
//             final Handle bsm, final Object... bsmArgs) {
//         super(Opcodes.INVOKEDYNAMIC);
//         this.name = name;
//         this.desc = desc;
//         this.bsm = bsm;
//         this.bsmArgs = bsmArgs;
//     }
// 
//     @Override
//     public int getType() {
//         return INVOKE_DYNAMIC_INSN;
//     }
// 
//     @Override
//     public void accept(final MethodVisitor mv) {
//         mv.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
//         acceptAnnotations(mv);
//     }
// 
//     @Override
//     public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) {
//         return new InvokeDynamicInsnNode(name, desc, bsm, bsmArgs)
//                 .cloneAnnotations(this);
//     }
// }


// Path: src/org/objectweb/asm/tree/analysis/BasicVerifier.java
import org.objectweb.asm.Type;
import org.objectweb.asm.tree.AbstractInsnNode;
import org.objectweb.asm.tree.FieldInsnNode;
import org.objectweb.asm.tree.InvokeDynamicInsnNode;
import org.objectweb.asm.tree.MethodInsnNode;
import java.util.List;

            throw new AnalyzerException(insn, "Second argument",
                    BasicValue.INT_VALUE, value2);
        } else if (!isSubTypeOf(value3, expected3)) {
            throw new AnalyzerException(insn, "Third argument", expected3,
                    value3);
        }
        return null;
    }

    @Override
    public BasicValue naryOperation(final AbstractInsnNode insn,
            final List<? extends BasicValue> values) throws AnalyzerException {
        int opcode = insn.getOpcode();
        if (opcode == MULTIANEWARRAY) {
            for (int i = 0; i < values.size(); ++i) {
                if (!BasicValue.INT_VALUE.equals(values.get(i))) {
                    throw new AnalyzerException(insn, null,
                            BasicValue.INT_VALUE, values.get(i));
                }
            }
        } else {
            int i = 0;
            int j = 0;
            if (opcode != INVOKESTATIC && opcode != INVOKEDYNAMIC) {
                Type owner = Type.getObjectType(((MethodInsnNode) insn).owner);
                if (!isSubTypeOf(values.get(i++), newValue(owner))) {
                    throw new AnalyzerException(insn, "Method owner",
                            newValue(owner), values.get(0));
                }
            }
            String desc = (opcode == INVOKEDYNAMIC) ? ((InvokeDynamicInsnNode) insn).desc