private Address findSpecialVtableAddress(String namespaceName, String mangledNamespace,
			List<GccTypeinfo> specialTypeinfos) throws CancelledException {

		//First try to find with special symbols
		Symbol vtableSymbol = getSymbolInNamespaces(namespaceName, mangledNamespace, VTABLE_LABEL);

		if (vtableSymbol != null) {
			return vtableSymbol.getAddress();

		}

		// then try finding with mangled symbol
		vtableSymbol = findAndReturnDemangledSymbol(MANGLED_VTABLE_PREFIX + mangledNamespace,
			SPECIAL_CLASS_NAMESPACE, namespaceName, VTABLE_LABEL);
		if (vtableSymbol != null) {
			return vtableSymbol.getAddress();
		}

		//Then with special typeinfo if there is one
		GccTypeinfo specTypeinfo = getSpecialTypeinfo(specialTypeinfos, namespaceName);

		if (specTypeinfo != null) {
			Address vtableAddress = findSpecialVtableUsingSpecialTypeinfo(specTypeinfo.getAddress(),
				specialTypeinfos);
			if (vtableAddress == null) {
				return null;
			}
			try {
				vtableSymbol = symbolTable.createLabel(vtableAddress, VTABLE_LABEL,
					specTypeinfo.getNamespace(), SourceType.ANALYSIS);
				api.setPlateComment(vtableAddress, "vtable for " + specTypeinfo.getNamespace());
				return vtableSymbol.getAddress();

			}
			catch (InvalidInputException e) {
				Msg.warn(this,
					"Found vtable at " + vtableAddress + " but cannot create symbol" + e);
				return null;
			}
		}

		return null;
	}
Method to add parents to the given class

@param recoveredClass  the given class
@param typeinfo the GccTypeinfo object for this class
@return list of parents for the given class
@throws CancelledException if cancelled
Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/RTTIGccClassRecoverer.java