if ((opcode >= Opcodes.IRETURN && opcode <= Opcodes.RETURN) || opcode == Opcodes.ATHROW) {
mv.visitMethodInsn(Opcodes.INVOKESTATIC, ITypeInternalName.CONTEXT_DELEGATOR, "getInstance", "()Lorg/deuce/transaction/AbstractContext;");
mv.visitVarInsn(Opcodes.ASTORE, argSize+1);
mv.visitVarInsn(Opcodes.ALOAD, argSize+1);
mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, ITypeInternalName.ABSTRACT_CONTEXT, "getContextId", "()Ljava/lang/Long;");
Label l3 = new Label();
mv.visitJumpInsn(Opcodes.IFNONNULL, l3);
mv.visitMethodInsn(Opcodes.INVOKESTATIC, ITypeInternalName.HYFLOW, "getLocator", "()Laleph/dir/DirectoryManager;");
mv.visitVarInsn(Opcodes.ALOAD, 0);
mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "aleph/dir/DirectoryManager", "register", "(Ledu/vt/rt/hyflow/core/AbstractDistinguishable;)V");
Label l5 = new Label();
mv.visitJumpInsn(Opcodes.GOTO, l5);
mv.visitLabel(l3);
mv.visitFrame(Opcodes.F_APPEND,1, new Object[] {"org/deuce/transaction/AbstractContext"}, 0, null);
mv.visitVarInsn(Opcodes.ALOAD, argSize+1);
mv.visitVarInsn(Opcodes.ALOAD, 0);