private SpecialPrefixHandler getSpecialPrefixHandler(String demangled) {

		Matcher matcher = DESCRIPTIVE_PREFIX_PATTERN.matcher(demangled);
		if (matcher.matches()) {
			String prefix = matcher.group(1);
			String type = matcher.group(4);
			if (prefix.contains(THUNK)) {
				return new ThunkHandler(demangled, prefix, type);
			}

			if (ADDRESS_TABLE_PREFIXES.contains(prefix)) {
				return new AddressTableHandler(demangled, prefix, type);
			}

			if (prefix.startsWith(TYPEINFO_NAME_FOR)) {
				return new TypeInfoNameHandler(demangled, TYPEINFO_NAME_FOR);
			}

			if (prefix.startsWith(TLS_INIT_FOR)) {
				return new TlsInitHandler(demangled, TLS_INIT_FOR, type);
			}

			Matcher arrayMatcher = ARRAY_DATA_PATTERN.matcher(type);
			if (arrayMatcher.matches()) {
				return new ArrayHandler(demangled, prefix, type);
			}

			Matcher globalCtorMatcher = GLOBAL_CTOR_DTOR_FOR_PATTERN.matcher(demangled);
			if (globalCtorMatcher.matches()) {
				prefix = globalCtorMatcher.group(1);
				type = globalCtorMatcher.group(3);
				return new GlobalCtorDtorHandler(demangled, prefix, type);
			}

			return new ItemInNamespaceHandler(demangled, prefix, type);
		}

		return null;
	}
Parses the given demangled string and creates a {@link DemangledObject}

@param mangled the original mangled text
@param demangled the demangled text
@param simplify true signals to simplify types where possible, such as using simple c++ 
typedefs where possible.
@return the demangled object
@throws DemanglerParseException if there is an unexpected error parsing
@see #parse(String, String, boolean)
Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemanglerParser.java