Refactoring to remove redundant code (and for easier subclassing).
diff --git a/src/org/objectweb/asm/commons/LocalVariablesSorter.java b/src/org/objectweb/asm/commons/LocalVariablesSorter.java
index a7f33bc..e1616eb 100644
--- a/src/org/objectweb/asm/commons/LocalVariablesSorter.java
+++ b/src/org/objectweb/asm/commons/LocalVariablesSorter.java
@@ -281,8 +281,7 @@
                 t = type.getInternalName();
                 break;
         }
-        int local = nextLocal;
-        nextLocal += type.getSize();
+        int local = newLocalMapping(type);
         setLocalType(local, type);
         setFrameLocal(local, t);
         return local;
diff --git a/src/org/objectweb/asm/tree/InsnList.java b/src/org/objectweb/asm/tree/InsnList.java
index cba578a..e061324 100644
--- a/src/org/objectweb/asm/tree/InsnList.java
+++ b/src/org/objectweb/asm/tree/InsnList.java
@@ -236,6 +236,8 @@
      *        {@link InsnList}</i>.
      */
     public void add(final AbstractInsnNode insn) {
+        if (insn.prev!=null||insn.next!=null) throw new IllegalStateException("already in a list 1");
+        if (insn.index != -1) throw new IllegalStateException("already in a list 2");
         ++size;
         if (last == null) {
             first = insn;
diff --git a/src/org/objectweb/asm/tree/MethodNode.java b/src/org/objectweb/asm/tree/MethodNode.java
index 0f522e4..33797ac 100644
--- a/src/org/objectweb/asm/tree/MethodNode.java
+++ b/src/org/objectweb/asm/tree/MethodNode.java
@@ -504,7 +504,7 @@
      */
     protected LabelNode getLabelNode(final Label l) {
         if (!(l.info instanceof LabelNode)) {
-            l.info = new LabelNode(l);
+            l.info = new LabelNode();
         }
         return (LabelNode) l.info;
     }