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