mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 18:29:37 +02:00
Additional datatype resolve cleanup
This commit is contained in:
parent
7f09488133
commit
1f9bd91fcb
5 changed files with 11 additions and 19 deletions
|
@ -276,13 +276,13 @@ abstract class CompositeDB extends DataTypeDB implements Composite {
|
|||
}
|
||||
}
|
||||
|
||||
protected DataType doCheckedResolve(DataType dt, DataTypeConflictHandler handler)
|
||||
protected DataType doCheckedResolve(DataType dt)
|
||||
throws DataTypeDependencyException {
|
||||
if (dt instanceof Pointer) {
|
||||
pointerPostResolveRequired = true;
|
||||
return resolve(((Pointer) dt).newPointer(DataType.DEFAULT));
|
||||
}
|
||||
dt = resolve(dt, handler);
|
||||
dt = resolve(dt);
|
||||
checkAncestry(dt);
|
||||
return dt;
|
||||
}
|
||||
|
|
|
@ -268,15 +268,11 @@ abstract class DataTypeDB extends DatabaseObject implements DataType, ChangeList
|
|||
}
|
||||
|
||||
protected DataType resolve(DataType dt) {
|
||||
return resolve(dt, dataMgr.getDependencyConflictHandler());
|
||||
}
|
||||
|
||||
protected DataType resolve(DataType dt, DataTypeConflictHandler handler) {
|
||||
// complex types should keep equivalence checks to a minimum while resolving
|
||||
// and when post-resolve required for pointers
|
||||
resolving = true;
|
||||
try {
|
||||
dt = dataMgr.resolve(dt, handler);
|
||||
dt = dataMgr.resolve(dt, dataMgr.getDependencyConflictHandler());
|
||||
}
|
||||
finally {
|
||||
resolving = false;
|
||||
|
|
|
@ -260,7 +260,7 @@ class FunctionDefinitionDB extends DataTypeDB implements FunctionDefinition {
|
|||
for (int i = 0; i < args.length; i++) {
|
||||
DataType type =
|
||||
ParameterDefinitionImpl.validateDataType(args[i].getDataType(), dataMgr, false);
|
||||
DataType resolvedDt = resolve(type, dataMgr.getDependencyConflictHandler());
|
||||
DataType resolvedDt = resolve(type);
|
||||
paramAdapter.createRecord(dataMgr.getID(resolvedDt), key, i, args[i].getName(),
|
||||
args[i].getComment(), args[i].getLength());
|
||||
resolvedDt.addParent(this);
|
||||
|
@ -287,7 +287,7 @@ class FunctionDefinitionDB extends DataTypeDB implements FunctionDefinition {
|
|||
if (type == null) {
|
||||
type = DataType.DEFAULT;
|
||||
}
|
||||
DataType resolvedDt = resolve(type, dataMgr.getDependencyConflictHandler());
|
||||
DataType resolvedDt = resolve(type);
|
||||
record.setLongValue(FunctionDefinitionDBAdapter.FUNCTION_DEF_RETURN_ID_COL,
|
||||
dataMgr.getID(resolvedDt));
|
||||
funDefAdapter.updateRecord(record, true);
|
||||
|
@ -472,7 +472,7 @@ class FunctionDefinitionDB extends DataTypeDB implements FunctionDefinition {
|
|||
param.getDataType().removeParent(this);
|
||||
paramAdapter.removeRecord(param.getKey());
|
||||
}
|
||||
DataType rdt = resolve(dt, dataMgr.getDependencyConflictHandler());
|
||||
DataType rdt = resolve(dt);
|
||||
rdt.addParent(this);
|
||||
paramAdapter.createRecord(dataMgr.getID(rdt), key, ordinal, name, comment,
|
||||
dt.getLength());
|
||||
|
|
|
@ -115,7 +115,7 @@ class StructureDB extends CompositeDB implements Structure {
|
|||
|
||||
if (validateAlignAndNotify) {
|
||||
validateDataType(dataType);
|
||||
dataType = resolve(dataType, null);
|
||||
dataType = resolve(dataType);
|
||||
checkAncestry(dataType);
|
||||
}
|
||||
|
||||
|
@ -172,7 +172,7 @@ class StructureDB extends CompositeDB implements Structure {
|
|||
|
||||
if (validateAlignAndNotify) {
|
||||
validateDataType(dataType);
|
||||
dataType = resolve(dataType, null);
|
||||
dataType = resolve(dataType);
|
||||
if (isInvalidFlexArrayDataType(dataType)) {
|
||||
throw new IllegalArgumentException(
|
||||
"Unsupported flexType: " + dataType.getDisplayName());
|
||||
|
@ -1187,18 +1187,16 @@ class StructureDB extends CompositeDB implements Structure {
|
|||
void doReplaceWith(Structure struct, boolean notify)
|
||||
throws DataTypeDependencyException, IOException {
|
||||
|
||||
DataTypeConflictHandler handler = dataMgr.getDependencyConflictHandler();
|
||||
|
||||
// pre-resolved component types to catch dependency issues early
|
||||
DataTypeComponent flexComponent = struct.getFlexibleArrayComponent();
|
||||
DataTypeComponent[] otherComponents = struct.getDefinedComponents();
|
||||
DataType[] resolvedDts = new DataType[otherComponents.length];
|
||||
for (int i = 0; i < otherComponents.length; i++) {
|
||||
resolvedDts[i] = doCheckedResolve(otherComponents[i].getDataType(), handler);
|
||||
resolvedDts[i] = doCheckedResolve(otherComponents[i].getDataType());
|
||||
}
|
||||
DataType resolvedFlexDt = null;
|
||||
if (flexComponent != null) {
|
||||
resolvedFlexDt = doCheckedResolve(flexComponent.getDataType(), handler);
|
||||
resolvedFlexDt = doCheckedResolve(flexComponent.getDataType());
|
||||
if (isInvalidFlexArrayDataType(resolvedFlexDt)) {
|
||||
throw new IllegalArgumentException(
|
||||
"Unsupported flexType: " + resolvedFlexDt.getDisplayName());
|
||||
|
|
|
@ -266,13 +266,11 @@ class UnionDB extends CompositeDB implements Union {
|
|||
void doReplaceWith(Union union, boolean notify)
|
||||
throws DataTypeDependencyException {
|
||||
|
||||
DataTypeConflictHandler handler = dataMgr.getDependencyConflictHandler();
|
||||
|
||||
// pre-resolved component types to catch dependency issues early
|
||||
DataTypeComponent[] otherComponents = union.getComponents();
|
||||
DataType[] resolvedDts = new DataType[otherComponents.length];
|
||||
for (int i = 0; i < otherComponents.length; i++) {
|
||||
resolvedDts[i] = doCheckedResolve(otherComponents[i].getDataType(), handler);
|
||||
resolvedDts[i] = doCheckedResolve(otherComponents[i].getDataType());
|
||||
checkAncestry(resolvedDts[i]);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue