 +        return 1 + next.depth();
 -}
 +    }
++
++    @Override
++    public String toString()
++    {
++        return "Stack[" + depth() + "]";
++    }
 +}
 Index: src/main/org/langera/freud/optional/classfile/parser/asm/AsmMethod.java
 ===================================================================
 --- src/main/org/langera/freud/optional/classfile/parser/asm/AsmMethod.java	(revision 42)
 +++ src/main/org/langera/freud/optional/classfile/parser/asm/AsmMethod.java	(revision )
-@@ -273,7 +273,8 @@
+@@ -4,6 +4,7 @@
+ import org.langera.freud.optional.classfile.method.ClassFileMethod;
+ import org.langera.freud.optional.classfile.method.LocalVariable;
+ import org.langera.freud.optional.classfile.method.instruction.AbstractOperandStack;
++import org.langera.freud.optional.classfile.method.instruction.ConstInstruction;
+ import org.langera.freud.optional.classfile.method.instruction.FieldInstruction;
+ import org.langera.freud.optional.classfile.method.instruction.Instruction;
+ import org.langera.freud.optional.classfile.method.instruction.InstructionVisitor;
+@@ -14,7 +15,6 @@
+ import org.langera.freud.optional.classfile.method.instruction.Opcode;
+ import org.langera.freud.optional.classfile.method.instruction.OperandStack;
+ import org.langera.freud.optional.classfile.method.instruction.ReferenceOperandInstruction;
+-import org.langera.freud.optional.classfile.method.instruction.ConstInstruction;
+ import org.langera.freud.optional.classfile.method.instruction.VarInstruction;
+ import org.objectweb.asm.AnnotationVisitor;
+ import org.objectweb.asm.Attribute;
+@@ -76,6 +76,11 @@
+         }
+         classFile.addMethod(this);
+         this.currentLineNumber = -1;
++
++
++System.out.println("========================================================================================");
++System.out.println(name);
++System.out.println("========================================================================================");
+     }
+ 
+     @Override
+@@ -220,6 +225,8 @@
+         final Instruction instruction = new Instruction(this, currentOperandStack, instructionList.size(), OPCODES_ARRAY[opcode], currentLineNumber);
+         instructionList.add(instruction);
+         currentOperandStack = instruction.getOperandStack();
++System.out.println(instructionList);
++System.out.println("========================================================================================");
+     }
+ 
+     public void visitIntInsn(final int opcodeUsed, final int operand)
+@@ -236,6 +243,8 @@
+         }
+         instructionList.add(instruction);
+         currentOperandStack = instruction.getOperandStack();
++        System.out.println(instructionList);
++        System.out.println("========================================================================================");
+     }
+ 
+     public void visitVarInsn(final int opcodeUsed, final int var)
+@@ -243,14 +252,19 @@
+         final Instruction instruction = new VarInstruction(this, currentOperandStack, instructionList.size(), OPCODES_ARRAY[opcodeUsed], currentLineNumber, var);
+         instructionList.add(instruction);
+         currentOperandStack = instruction.getOperandStack();
++        System.out.println(instructionList);
++        System.out.println("========================================================================================");
+     }
+ 
+     public void visitTypeInsn(final int opcodeUsed, final String type)
+     {
+         final Opcode opcode = OPCODES_ARRAY[opcodeUsed];
+-        final Instruction instruction = new ReferenceOperandInstruction(this, currentOperandStack, instructionList.size(), opcode, currentLineNumber, type.toString());
++        final String operandType = "L" + type  + ";";
++        final Instruction instruction = new ReferenceOperandInstruction(this, currentOperandStack, instructionList.size(), opcode, currentLineNumber, operandType);
+         instructionList.add(instruction);
+         currentOperandStack = instruction.getOperandStack();
++        System.out.println(instructionList);
++        System.out.println("========================================================================================");
+     }
+ 
+     public void visitFieldInsn(
+@@ -262,6 +276,8 @@
+         final Instruction instruction = new FieldInstruction(this, currentOperandStack, instructionList.size(), OPCODES_ARRAY[opcode], currentLineNumber, owner, name, desc);
+         instructionList.add(instruction);
+         currentOperandStack = instruction.getOperandStack();
++        System.out.println(instructionList);
++        System.out.println("========================================================================================");
+     }
+ 
+     public void visitMethodInsn(
+@@ -273,13 +289,16 @@
          final Matcher matcher = METHOD_DESC_PATTERN.matcher(desc);
          if (matcher.matches())
          {

Index: src/main/org/langera/freud/optional/classfile/method/instruction/MethodInvocationOperandStack.java
===================================================================
--- src/main/org/langera/freud/optional/classfile/method/instruction/MethodInvocationOperandStack.java	(revision )
+++ src/main/org/langera/freud/optional/classfile/method/instruction/MethodInvocationOperandStack.java	(revision )
@@ -0,0 +1,29 @@
+package org.langera.freud.optional.classfile.method.instruction;
+
+public final class MethodInvocationOperandStack extends AbstractOperandStack

 
     @Override
     public OperandStack next()
@@ -44,4 +53,16 @@
     {
         return opcode;
     }
