void put(final MethodWriter owner, final ByteVector out, final int source, boolean wideOffset) {
        if ((status & 2 /* RESOLVED */) == 0) {
            if (wideOffset) {
                addReference(source, out.length, FORWARD_REFERENCE_TYPE_WIDE);
                out.putInt(-1);
            } else {
                addReference(source, out.length, FORWARD_REFERENCE_TYPE_SHORT);
                out.putShort(-1);
            }
        } else {
            if (wideOffset) {
                out.putInt(position - source);
            } else {
                out.putShort(position - source);
            }
        }
    }
Puts a reference to this label in the bytecode of a method. If the position of the label is known, the offset is
computed and written directly. Otherwise, a null offset is written and a new forward reference is declared for
this label.

@param owner the code writer that calls this method.
@param out the bytecode of the method.
@param source the position of first byte of the bytecode instruction that contains this label.
@param wideOffset <tt>true</tt> if the reference must be stored in 4 bytes, or <tt>false</tt> if it must be
stored with 2 bytes.
@throws IllegalArgumentException if this label has not been created by the given code writer.
src/main/java/com/alibaba/fastjson/asm/Label.java