int addMergedType(final int typeTableIndex1, final int typeTableIndex2) {
        final int MERGED_TYPE_TAG = 130;

        long data =
                typeTableIndex1 < typeTableIndex2
                        ? typeTableIndex1 | (((long) typeTableIndex2) << 32)
                        : typeTableIndex2 | (((long) typeTableIndex1) << 32);
        int hashCode = 0x7FFFFFFF & (MERGED_TYPE_TAG + typeTableIndex1 + typeTableIndex2);
        Symbol entry = entries[hashCode % entries.length];
        while (entry != null) {
            if (entry.tag == MERGED_TYPE_TAG && entry.hashCode == hashCode && entry.data == data) {
                return entry.info;
            }
            entry = entry.next;
        }
        String type1 = typeTable[typeTableIndex1].value;
        String type2 = typeTable[typeTableIndex2].value;
        int commonSuperTypeIndex = addType(classWriter.getCommonSuperClass(type1, type2));
        put(new Symbol(typeCount, MERGED_TYPE_TAG, null, null, null, data, hashCode)).info = commonSuperTypeIndex;
        return commonSuperTypeIndex;
    }
Adds an {@link Frame#ITEM_UNINITIALIZED} type in the type table of this symbol table. Does
nothing if the type table already contains a similar type.

@param value          an internal class name.
@param bytecodeOffset the bytecode offset of the NEW instruction that created this {@link
                      Frame#ITEM_UNINITIALIZED} type value.
@return the index of a new or already existing type Symbol with the given value.
core/src/main/java/com/alibaba/fastjson2/internal/asm/SymbolTable.java