// 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 java.util.List;
import java.util.Set;
import org.objectweb.asm.Opcodes;
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.LdcInsnNode;
import org.objectweb.asm.tree.MethodInsnNode;
import java.util.HashSet;
        case DREM:
        case LSHL:
        case LSHR:
        case LUSHR:
        case LAND:
        case LOR:
        case LXOR:
            size = 2;
            break;
        default:
            size = 1;
        }
        return new SourceValue(size, insn);
    }

    @Override
    public SourceValue ternaryOperation(final AbstractInsnNode insn,
            final SourceValue value1, final SourceValue value2,
            final SourceValue value3) {
        return new SourceValue(1, insn);
    }

    @Override
    public SourceValue naryOperation(final AbstractInsnNode insn,
            final List<? extends SourceValue> values) {
        int size;
        int opcode = insn.getOpcode();
        if (opcode == MULTIANEWARRAY) {
            size = 1;
        } else {
// 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/SourceInterpreter.java
import java.util.List;
import java.util.Set;
import org.objectweb.asm.Opcodes;
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.LdcInsnNode;
import org.objectweb.asm.tree.MethodInsnNode;
import java.util.HashSet;

        case DREM:
        case LSHL:
        case LSHR:
        case LUSHR:
        case LAND:
        case LOR:
        case LXOR:
            size = 2;
            break;
        default:
            size = 1;
        }
        return new SourceValue(size, insn);
    }

    @Override
    public SourceValue ternaryOperation(final AbstractInsnNode insn,
            final SourceValue value1, final SourceValue value2,
            final SourceValue value3) {
        return new SourceValue(1, insn);
    }

    @Override
    public SourceValue naryOperation(final AbstractInsnNode insn,
            final List<? extends SourceValue> values) {
        int size;
        int opcode = insn.getOpcode();
        if (opcode == MULTIANEWARRAY) {
            size = 1;
        } else {
            String desc = (opcode == INVOKEDYNAMIC) ? ((InvokeDynamicInsnNode) insn).desc