mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 10:49:34 +02:00
GP-3535: Swift fixes/improvements
This commit is contained in:
parent
21f1a63f51
commit
306fccdae5
57 changed files with 273 additions and 375 deletions
|
@ -46,7 +46,7 @@ public class DemangledLabel extends DemangledObject {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getSignature(boolean format) {
|
public String getSignature(boolean format) {
|
||||||
return originalDemangled;
|
return getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ public class SwiftDemanglerScript extends GhidraScript {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void run() throws Exception {
|
protected void run() throws Exception {
|
||||||
SwiftDemangler demangler = new SwiftDemangler();
|
SwiftDemangler demangler = new SwiftDemangler(currentProgram);
|
||||||
SwiftDemanglerOptions options = new SwiftDemanglerOptions();
|
SwiftDemanglerOptions options = new SwiftDemanglerOptions();
|
||||||
if (!demangler.canDemangle(currentProgram)) {
|
if (!demangler.canDemangle(currentProgram)) {
|
||||||
println("Not a Swift program");
|
println("Not a Swift program");
|
||||||
|
|
|
@ -23,8 +23,11 @@ import ghidra.app.util.demangler.swift.*;
|
||||||
import ghidra.app.util.importer.MessageLog;
|
import ghidra.app.util.importer.MessageLog;
|
||||||
import ghidra.framework.options.OptionType;
|
import ghidra.framework.options.OptionType;
|
||||||
import ghidra.framework.options.Options;
|
import ghidra.framework.options.Options;
|
||||||
|
import ghidra.program.model.address.AddressSetView;
|
||||||
import ghidra.program.model.listing.Program;
|
import ghidra.program.model.listing.Program;
|
||||||
import ghidra.util.HelpLocation;
|
import ghidra.util.HelpLocation;
|
||||||
|
import ghidra.util.exception.CancelledException;
|
||||||
|
import ghidra.util.task.TaskMonitor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An analyzer to demangle Swift mangled symbols
|
* An analyzer to demangle Swift mangled symbols
|
||||||
|
@ -70,14 +73,22 @@ public class SwiftDemanglerAnalyzer extends AbstractDemanglerAnalyzer {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected DemangledObject doDemangle(String mangled, DemanglerOptions options, MessageLog log)
|
public boolean added(Program program, AddressSetView set, TaskMonitor monitor, MessageLog log)
|
||||||
throws DemangledException {
|
throws CancelledException {
|
||||||
return demangler.demangle(mangled, options);
|
try {
|
||||||
|
demangler.initialize(program);
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
log.appendMsg(e.getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return super.added(program, set, monitor, log);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void analysisEnded(Program program) {
|
protected DemangledObject doDemangle(String mangled, DemanglerOptions options, MessageLog log)
|
||||||
demangler.clearCache();
|
throws DemangledException {
|
||||||
|
return demangler.demangle(mangled, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -20,6 +20,7 @@ import java.util.Stack;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import ghidra.app.util.demangler.DemangledException;
|
||||||
import ghidra.app.util.demangler.swift.SwiftNativeDemangler.SwiftNativeDemangledOutput;
|
import ghidra.app.util.demangler.swift.SwiftNativeDemangler.SwiftNativeDemangledOutput;
|
||||||
import ghidra.app.util.demangler.swift.nodes.SwiftNode;
|
import ghidra.app.util.demangler.swift.nodes.SwiftNode;
|
||||||
import ghidra.app.util.demangler.swift.nodes.SwiftNode.NodeProperties;
|
import ghidra.app.util.demangler.swift.nodes.SwiftNode.NodeProperties;
|
||||||
|
@ -78,11 +79,17 @@ public class SwiftDemangledTree {
|
||||||
*
|
*
|
||||||
* @param nativeDemangler The Swift native demangler
|
* @param nativeDemangler The Swift native demangler
|
||||||
* @param mangled The mangled string
|
* @param mangled The mangled string
|
||||||
* @throws IOException If there was an IO-related error
|
* @throws DemangledException If there was an issue demangling
|
||||||
*/
|
*/
|
||||||
public SwiftDemangledTree(SwiftNativeDemangler nativeDemangler, String mangled)
|
public SwiftDemangledTree(SwiftNativeDemangler nativeDemangler, String mangled)
|
||||||
throws IOException {
|
throws DemangledException {
|
||||||
SwiftNativeDemangledOutput demangledOutput = nativeDemangler.demangle(mangled);
|
SwiftNativeDemangledOutput demangledOutput;
|
||||||
|
try {
|
||||||
|
demangledOutput = nativeDemangler.demangle(mangled);
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
throw new DemangledException(e);
|
||||||
|
}
|
||||||
demangledString = demangledOutput.demangled();
|
demangledString = demangledOutput.demangled();
|
||||||
Stack<SwiftNode> stack = new Stack<>();
|
Stack<SwiftNode> stack = new Stack<>();
|
||||||
for (String line : demangledOutput.tree()) {
|
for (String line : demangledOutput.tree()) {
|
||||||
|
|
|
@ -33,16 +33,38 @@ import ghidra.util.task.TaskMonitor;
|
||||||
*/
|
*/
|
||||||
public class SwiftDemangler implements Demangler {
|
public class SwiftDemangler implements Demangler {
|
||||||
|
|
||||||
private Program program;
|
private Map<String, SwiftNode> cache;
|
||||||
private SwiftTypeMetadata typeMetadata;
|
private SwiftTypeMetadata typeMetadata;
|
||||||
private SwiftNativeDemangler nativeDemangler;
|
private SwiftNativeDemangler nativeDemangler;
|
||||||
private SwiftDemanglerOptions options;
|
|
||||||
private Map<String, SwiftNode> cache;
|
/**
|
||||||
private DemangledException initException;
|
* Creates a new {@link SwiftDemangler} that is not associated with any {@link Program}.
|
||||||
|
* Call {@link #initialize(Program)} to associate it with a program, which will enable access
|
||||||
|
* to the Swift type metadata.
|
||||||
|
*/
|
||||||
|
public SwiftDemangler() {
|
||||||
|
super();
|
||||||
|
try {
|
||||||
|
initialize(null);
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
// should not happen when initializing with null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@link SwiftDemangler} that is associated with the given {@link Program}
|
||||||
|
*
|
||||||
|
* @param program The {@link Program} to demangle
|
||||||
|
* @throws IOException if there was a problem parsing the Swift type metadata
|
||||||
|
*/
|
||||||
|
public SwiftDemangler(Program program) throws IOException {
|
||||||
|
super();
|
||||||
|
initialize(program);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canDemangle(Program p) {
|
public boolean canDemangle(Program program) {
|
||||||
this.program = p;
|
|
||||||
return SwiftUtils.isSwift(program);
|
return SwiftUtils.isSwift(program);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,97 +79,25 @@ public class SwiftDemangler implements Demangler {
|
||||||
return demangle(mangled);
|
return demangle(mangled);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public void initialize(Program program) throws IOException {
|
||||||
* Initializes class variables
|
cache = new HashMap<>();
|
||||||
*
|
nativeDemangler = null;
|
||||||
* @param opt The options
|
|
||||||
* @throws DemangledException If there was an issue with initialization
|
|
||||||
*/
|
|
||||||
private void init(DemanglerOptions opt) throws DemangledException {
|
|
||||||
if (initException != null) {
|
|
||||||
throw initException;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (program != null && typeMetadata == null) {
|
|
||||||
try {
|
try {
|
||||||
|
if (program != null) {
|
||||||
program.setPreferredRootNamespaceCategoryPath(
|
program.setPreferredRootNamespaceCategoryPath(
|
||||||
SwiftDataTypeUtils.SWIFT_CATEGORY.getPath());
|
SwiftDataTypeUtils.SWIFT_CATEGORY.getPath());
|
||||||
typeMetadata = new SwiftTypeMetadata(program, TaskMonitor.DUMMY, new MessageLog());
|
typeMetadata = new SwiftTypeMetadata(program, TaskMonitor.DUMMY, new MessageLog());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (CancelledException e) {
|
catch (CancelledException e) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
|
||||||
initException = new DemangledException(e);
|
|
||||||
throw initException;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opt != null) {
|
|
||||||
options = getSwiftDemanglerOptions(opt);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nativeDemangler == null) {
|
|
||||||
try {
|
|
||||||
nativeDemangler = new SwiftNativeDemangler(options.getSwiftDir());
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
throw new DemangledException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cache == null) {
|
|
||||||
cache = new HashMap<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Demangles the given mangled string
|
|
||||||
*
|
|
||||||
* @param mangled The mangled string
|
|
||||||
* @param originalDemangled The demangled string produced by the native Swift demangler
|
|
||||||
* @param meta The {@link SwiftTypeMetadata}, or null if unavailable
|
|
||||||
* @return The {@link Demangled} object, or null if the mangled string is not a supported Swift
|
|
||||||
* symbol
|
|
||||||
* @throws DemangledException if a problem occurred
|
|
||||||
*/
|
|
||||||
public Demangled demangle(String mangled, String originalDemangled, SwiftTypeMetadata meta)
|
|
||||||
throws DemangledException {
|
|
||||||
if (!isSwiftMangledSymbol(mangled)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
SwiftNode root;
|
|
||||||
if (cache.containsKey(mangled)) {
|
|
||||||
root = cache.get(mangled);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
SwiftDemangledTree tree = new SwiftDemangledTree(nativeDemangler, mangled);
|
|
||||||
root = tree.getRoot();
|
|
||||||
}
|
|
||||||
cache.put(mangled, root);
|
|
||||||
if (root == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
Demangled demangled = root.demangle(this, meta);
|
|
||||||
if (root.walkAndTest(node -> node.childWasSkipped())) {
|
|
||||||
demangled.setName(options.getIncompletePrefix() + demangled.getName());
|
|
||||||
}
|
|
||||||
return demangled;
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
throw new DemangledException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DemangledObject demangle(String mangled, DemanglerOptions opt)
|
public DemangledObject demangle(String mangled, DemanglerOptions op) throws DemangledException {
|
||||||
throws DemangledException {
|
SwiftDemanglerOptions options = getSwiftDemanglerOptions(op);
|
||||||
|
Demangled demangled = getDemangled(mangled, options);
|
||||||
init(opt);
|
|
||||||
|
|
||||||
Demangled demangled = demangle(mangled, null, typeMetadata);
|
|
||||||
if (demangled instanceof DemangledFunction func) {
|
if (demangled instanceof DemangledFunction func) {
|
||||||
return func;
|
return func;
|
||||||
}
|
}
|
||||||
|
@ -162,12 +112,44 @@ public class SwiftDemangler implements Demangler {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears the cache
|
* Get a new {@link Demangled} by demangling the given mangled string
|
||||||
|
*
|
||||||
|
* @param mangled The mangled string
|
||||||
|
* @param op The options (could be null)
|
||||||
|
* @return A new {@link Demangled}
|
||||||
|
* @throws DemangledException if there was an issue demangling
|
||||||
*/
|
*/
|
||||||
public void clearCache() {
|
public Demangled getDemangled(String mangled, SwiftDemanglerOptions op)
|
||||||
if (cache != null) {
|
throws DemangledException {
|
||||||
cache.clear();
|
if (!isSwiftMangledSymbol(mangled)) {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SwiftDemanglerOptions options = getSwiftDemanglerOptions(op);
|
||||||
|
setSwiftNativeDemangler(options);
|
||||||
|
|
||||||
|
SwiftNode root = cache.containsKey(mangled) ? cache.get(mangled)
|
||||||
|
: new SwiftDemangledTree(nativeDemangler, mangled).getRoot();
|
||||||
|
cache.put(mangled, root);
|
||||||
|
if (root == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Demangled demangled = root.demangle(this);
|
||||||
|
if (root.walkAndTest(node -> node.childWasSkipped())) {
|
||||||
|
demangled.setName(options.getIncompletePrefix() + demangled.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
return demangled;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the {@link SwiftTypeMetadata}
|
||||||
|
*
|
||||||
|
* @return The {@link SwiftTypeMetadata}, or null if it is not available
|
||||||
|
*/
|
||||||
|
public SwiftTypeMetadata getTypeMetadata() {
|
||||||
|
return typeMetadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -195,4 +177,21 @@ public class SwiftDemangler implements Demangler {
|
||||||
}
|
}
|
||||||
return (SwiftDemanglerOptions) opt;
|
return (SwiftDemanglerOptions) opt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensures that this demangler has access to a {@link SwiftNativeDemangler}
|
||||||
|
*
|
||||||
|
* @param options The options
|
||||||
|
* @throws DemangledException if there was a problem getting the {@link SwiftNativeDemangler}
|
||||||
|
*/
|
||||||
|
private void setSwiftNativeDemangler(SwiftDemanglerOptions options) throws DemangledException {
|
||||||
|
if (nativeDemangler == null) {
|
||||||
|
try {
|
||||||
|
nativeDemangler = new SwiftNativeDemangler(options.getSwiftDir());
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
throw new DemangledException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ public class SwiftArray extends DemangledDataType {
|
||||||
*/
|
*/
|
||||||
public SwiftArray(String mangled, String originalDemangled) {
|
public SwiftArray(String mangled, String originalDemangled) {
|
||||||
super(mangled, originalDemangled, "Array");
|
super(mangled, originalDemangled, "Array");
|
||||||
setNamespace(SwiftDataTypeUtils.SWIFT_NAMESPACE);
|
setNamespace(SwiftDataTypeUtils.getSwiftNamespace());
|
||||||
setBoundType(
|
setBoundType(
|
||||||
new DemangledDataType(mangled, originalDemangled, DemangledDataType.UNDEFINED));
|
new DemangledDataType(mangled, originalDemangled, DemangledDataType.UNDEFINED));
|
||||||
setArray(1);
|
setArray(1);
|
||||||
|
|
|
@ -31,8 +31,9 @@ public class SwiftCharacter extends DemangledStructure {
|
||||||
*/
|
*/
|
||||||
public SwiftCharacter(String mangled, String originalDemangled) {
|
public SwiftCharacter(String mangled, String originalDemangled) {
|
||||||
super(mangled, originalDemangled, "Character",
|
super(mangled, originalDemangled, "Character",
|
||||||
SwiftDataTypeUtils.getCategoryPath(SwiftDataTypeUtils.SWIFT_NAMESPACE).getPath(), true);
|
SwiftDataTypeUtils.getCategoryPath(SwiftDataTypeUtils.getSwiftNamespace()).getPath(),
|
||||||
setNamespace(SwiftDataTypeUtils.SWIFT_NAMESPACE);
|
true);
|
||||||
|
setNamespace(SwiftDataTypeUtils.getSwiftNamespace());
|
||||||
|
|
||||||
DemangledDataType stringDt = new DemangledDataType(mangled, null, DemangledDataType.CHAR);
|
DemangledDataType stringDt = new DemangledDataType(mangled, null, DemangledDataType.CHAR);
|
||||||
stringDt.incrementPointerLevels();
|
stringDt.incrementPointerLevels();
|
||||||
|
|
|
@ -30,11 +30,6 @@ public class SwiftDataTypeUtils {
|
||||||
*/
|
*/
|
||||||
public static final CategoryPath SWIFT_CATEGORY = new CategoryPath("/Demangler");
|
public static final CategoryPath SWIFT_CATEGORY = new CategoryPath("/Demangler");
|
||||||
|
|
||||||
/**
|
|
||||||
* A {@link Demangled} to represent the standard Swift namespace
|
|
||||||
*/
|
|
||||||
public static final Demangled SWIFT_NAMESPACE = new DemangledUnknown("", null, "Swift");
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks to see if the given namespace is the standard Swift namespace
|
* Checks to see if the given namespace is the standard Swift namespace
|
||||||
*
|
*
|
||||||
|
@ -42,7 +37,16 @@ public class SwiftDataTypeUtils {
|
||||||
* @return True if the given namespace is the standard Swift namespace; otherwise, false
|
* @return True if the given namespace is the standard Swift namespace; otherwise, false
|
||||||
*/
|
*/
|
||||||
public static boolean isSwiftNamespace(Demangled namespace) {
|
public static boolean isSwiftNamespace(Demangled namespace) {
|
||||||
return namespace != null && namespace.getName().equals(SWIFT_NAMESPACE.getName());
|
return namespace != null && namespace.getName().equals("Swift");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a {@link Demangled} to represent the standard Swift namespace
|
||||||
|
*
|
||||||
|
* @return A {@link Demangled} to represent the standard Swift namespace
|
||||||
|
*/
|
||||||
|
public static Demangled getSwiftNamespace() {
|
||||||
|
return new DemangledUnknown("", "Swift", "Swift");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.datatypes;
|
package ghidra.app.util.demangler.swift.datatypes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
|
||||||
|
@ -31,13 +30,11 @@ public class SwiftEnum extends DemangledStructure {
|
||||||
* @param originalDemangled The natively demangled string
|
* @param originalDemangled The natively demangled string
|
||||||
* @param name The enum name
|
* @param name The enum name
|
||||||
* @param namespace The enum namespace (could be null)
|
* @param namespace The enum namespace (could be null)
|
||||||
* @param typeMetadata The {@link SwiftTypeMetadata}, or null if it is not known
|
|
||||||
* @param demangler A {@link SwiftDemangler}
|
* @param demangler A {@link SwiftDemangler}
|
||||||
* @throws DemangledException if a problem occurred
|
* @throws DemangledException if a problem occurred
|
||||||
*/
|
*/
|
||||||
public SwiftEnum(String mangled, String originalDemangled, String name,
|
public SwiftEnum(String mangled, String originalDemangled, String name, Demangled namespace,
|
||||||
Demangled namespace, SwiftTypeMetadata typeMetadata, SwiftDemangler demangler)
|
SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
super(mangled, originalDemangled, name,
|
super(mangled, originalDemangled, name,
|
||||||
SwiftDataTypeUtils.getCategoryPath(namespace).getPath(), true);
|
SwiftDataTypeUtils.getCategoryPath(namespace).getPath(), true);
|
||||||
setNamespace(namespace);
|
setNamespace(namespace);
|
||||||
|
|
|
@ -31,8 +31,9 @@ public class SwiftString extends DemangledStructure {
|
||||||
*/
|
*/
|
||||||
public SwiftString(String mangled, String originalDemangled) {
|
public SwiftString(String mangled, String originalDemangled) {
|
||||||
super(mangled, originalDemangled, "String",
|
super(mangled, originalDemangled, "String",
|
||||||
SwiftDataTypeUtils.getCategoryPath(SwiftDataTypeUtils.SWIFT_NAMESPACE).getPath(), true);
|
SwiftDataTypeUtils.getCategoryPath(SwiftDataTypeUtils.getSwiftNamespace()).getPath(),
|
||||||
setNamespace(SwiftDataTypeUtils.SWIFT_NAMESPACE);
|
true);
|
||||||
|
setNamespace(SwiftDataTypeUtils.getSwiftNamespace());
|
||||||
|
|
||||||
DemangledDataType stringDt = new DemangledDataType(mangled, null, DemangledDataType.CHAR);
|
DemangledDataType stringDt = new DemangledDataType(mangled, null, DemangledDataType.CHAR);
|
||||||
stringDt.incrementPointerLevels();
|
stringDt.incrementPointerLevels();
|
||||||
|
|
|
@ -32,18 +32,17 @@ public class SwiftStructure extends DemangledStructure {
|
||||||
* @param originalDemangled The natively demangled string
|
* @param originalDemangled The natively demangled string
|
||||||
* @param name The structure name
|
* @param name The structure name
|
||||||
* @param namespace The structure namespace (could be null)
|
* @param namespace The structure namespace (could be null)
|
||||||
* @param typeMetadata The {@link SwiftTypeMetadata}, or null if it is not known
|
|
||||||
* @param demangler A {@link SwiftDemangler}
|
* @param demangler A {@link SwiftDemangler}
|
||||||
* @throws DemangledException if a problem occurred
|
* @throws DemangledException if a problem occurred
|
||||||
*/
|
*/
|
||||||
public SwiftStructure(String mangled, String originalDemangled, String name,
|
public SwiftStructure(String mangled, String originalDemangled, String name,
|
||||||
Demangled namespace, SwiftTypeMetadata typeMetadata, SwiftDemangler demangler)
|
Demangled namespace, SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
super(mangled, originalDemangled, name,
|
super(mangled, originalDemangled, name,
|
||||||
SwiftDataTypeUtils.getCategoryPath(namespace).getPath(), true);
|
SwiftDataTypeUtils.getCategoryPath(namespace).getPath(), true);
|
||||||
setNamespace(namespace);
|
setNamespace(namespace);
|
||||||
|
|
||||||
// Try to add structure fields from the type metadata
|
// Try to add structure fields from the type metadata
|
||||||
|
SwiftTypeMetadata typeMetadata = demangler.getTypeMetadata();
|
||||||
if (typeMetadata != null) {
|
if (typeMetadata != null) {
|
||||||
TargetTypeContextDescriptor typeDescriptor =
|
TargetTypeContextDescriptor typeDescriptor =
|
||||||
typeMetadata.getTargetTypeContextDescriptors().get(name);
|
typeMetadata.getTargetTypeContextDescriptors().get(name);
|
||||||
|
@ -53,8 +52,7 @@ public class SwiftStructure extends DemangledStructure {
|
||||||
if (fieldDescriptor != null) {
|
if (fieldDescriptor != null) {
|
||||||
for (FieldRecord fieldRecord : fieldDescriptor.getFieldRecords()) {
|
for (FieldRecord fieldRecord : fieldDescriptor.getFieldRecords()) {
|
||||||
String mangledType = "_T" + fieldRecord.getMangledTypeName();
|
String mangledType = "_T" + fieldRecord.getMangledTypeName();
|
||||||
Demangled demangled =
|
Demangled demangled = demangler.getDemangled(mangledType, null);
|
||||||
demangler.demangle(mangledType, originalDemangled, typeMetadata);
|
|
||||||
if (demangled instanceof DemangledDataType ddt) {
|
if (demangled instanceof DemangledDataType ddt) {
|
||||||
addField(fieldRecord.getFieldName(), fieldRecord.getDescription(), ddt);
|
addField(fieldRecord.getFieldName(), fieldRecord.getDescription(), ddt);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.datatypes;
|
package ghidra.app.util.demangler.swift.datatypes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
|
||||||
|
@ -30,14 +29,12 @@ public class SwiftTuple extends SwiftStructure {
|
||||||
* @param mangled The mangled string
|
* @param mangled The mangled string
|
||||||
* @param originalDemangled The natively demangled string
|
* @param originalDemangled The natively demangled string
|
||||||
* @param list The elements of the tuple
|
* @param list The elements of the tuple
|
||||||
* @param typeMetadata The {@link SwiftTypeMetadata}, or null if it is not known
|
|
||||||
* @param demangler A {@link SwiftDemangler}
|
* @param demangler A {@link SwiftDemangler}
|
||||||
* @throws DemangledException if a problem occurred
|
* @throws DemangledException if a problem occurred
|
||||||
*/
|
*/
|
||||||
public SwiftTuple(String mangled, String originalDemangled, DemangledList list,
|
public SwiftTuple(String mangled, String originalDemangled, DemangledList list,
|
||||||
SwiftTypeMetadata typeMetadata, SwiftDemangler demangler) throws DemangledException {
|
SwiftDemangler demangler) throws DemangledException {
|
||||||
super(mangled, originalDemangled, "tuple%d".formatted(list.size()), null, typeMetadata,
|
super(mangled, originalDemangled, "tuple%d".formatted(list.size()), null, demangler);
|
||||||
demangler);
|
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (Demangled element : list) {
|
for (Demangled element : list) {
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.Demangled;
|
import ghidra.app.util.demangler.Demangled;
|
||||||
import ghidra.app.util.demangler.DemangledException;
|
import ghidra.app.util.demangler.DemangledException;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
|
@ -29,8 +28,7 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftAllocatorNode extends SwiftNode {
|
public class SwiftAllocatorNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
Demangled type = null;
|
Demangled type = null;
|
||||||
|
@ -39,12 +37,12 @@ public class SwiftAllocatorNode extends SwiftNode {
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Class:
|
case Class:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
name = "__allocating_init";
|
name = "__allocating_init";
|
||||||
callingConvention = CompilerSpec.CALLING_CONVENTION_thiscall;
|
callingConvention = CompilerSpec.CALLING_CONVENTION_thiscall;
|
||||||
break;
|
break;
|
||||||
case Extension:
|
case Extension:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
if (child.hasChild(SwiftDemangledNodeKind.Class)) {
|
if (child.hasChild(SwiftDemangledNodeKind.Class)) {
|
||||||
name = "__allocating_init";
|
name = "__allocating_init";
|
||||||
callingConvention = CompilerSpec.CALLING_CONVENTION_thiscall;
|
callingConvention = CompilerSpec.CALLING_CONVENTION_thiscall;
|
||||||
|
@ -60,14 +58,14 @@ public class SwiftAllocatorNode extends SwiftNode {
|
||||||
case Enum:
|
case Enum:
|
||||||
case Protocol:
|
case Protocol:
|
||||||
case Structure:
|
case Structure:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
name = "init";
|
name = "init";
|
||||||
break;
|
break;
|
||||||
case Type:
|
case Type:
|
||||||
type = child.demangle(demangler, typeMetadata);
|
type = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
case LabelList:
|
case LabelList:
|
||||||
labelList = child.demangle(demangler, typeMetadata);
|
labelList = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -17,7 +17,6 @@ package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -29,17 +28,16 @@ import ghidra.app.util.demangler.swift.datatypes.SwiftArray;
|
||||||
public class SwiftBoundGenericStructureNode extends SwiftNode {
|
public class SwiftBoundGenericStructureNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
Demangled type = null;
|
Demangled type = null;
|
||||||
Demangled typeList = null;
|
Demangled typeList = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Type:
|
case Type:
|
||||||
type = child.demangle(demangler, typeMetadata);
|
type = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
case TypeList:
|
case TypeList:
|
||||||
typeList = child.demangle(demangler, typeMetadata);
|
typeList = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,9 +15,7 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.Demangled;
|
|
||||||
import ghidra.app.util.demangler.DemangledDataType;
|
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
|
||||||
|
@ -27,7 +25,7 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftBuiltinTypeNameNode extends SwiftNode {
|
public class SwiftBuiltinTypeNameNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata) {
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
String orig = getText();
|
String orig = getText();
|
||||||
String name = switch (orig) {
|
String name = switch (orig) {
|
||||||
case "Builtin.Int1":
|
case "Builtin.Int1":
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -26,8 +25,7 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftClassNode extends SwiftNode {
|
public class SwiftClassNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
Demangled privateDeclNamespace = null;
|
Demangled privateDeclNamespace = null;
|
||||||
|
@ -37,14 +35,15 @@ public class SwiftClassNode extends SwiftNode {
|
||||||
name = child.getText();
|
name = child.getText();
|
||||||
break;
|
break;
|
||||||
case PrivateDeclName:
|
case PrivateDeclName:
|
||||||
Demangled temp = child.demangle(demangler, typeMetadata);
|
Demangled temp = child.demangle(demangler);
|
||||||
name = temp.getName();
|
name = temp.getName();
|
||||||
privateDeclNamespace = temp.getNamespace();
|
privateDeclNamespace = temp.getNamespace();
|
||||||
break;
|
break;
|
||||||
case Class:
|
case Class:
|
||||||
|
case Enum:
|
||||||
case Module:
|
case Module:
|
||||||
case Structure:
|
case Structure:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -28,8 +27,7 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftConstructorNode extends SwiftNode {
|
public class SwiftConstructorNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
Demangled type = null;
|
Demangled type = null;
|
||||||
|
@ -37,14 +35,14 @@ public class SwiftConstructorNode extends SwiftNode {
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Class:
|
case Class:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
name = "init";
|
name = "init";
|
||||||
break;
|
break;
|
||||||
case Type:
|
case Type:
|
||||||
type = child.demangle(demangler, typeMetadata);
|
type = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
case LabelList:
|
case LabelList:
|
||||||
labelList = child.demangle(demangler, typeMetadata);
|
labelList = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.Demangled;
|
import ghidra.app.util.demangler.Demangled;
|
||||||
import ghidra.app.util.demangler.DemangledException;
|
import ghidra.app.util.demangler.DemangledException;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
|
@ -29,14 +28,13 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftDeallocatorNode extends SwiftNode {
|
public class SwiftDeallocatorNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Class:
|
case Class:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
name = "__deallocating_init";
|
name = "__deallocating_init";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -15,9 +15,7 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.Demangled;
|
|
||||||
import ghidra.app.util.demangler.DemangledDataType;
|
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
|
||||||
|
@ -27,7 +25,7 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftDependentGenericParamTypeNode extends SwiftNode {
|
public class SwiftDependentGenericParamTypeNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata) {
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
// We don't really support this yet
|
// We don't really support this yet
|
||||||
return new DemangledDataType(properties.mangled(), properties.originalDemangled(),
|
return new DemangledDataType(properties.mangled(), properties.originalDemangled(),
|
||||||
DemangledDataType.UNDEFINED);
|
DemangledDataType.UNDEFINED);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.Demangled;
|
import ghidra.app.util.demangler.Demangled;
|
||||||
import ghidra.app.util.demangler.DemangledException;
|
import ghidra.app.util.demangler.DemangledException;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
|
@ -27,13 +26,12 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftDependentGenericTypeNode extends SwiftNode {
|
public class SwiftDependentGenericTypeNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
Demangled type = null;
|
Demangled type = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Type:
|
case Type:
|
||||||
type = child.demangle(demangler, typeMetadata);
|
type = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -28,14 +27,13 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftDestructorNode extends SwiftNode {
|
public class SwiftDestructorNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Class:
|
case Class:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
name = "deinit";
|
name = "deinit";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.Demangled;
|
import ghidra.app.util.demangler.Demangled;
|
||||||
import ghidra.app.util.demangler.DemangledException;
|
import ghidra.app.util.demangler.DemangledException;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
|
@ -28,8 +27,7 @@ import ghidra.app.util.demangler.swift.datatypes.SwiftEnum;
|
||||||
public class SwiftEnumNode extends SwiftNode {
|
public class SwiftEnumNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
Demangled privateDeclNamespace = null;
|
Demangled privateDeclNamespace = null;
|
||||||
|
@ -39,15 +37,16 @@ public class SwiftEnumNode extends SwiftNode {
|
||||||
name = child.getText();
|
name = child.getText();
|
||||||
break;
|
break;
|
||||||
case PrivateDeclName:
|
case PrivateDeclName:
|
||||||
Demangled temp = child.demangle(demangler, typeMetadata);
|
Demangled temp = child.demangle(demangler);
|
||||||
name = temp.getName();
|
name = temp.getName();
|
||||||
privateDeclNamespace = temp.getNamespace();
|
privateDeclNamespace = temp.getNamespace();
|
||||||
break;
|
break;
|
||||||
case Class:
|
case Class:
|
||||||
|
case Enum:
|
||||||
case Extension:
|
case Extension:
|
||||||
case Module:
|
case Module:
|
||||||
case Structure:
|
case Structure:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
@ -58,6 +57,6 @@ public class SwiftEnumNode extends SwiftNode {
|
||||||
return getUnknown();
|
return getUnknown();
|
||||||
}
|
}
|
||||||
return new SwiftEnum(properties.mangled(), properties.originalDemangled(), name,
|
return new SwiftEnum(properties.mangled(), properties.originalDemangled(), name,
|
||||||
SwiftNode.join(namespace, privateDeclNamespace), typeMetadata, demangler);
|
SwiftNode.join(namespace, privateDeclNamespace), demangler);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.Demangled;
|
import ghidra.app.util.demangler.Demangled;
|
||||||
import ghidra.app.util.demangler.DemangledException;
|
import ghidra.app.util.demangler.DemangledException;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
|
@ -27,21 +26,20 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftExtensionNode extends SwiftNode {
|
public class SwiftExtensionNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
Demangled type = null;
|
Demangled type = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Module:
|
case Module:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
namespace.setName("(extension_" + namespace.getName() + ")");
|
namespace.setName("(extension_" + namespace.getName() + ")");
|
||||||
break;
|
break;
|
||||||
case Class:
|
case Class:
|
||||||
case Enum:
|
case Enum:
|
||||||
case Protocol:
|
case Protocol:
|
||||||
case Structure:
|
case Structure:
|
||||||
type = child.demangle(demangler, typeMetadata);
|
type = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -28,8 +27,7 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftFunctionNode extends SwiftNode {
|
public class SwiftFunctionNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
Demangled type = null;
|
Demangled type = null;
|
||||||
|
@ -44,7 +42,7 @@ public class SwiftFunctionNode extends SwiftNode {
|
||||||
name = child.getText() + " infix";
|
name = child.getText() + " infix";
|
||||||
break;
|
break;
|
||||||
case LocalDeclName:
|
case LocalDeclName:
|
||||||
name = child.demangle(demangler, typeMetadata).getName();
|
name = child.demangle(demangler).getName();
|
||||||
break;
|
break;
|
||||||
case Class:
|
case Class:
|
||||||
callingConvention = CompilerSpec.CALLING_CONVENTION_thiscall;
|
callingConvention = CompilerSpec.CALLING_CONVENTION_thiscall;
|
||||||
|
@ -55,13 +53,13 @@ public class SwiftFunctionNode extends SwiftNode {
|
||||||
case Module:
|
case Module:
|
||||||
case Protocol:
|
case Protocol:
|
||||||
case Structure:
|
case Structure:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
case Type:
|
case Type:
|
||||||
type = child.demangle(demangler, typeMetadata);
|
type = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
case LabelList:
|
case LabelList:
|
||||||
labelList = child.demangle(demangler, typeMetadata);
|
labelList = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -28,17 +27,16 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftFunctionTypeNode extends SwiftNode {
|
public class SwiftFunctionTypeNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
Demangled argumentTuple = null;
|
Demangled argumentTuple = null;
|
||||||
Demangled returnType = null;
|
Demangled returnType = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case ArgumentTuple:
|
case ArgumentTuple:
|
||||||
argumentTuple = child.demangle(demangler, typeMetadata);
|
argumentTuple = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
case ReturnType:
|
case ReturnType:
|
||||||
returnType = child.demangle(demangler, typeMetadata);
|
returnType = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
@ -63,12 +61,12 @@ public class SwiftFunctionTypeNode extends SwiftNode {
|
||||||
SwiftNode struct = functionAncestor.getChild(SwiftDemangledNodeKind.Structure);
|
SwiftNode struct = functionAncestor.getChild(SwiftDemangledNodeKind.Structure);
|
||||||
SwiftNode enumm = functionAncestor.getChild(SwiftDemangledNodeKind.Enum);
|
SwiftNode enumm = functionAncestor.getChild(SwiftDemangledNodeKind.Enum);
|
||||||
if (struct != null) {
|
if (struct != null) {
|
||||||
if (struct.demangle(demangler, typeMetadata) instanceof DemangledDataType type) {
|
if (struct.demangle(demangler) instanceof DemangledDataType type) {
|
||||||
function.addParameter(new DemangledParameter(type));
|
function.addParameter(new DemangledParameter(type));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (enumm != null) {
|
else if (enumm != null) {
|
||||||
if (enumm.demangle(demangler, typeMetadata) instanceof DemangledDataType type) {
|
if (enumm.demangle(demangler) instanceof DemangledDataType type) {
|
||||||
function.addParameter(new DemangledParameter(type));
|
function.addParameter(new DemangledParameter(type));
|
||||||
// Enums are currently represented as single field structures, but in reality,
|
// Enums are currently represented as single field structures, but in reality,
|
||||||
// there could be more fields. Add a varargs parameter so these other fields
|
// there could be more fields. Add a varargs parameter so these other fields
|
||||||
|
@ -94,7 +92,7 @@ public class SwiftFunctionTypeNode extends SwiftNode {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
SwiftTuple tuple = new SwiftTuple(properties.mangled(),
|
SwiftTuple tuple = new SwiftTuple(properties.mangled(),
|
||||||
properties.originalDemangled(), list, typeMetadata, demangler);
|
properties.originalDemangled(), list, demangler);
|
||||||
function.setReturnType(tuple);
|
function.setReturnType(tuple);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -29,18 +28,17 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftGetterNode extends SwiftNode {
|
public class SwiftGetterNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
Demangled demangled = null;
|
Demangled demangled = null;
|
||||||
String name = "get_";
|
String name = "get_";
|
||||||
String callingConvention = CompilerSpec.CALLING_CONVENTION_default;
|
String callingConvention = CompilerSpec.CALLING_CONVENTION_default;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Subscript:
|
case Subscript:
|
||||||
demangled = child.demangle(demangler, typeMetadata);
|
demangled = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
case Variable:
|
case Variable:
|
||||||
demangled = child.demangle(demangler, typeMetadata);
|
demangled = child.demangle(demangler);
|
||||||
if (child.hasChild(SwiftDemangledNodeKind.Class)) {
|
if (child.hasChild(SwiftDemangledNodeKind.Class)) {
|
||||||
callingConvention = CompilerSpec.CALLING_CONVENTION_thiscall;
|
callingConvention = CompilerSpec.CALLING_CONVENTION_thiscall;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.Demangled;
|
import ghidra.app.util.demangler.Demangled;
|
||||||
import ghidra.app.util.demangler.DemangledException;
|
import ghidra.app.util.demangler.DemangledException;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
|
@ -29,8 +28,7 @@ import ghidra.program.model.data.DataUtilities;
|
||||||
public class SwiftGlobalNode extends SwiftNode {
|
public class SwiftGlobalNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
Demangled demangled = null;
|
Demangled demangled = null;
|
||||||
Demangled suffix = null;
|
Demangled suffix = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
|
@ -40,10 +38,10 @@ public class SwiftGlobalNode extends SwiftNode {
|
||||||
case ObjCAttribute:
|
case ObjCAttribute:
|
||||||
continue;
|
continue;
|
||||||
case Suffix:
|
case Suffix:
|
||||||
suffix = child.demangle(demangler, typeMetadata);
|
suffix = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
demangled = child.demangle(demangler, typeMetadata);
|
demangled = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,6 @@ package ghidra.app.util.demangler.swift.nodes;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -29,13 +28,12 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftGlobalVariableOnceDeclListNode extends SwiftNode {
|
public class SwiftGlobalVariableOnceDeclListNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
List<Demangled> elements = new ArrayList<>();
|
List<Demangled> elements = new ArrayList<>();
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Identifier:
|
case Identifier:
|
||||||
elements.add(child.demangle(demangler, typeMetadata));
|
elements.add(child.demangle(demangler));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -28,20 +27,19 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftGlobalVariableOnceFunctionNode extends SwiftNode {
|
public class SwiftGlobalVariableOnceFunctionNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
DemangledList names = null;
|
DemangledList names = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case GlobalVariableOnceDeclList:
|
case GlobalVariableOnceDeclList:
|
||||||
Demangled demangled = child.demangle(demangler, typeMetadata);
|
Demangled demangled = child.demangle(demangler);
|
||||||
if (demangled instanceof DemangledList list) {
|
if (demangled instanceof DemangledList list) {
|
||||||
names = list;
|
names = list;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Structure:
|
case Structure:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -26,9 +25,8 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftInOutNode extends SwiftNode {
|
public class SwiftInOutNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
Demangled demangled = demangleFirstChild(demangler);
|
||||||
Demangled demangled = demangleFirstChild(demangler, typeMetadata);
|
|
||||||
if (demangled instanceof DemangledDataType type) {
|
if (demangled instanceof DemangledDataType type) {
|
||||||
type.incrementPointerLevels();
|
type.incrementPointerLevels();
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.Demangled;
|
import ghidra.app.util.demangler.Demangled;
|
||||||
import ghidra.app.util.demangler.DemangledException;
|
import ghidra.app.util.demangler.DemangledException;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
|
@ -29,14 +28,13 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftInitializerNode extends SwiftNode {
|
public class SwiftInitializerNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Variable:
|
case Variable:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
name = "init";
|
name = "init";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -18,7 +18,6 @@ package ghidra.app.util.demangler.swift.nodes;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -29,13 +28,12 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftLabelListNode extends SwiftNode {
|
public class SwiftLabelListNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
List<Demangled> elements = new ArrayList<>();
|
List<Demangled> elements = new ArrayList<>();
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Identifier:
|
case Identifier:
|
||||||
elements.add(child.demangle(demangler, typeMetadata));
|
elements.add(child.demangle(demangler));
|
||||||
break;
|
break;
|
||||||
case FirstElementMarker:
|
case FirstElementMarker:
|
||||||
elements.add(new DemangledUnknown(properties.mangled(),
|
elements.add(new DemangledUnknown(properties.mangled(),
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.Demangled;
|
import ghidra.app.util.demangler.Demangled;
|
||||||
import ghidra.app.util.demangler.DemangledException;
|
import ghidra.app.util.demangler.DemangledException;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
|
@ -29,14 +28,13 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftLazyProtocolWitnessTableAccessorNode extends SwiftNode {
|
public class SwiftLazyProtocolWitnessTableAccessorNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Type:
|
case Type:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
name = "lazy_protocol_witness_table_accessor";
|
name = "lazy_protocol_witness_table_accessor";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -26,8 +25,7 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftLocalDeclNameNode extends SwiftNode {
|
public class SwiftLocalDeclNameNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Long number = null;
|
Long number = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -29,18 +28,17 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftModifyAccessorNode extends SwiftNode {
|
public class SwiftModifyAccessorNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
Demangled demangled = null;
|
Demangled demangled = null;
|
||||||
String name = "modify_";
|
String name = "modify_";
|
||||||
String callingConvention = CompilerSpec.CALLING_CONVENTION_thiscall;
|
String callingConvention = CompilerSpec.CALLING_CONVENTION_thiscall;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Subscript:
|
case Subscript:
|
||||||
demangled = child.demangle(demangler, typeMetadata);
|
demangled = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
case Variable:
|
case Variable:
|
||||||
demangled = child.demangle(demangler, typeMetadata);
|
demangled = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -19,7 +19,6 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -113,7 +112,7 @@ public abstract class SwiftNode {
|
||||||
case Tuple -> new SwiftTupleNode();
|
case Tuple -> new SwiftTupleNode();
|
||||||
case TupleElement -> new SwiftTupleElementNode();
|
case TupleElement -> new SwiftTupleElementNode();
|
||||||
case TupleElementName -> new SwiftGenericTextNode();
|
case TupleElementName -> new SwiftGenericTextNode();
|
||||||
case Type -> new SwiftTypeNode();
|
case Type -> new SwiftGenericPassthroughNode();
|
||||||
case TypeAlias -> new SwiftTypeAliasNode();
|
case TypeAlias -> new SwiftTypeAliasNode();
|
||||||
case TypeList -> new SwiftTypeListNode();
|
case TypeList -> new SwiftTypeListNode();
|
||||||
case TypeMetadataAccessFunction -> new SwiftTypeMetadataAccessFunctionNode();
|
case TypeMetadataAccessFunction -> new SwiftTypeMetadataAccessFunctionNode();
|
||||||
|
@ -129,11 +128,10 @@ public abstract class SwiftNode {
|
||||||
* Demangles this {@link SwiftNode}
|
* Demangles this {@link SwiftNode}
|
||||||
*
|
*
|
||||||
* @param demangler The {@link SwiftDemangler}
|
* @param demangler The {@link SwiftDemangler}
|
||||||
* @param typeMetadata The {@link SwiftTypeMetadata}, or null if it is not known
|
|
||||||
* @return The demangled {@link SwiftNode}
|
* @return The demangled {@link SwiftNode}
|
||||||
* @throws DemangledException if a problem occurred
|
* @throws DemangledException if a problem occurred
|
||||||
*/
|
*/
|
||||||
public abstract Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public abstract Demangled demangle(SwiftDemangler demangler)
|
||||||
throws DemangledException;
|
throws DemangledException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -354,17 +352,16 @@ public abstract class SwiftNode {
|
||||||
* Demangles the first child {@link SwiftNode}, if it exists
|
* Demangles the first child {@link SwiftNode}, if it exists
|
||||||
*
|
*
|
||||||
* @param demangler The {@link SwiftDemangler}
|
* @param demangler The {@link SwiftDemangler}
|
||||||
* @param typeMetadata The {@link SwiftTypeMetadata}, or null if it is not known
|
|
||||||
* @return The demangled first child {@link SwiftNode}
|
* @return The demangled first child {@link SwiftNode}
|
||||||
* @throws DemangledException if there are no children or another problem occurred
|
* @throws DemangledException if there are no children or another problem occurred
|
||||||
*/
|
*/
|
||||||
protected Demangled demangleFirstChild(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
protected Demangled demangleFirstChild(SwiftDemangler demangler)
|
||||||
throws DemangledException {
|
throws DemangledException {
|
||||||
Demangled first = null;
|
Demangled first = null;
|
||||||
for (int i = 0; i < children.size(); i++) {
|
for (int i = 0; i < children.size(); i++) {
|
||||||
SwiftNode child = children.get(i);
|
SwiftNode child = children.get(i);
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
first = child.demangle(demangler, typeMetadata);
|
first = child.demangle(demangler);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
child.skip(child);
|
child.skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -28,13 +27,12 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftOutlinedConsumeNode extends SwiftNode {
|
public class SwiftOutlinedConsumeNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
Demangled type = null;
|
Demangled type = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Type:
|
case Type:
|
||||||
type = child.demangle(demangler, typeMetadata);
|
type = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -28,13 +27,12 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftOutlinedCopyNode extends SwiftNode {
|
public class SwiftOutlinedCopyNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
Demangled type = null;
|
Demangled type = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Type:
|
case Type:
|
||||||
type = child.demangle(demangler, typeMetadata);
|
type = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -26,15 +25,14 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftPrivateDeclNameNode extends SwiftNode {
|
public class SwiftPrivateDeclNameNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Identifier:
|
case Identifier:
|
||||||
if (namespace == null) {
|
if (namespace == null) {
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
name = child.getText();
|
name = child.getText();
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -26,22 +25,21 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftProtocolConformanceNode extends SwiftNode {
|
public class SwiftProtocolConformanceNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
Demangled type = null;
|
||||||
Demangled type1 = null;
|
Demangled protocol = null;
|
||||||
Demangled type2 = null;
|
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Module:
|
case Module:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
case Type:
|
case Type:
|
||||||
if (type1 == null) {
|
if (child.hasChild(SwiftDemangledNodeKind.Protocol)) {
|
||||||
type1 = child.demangle(demangler, typeMetadata);
|
protocol = child.demangle(demangler);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
type2 = child.demangle(demangler, typeMetadata);
|
type = child.demangle(demangler);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -49,11 +47,12 @@ public class SwiftProtocolConformanceNode extends SwiftNode {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (type1 == null && type2 == null) {
|
if (type == null || protocol == null) {
|
||||||
return getUnknown();
|
return getUnknown();
|
||||||
}
|
}
|
||||||
DemangledUnknown demangled = new DemangledUnknown(properties.mangled(),
|
DemangledUnknown demangled =
|
||||||
properties.originalDemangled(), SwiftNode.join(type2, type1).getNamespaceString());
|
new DemangledUnknown(properties.mangled(), properties.originalDemangled(),
|
||||||
|
type.getNamespaceString() + "->" + protocol.getNamespaceString());
|
||||||
demangled.setNamespace(namespace);
|
demangled.setNamespace(namespace);
|
||||||
return demangled;
|
return demangled;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -26,8 +25,7 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftProtocolNode extends SwiftNode {
|
public class SwiftProtocolNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
|
@ -36,7 +34,7 @@ public class SwiftProtocolNode extends SwiftNode {
|
||||||
name = child.getText();
|
name = child.getText();
|
||||||
break;
|
break;
|
||||||
case Module:
|
case Module:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -29,18 +28,17 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftSetterNode extends SwiftNode {
|
public class SwiftSetterNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
Demangled demangled = null;
|
Demangled demangled = null;
|
||||||
String name = "set_";
|
String name = "set_";
|
||||||
String callingConvention = CompilerSpec.CALLING_CONVENTION_thiscall;
|
String callingConvention = CompilerSpec.CALLING_CONVENTION_thiscall;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Subscript:
|
case Subscript:
|
||||||
demangled = child.demangle(demangler, typeMetadata);
|
demangled = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
case Variable:
|
case Variable:
|
||||||
demangled = child.demangle(demangler, typeMetadata);
|
demangled = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -27,8 +26,7 @@ import ghidra.app.util.demangler.swift.datatypes.*;
|
||||||
public class SwiftStructureNode extends SwiftNode {
|
public class SwiftStructureNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
Demangled privateDeclNamespace = null;
|
Demangled privateDeclNamespace = null;
|
||||||
|
@ -38,14 +36,15 @@ public class SwiftStructureNode extends SwiftNode {
|
||||||
name = child.getText();
|
name = child.getText();
|
||||||
break;
|
break;
|
||||||
case PrivateDeclName:
|
case PrivateDeclName:
|
||||||
Demangled temp = child.demangle(demangler, typeMetadata);
|
Demangled temp = child.demangle(demangler);
|
||||||
name = temp.getName();
|
name = temp.getName();
|
||||||
privateDeclNamespace = temp.getNamespace();
|
privateDeclNamespace = temp.getNamespace();
|
||||||
break;
|
break;
|
||||||
case Class:
|
case Class:
|
||||||
|
case Enum:
|
||||||
case Module:
|
case Module:
|
||||||
case Structure:
|
case Structure:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
@ -85,7 +84,7 @@ public class SwiftStructureNode extends SwiftNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
SwiftStructure struct = new SwiftStructure(mangled, orig, name,
|
SwiftStructure struct = new SwiftStructure(mangled, orig, name,
|
||||||
SwiftNode.join(namespace, privateDeclNamespace), typeMetadata, demangler);
|
SwiftNode.join(namespace, privateDeclNamespace), demangler);
|
||||||
|
|
||||||
// The structure has no fields, which behaves poorly in the decompiler. Give it one
|
// The structure has no fields, which behaves poorly in the decompiler. Give it one
|
||||||
// undefined* field instead.
|
// undefined* field instead.
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -28,8 +27,7 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftSubscriptNode extends SwiftNode {
|
public class SwiftSubscriptNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
Demangled type = null;
|
Demangled type = null;
|
||||||
|
@ -41,14 +39,14 @@ public class SwiftSubscriptNode extends SwiftNode {
|
||||||
callingConvention = CompilerSpec.CALLING_CONVENTION_thiscall;
|
callingConvention = CompilerSpec.CALLING_CONVENTION_thiscall;
|
||||||
// Fall through
|
// Fall through
|
||||||
case Structure:
|
case Structure:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
name = "subscript";
|
name = "subscript";
|
||||||
break;
|
break;
|
||||||
case LabelList:
|
case LabelList:
|
||||||
labelList = child.demangle(demangler, typeMetadata);
|
labelList = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
case Type:
|
case Type:
|
||||||
type = child.demangle(demangler, typeMetadata);
|
type = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -26,8 +25,7 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftTupleElementNode extends SwiftNode {
|
public class SwiftTupleElementNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
Demangled type = null;
|
Demangled type = null;
|
||||||
String name = null;
|
String name = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
|
@ -36,7 +34,7 @@ public class SwiftTupleElementNode extends SwiftNode {
|
||||||
name = child.getText();
|
name = child.getText();
|
||||||
break;
|
break;
|
||||||
case Type:
|
case Type:
|
||||||
type = child.demangle(demangler, typeMetadata);
|
type = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -18,7 +18,6 @@ package ghidra.app.util.demangler.swift.nodes;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -29,13 +28,12 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftTupleNode extends SwiftNode {
|
public class SwiftTupleNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
List<Demangled> elements = new ArrayList<>();
|
List<Demangled> elements = new ArrayList<>();
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case TupleElement:
|
case TupleElement:
|
||||||
elements.add(child.demangle(demangler, typeMetadata));
|
elements.add(child.demangle(demangler));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -26,8 +25,7 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftTypeAliasNode extends SwiftNode {
|
public class SwiftTypeAliasNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
|
@ -36,7 +34,7 @@ public class SwiftTypeAliasNode extends SwiftNode {
|
||||||
name = child.getText();
|
name = child.getText();
|
||||||
break;
|
break;
|
||||||
case Module:
|
case Module:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -18,7 +18,6 @@ package ghidra.app.util.demangler.swift.nodes;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -29,13 +28,12 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftTypeListNode extends SwiftNode {
|
public class SwiftTypeListNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
List<Demangled> elements = new ArrayList<>();
|
List<Demangled> elements = new ArrayList<>();
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Type:
|
case Type:
|
||||||
elements.add(child.demangle(demangler, typeMetadata));
|
elements.add(child.demangle(demangler));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -28,14 +27,13 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftTypeMetadataAccessFunctionNode extends SwiftNode {
|
public class SwiftTypeMetadataAccessFunctionNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Type:
|
case Type:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
name = "typeMetadataAccessor";
|
name = "typeMetadataAccessor";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
/* ###
|
|
||||||
* IP: GHIDRA
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.Demangled;
|
|
||||||
import ghidra.app.util.demangler.DemangledException;
|
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A {@link SwiftDemangledNodeKind#Type} {@link SwiftNode}
|
|
||||||
*/
|
|
||||||
public class SwiftTypeNode extends SwiftNode {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
|
||||||
throws DemangledException {
|
|
||||||
return demangleFirstChild(demangler, typeMetadata);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.Demangled;
|
import ghidra.app.util.demangler.Demangled;
|
||||||
import ghidra.app.util.demangler.DemangledException;
|
import ghidra.app.util.demangler.DemangledException;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
|
@ -29,14 +28,13 @@ import ghidra.program.model.lang.CompilerSpec;
|
||||||
public class SwiftUnsafeMutableAddressorNode extends SwiftNode {
|
public class SwiftUnsafeMutableAddressorNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
for (SwiftNode child : getChildren()) {
|
for (SwiftNode child : getChildren()) {
|
||||||
switch (child.getKind()) {
|
switch (child.getKind()) {
|
||||||
case Variable:
|
case Variable:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
name = "unsafeMutableAddressor";
|
name = "unsafeMutableAddressor";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -15,8 +15,8 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.Demangled;
|
import ghidra.app.util.demangler.Demangled;
|
||||||
|
import ghidra.app.util.demangler.DemangledException;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ public class SwiftUnsupportedNode extends SwiftNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata) {
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
skip(this);
|
skip(this);
|
||||||
return getUnknown();
|
return getUnknown();
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes;
|
package ghidra.app.util.demangler.swift.nodes;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
import ghidra.app.util.demangler.swift.SwiftDemangledNodeKind;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -26,8 +25,7 @@ import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
public class SwiftVariableNode extends SwiftNode {
|
public class SwiftVariableNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
Demangled namespace = null;
|
Demangled namespace = null;
|
||||||
Demangled privateDeclNamespace = null;
|
Demangled privateDeclNamespace = null;
|
||||||
|
@ -38,7 +36,7 @@ public class SwiftVariableNode extends SwiftNode {
|
||||||
name = child.getText();
|
name = child.getText();
|
||||||
break;
|
break;
|
||||||
case PrivateDeclName:
|
case PrivateDeclName:
|
||||||
Demangled temp = child.demangle(demangler, typeMetadata);
|
Demangled temp = child.demangle(demangler);
|
||||||
name = temp.getName();
|
name = temp.getName();
|
||||||
privateDeclNamespace = temp.getNamespace();
|
privateDeclNamespace = temp.getNamespace();
|
||||||
break;
|
break;
|
||||||
|
@ -48,10 +46,10 @@ public class SwiftVariableNode extends SwiftNode {
|
||||||
case Module:
|
case Module:
|
||||||
case Protocol:
|
case Protocol:
|
||||||
case Structure:
|
case Structure:
|
||||||
namespace = child.demangle(demangler, typeMetadata);
|
namespace = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
case Type:
|
case Type:
|
||||||
type = child.demangle(demangler, typeMetadata);
|
type = child.demangle(demangler);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skip(child);
|
skip(child);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes.generic;
|
package ghidra.app.util.demangler.swift.nodes.generic;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
import ghidra.app.util.demangler.swift.nodes.SwiftNode;
|
import ghidra.app.util.demangler.swift.nodes.SwiftNode;
|
||||||
|
@ -26,9 +25,8 @@ import ghidra.app.util.demangler.swift.nodes.SwiftNode;
|
||||||
public class SwiftGenericDescriptorNode extends SwiftNode {
|
public class SwiftGenericDescriptorNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
Demangled demangled = demangleFirstChild(demangler);
|
||||||
Demangled demangled = demangleFirstChild(demangler, typeMetadata);
|
|
||||||
return new DemangledLabel(properties.mangled(), properties.originalDemangled(),
|
return new DemangledLabel(properties.mangled(), properties.originalDemangled(),
|
||||||
demangled.getNamespaceString());
|
demangled.getNamespaceString());
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes.generic;
|
package ghidra.app.util.demangler.swift.nodes.generic;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.Demangled;
|
import ghidra.app.util.demangler.Demangled;
|
||||||
import ghidra.app.util.demangler.DemangledLabel;
|
import ghidra.app.util.demangler.DemangledLabel;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -27,8 +26,7 @@ import ghidra.app.util.demangler.swift.nodes.SwiftNode;
|
||||||
public class SwiftGenericIndexNode extends SwiftNode {
|
public class SwiftGenericIndexNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata) {
|
public Demangled demangle(SwiftDemangler demangler) {
|
||||||
return new DemangledLabel(properties.mangled(), properties.originalDemangled(),
|
return new DemangledLabel(properties.mangled(), properties.originalDemangled(), getIndex());
|
||||||
getIndex());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes.generic;
|
package ghidra.app.util.demangler.swift.nodes.generic;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.Demangled;
|
import ghidra.app.util.demangler.Demangled;
|
||||||
import ghidra.app.util.demangler.DemangledException;
|
import ghidra.app.util.demangler.DemangledException;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -27,8 +26,7 @@ import ghidra.app.util.demangler.swift.nodes.SwiftNode;
|
||||||
public class SwiftGenericPassthroughNode extends SwiftNode {
|
public class SwiftGenericPassthroughNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata)
|
public Demangled demangle(SwiftDemangler demangler) throws DemangledException {
|
||||||
throws DemangledException {
|
return demangleFirstChild(demangler);
|
||||||
return demangleFirstChild(demangler, typeMetadata);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.util.demangler.swift.nodes.generic;
|
package ghidra.app.util.demangler.swift.nodes.generic;
|
||||||
|
|
||||||
import ghidra.app.util.bin.format.swift.SwiftTypeMetadata;
|
|
||||||
import ghidra.app.util.demangler.Demangled;
|
import ghidra.app.util.demangler.Demangled;
|
||||||
import ghidra.app.util.demangler.DemangledLabel;
|
import ghidra.app.util.demangler.DemangledLabel;
|
||||||
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
import ghidra.app.util.demangler.swift.SwiftDemangler;
|
||||||
|
@ -27,8 +26,7 @@ import ghidra.app.util.demangler.swift.nodes.SwiftNode;
|
||||||
public class SwiftGenericTextNode extends SwiftNode {
|
public class SwiftGenericTextNode extends SwiftNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Demangled demangle(SwiftDemangler demangler, SwiftTypeMetadata typeMetadata) {
|
public Demangled demangle(SwiftDemangler demangler) {
|
||||||
return new DemangledLabel(properties.mangled(), properties.originalDemangled(),
|
return new DemangledLabel(properties.mangled(), properties.originalDemangled(), getText());
|
||||||
getText());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue