private void addForwardReference(
            final int sourceInsnBytecodeOffset, final int referenceType, final int referenceHandle) {
        if (forwardReferences == null) {
            forwardReferences = new int[FORWARD_REFERENCES_CAPACITY_INCREMENT];
        }
        int lastElementIndex = forwardReferences[0];
        if (lastElementIndex + 2 >= forwardReferences.length) {
            int[] newValues = new int[forwardReferences.length + FORWARD_REFERENCES_CAPACITY_INCREMENT];
            System.arraycopy(forwardReferences, 0, newValues, 0, forwardReferences.length);
            forwardReferences = newValues;
        }
        forwardReferences[lastElementIndex + 1] = sourceInsnBytecodeOffset;
        forwardReferences[lastElementIndex + 2] = referenceType | referenceHandle;
        forwardReferences[0] = lastElementIndex + 2;
    }
Adds a forward reference to this label. This method must be called only for a true forward
reference, i.e. only if this label is not resolved yet. For backward references, the relative
bytecode offset of the reference can be, and must be, computed and stored directly.

@param sourceInsnBytecodeOffset the bytecode offset of the instruction that contains the
                                reference stored at referenceHandle.
@param referenceType            either {@link #FORWARD_REFERENCE_TYPE_SHORT} or {@link
                                #FORWARD_REFERENCE_TYPE_WIDE}.
@param referenceHandle          the offset in the bytecode where the forward reference value must be
                                stored.
core/src/main/java/com/alibaba/fastjson2/internal/asm/Label.java