public SwiftNativeDemangledOutput demangle(String mangled) throws IOException {
		List<String> demanglerArgs = new ArrayList<>();
		demanglerArgs.add("--compact"); // Compact mode (only emit the demangled names)
		demanglerArgs.add("--expand");  // Expand mode (show node structure of the demangling)
		try (BufferedReader reader = demangle(mangled, demanglerArgs)) {
			String demangled = null;
			List<String> treeLines = new ArrayList<>();
			String line = reader.readLine().trim();
			if (!line.startsWith("Demangling for")) {
				throw new IOException("Unexpected output: " + line);
			}
			while ((line = reader.readLine()) != null) {
				if (line.startsWith("<<NULL>>")) { // Not a demangleable string
					break;
				}
				if (line.isBlank()) {
					continue;
				}
				if (treeLines.isEmpty() && !line.trim().startsWith("kind")) {
					// This case is mainly for when the mangled string has newline characters in it,
					// which are printed in the first "Demangling for..." line. We want to skip
					// those and get to the tree.
					continue;
				}
				if (!treeLines.isEmpty() && !line.startsWith(" ")) {
					// This case should grab the last line after the tree, which is the full 
					// demangled string
					demangled = line;
					break;
				}
				treeLines.add(line);
			}
			return new SwiftNativeDemangledOutput(demangled, treeLines);
		}
	}
Uses the Swift executable to demangle the given mangled string

@param mangled The mangled string to demangle
@return The {@link SwiftNativeDemangledOutput}
@throws IOException If there was an IO-related issue
@see SwiftDemangledTree
Ghidra/Features/SwiftDemangler/src/main/java/ghidra/app/util/demangler/swift/SwiftNativeDemangler.java