private void findInternalVtables() throws CancelledException {

		// if the current table is already an internal vtable there won't be any
		// internal ones in it
		if (!isPrimary) {
			return;
		}

		boolean keepChecking = true;

		int limit = length;

		while (keepChecking) {

			monitor.checkCancelled();

			Address nextAddr = vtableAddress.add(length);

			Address typeinfoAddr = typeinfo.getAddress();

			int alignment = nextAddr.getSize() / 8;
			Address nextTypeinfoRefAddr =
				getNextReferenceTo(nextAddr, typeinfoAddr, alignment, limit);
			if (nextTypeinfoRefAddr == null) {
				keepChecking = false;
				continue;
			}

			GccTypeinfoRef internalTypenfoRef =
				new GccTypeinfoRef(nextTypeinfoRefAddr, typeinfo, true);

			Vtable possibleInternalVtable =
				new Vtable(program, nextAddr, internalTypenfoRef, isSpecial, inExternalMemory,
					this, isConstruction, monitor);
			if (!possibleInternalVtable.isValid()) {
				keepChecking = false;
				continue;
			}

			if (possibleInternalVtable.isPrimary()) {
				keepChecking = false;
				continue;
			}

			Namespace internalVtableNamespace = possibleInternalVtable.getNamespace();
			if (internalVtableNamespace != null && internalVtableNamespace.equals(classNamespace)) {
				addInternalVtable(possibleInternalVtable);
			}
			else {
				keepChecking = false;
			}

		}
	}
Method to determine if there are enough zeros to make a null poihnter and no
references into or out of the middle

@param address the given address
@return true if the given address could be a valid null pointer, false if not
Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/Vtable.java