@Override
	public boolean isEquivalent(CompilerSpec obj) {
		if (getClass() != obj.getClass()) {
			return false;
		}
		BasicCompilerSpec other = (BasicCompilerSpec) obj;
		if (aggressiveTrim != other.aggressiveTrim) {
			return false;
		}
		if (!dataOrganization.isEquivalent(other.dataOrganization)) {
			return false;
		}
		if (ctxsetting.size() != other.ctxsetting.size()) {
			return false;
		}
		for (int i = 0; i < ctxsetting.size(); ++i) {
			if (!ctxsetting.get(i).isEquivalent(other.ctxsetting.get(i))) {
				return false;
			}
		}
		if (!SystemUtilities.isEqual(deadCodeDelay, other.deadCodeDelay)) {
			return false;
		}
		if (defaultModel != null) {
			if (other.defaultModel == null) {
				return false;
			}
			if (!defaultModel.name.equals(other.defaultModel.name)) {
				return false;
			}
		}
		else if (other.defaultModel != null) {
			return false;
		}
		if (evalCalledModel != null) {
			if (other.evalCalledModel == null) {
				return false;
			}
			if (!evalCalledModel.name.equals(other.evalCalledModel.name)) {
				return false;
			}
		}
		else if (other.evalCalledModel != null) {
			return false;
		}
		if (evalCurrentModel != null) {
			if (other.evalCurrentModel == null) {
				return false;
			}
			if (!evalCurrentModel.name.equals(other.evalCurrentModel.name)) {
				return false;
			}
		}
		else if (other.evalCurrentModel != null) {
			return false;
		}
		if (allmodels.length != other.allmodels.length) {
			return false;
		}
		for (int i = 0; i < allmodels.length; ++i) {
			if (!allmodels[i].isEquivalent(other.allmodels[i])) {
				return false;
			}
		}
		if (!SystemUtilities.isEqual(extraRanges, other.extraRanges)) {
			return false;
		}
		if (funcPtrAlign != other.funcPtrAlign) {
			return false;
		}
		if (!globalSet.equals(other.globalSet)) {
			return false;
		}
		if (!SystemUtilities.isEqual(inferPtrBounds, other.inferPtrBounds)) {
			return false;
		}
		if (!SystemUtilities.isEqual(noHighPtr, other.noHighPtr)) {
			return false;
		}
		if (!pcodeInject.isEquivalent(other.pcodeInject)) {
			return false;
		}
		if (!SystemUtilities.isEqual(preferSplit, other.preferSplit)) {
			return false;
		}
		if (!properties.equals(other.properties)) {
			return false;
		}
		if (!SystemUtilities.isEqual(readOnlySet, other.readOnlySet)) {
			return false;
		}
		if (!SystemUtilities.isEqual(returnAddress, other.returnAddress)) {
			return false;
		}
		if (reverseJustifyStack != other.reverseJustifyStack) {
			return false;
		}
		if (!SystemUtilities.isEqual(spaceBases, other.spaceBases)) {
			return false;
		}
		if (!SystemUtilities.isEqual(stackBaseSpace, other.stackBaseSpace)) {
			return false;
		}
		if (stackGrowsNegative != other.stackGrowsNegative) {
			return false;
		}
		if (!SystemUtilities.isEqual(stackPointer, other.stackPointer)) {
			return false;
		}
		return true;
	}
Sets the {@code returnaddress} of {@code model} to the {@code returnAddress}
of {@code this} if the model does not have a return address set.
@param model prototype
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/BasicCompilerSpec.java