@Override
	public boolean equals(Object obj) {
		if (obj == null) {
			return false;
		}
		if (obj == this) {
			return true;
		}
		if (!(obj instanceof StackFrame)) {
			return false;
		}
		StackFrame otherFrame = (StackFrame) obj;
		Variable[] otherVars = otherFrame.getStackVariables();
		if ((this.getLocalSize() != otherFrame.getLocalSize()) ||
			(this.paramStart != otherFrame.getParameterOffset()) ||
			(this.returnStart != otherFrame.getReturnAddressOffset()) ||
			(this.variables.size() != otherVars.length)) {
			return false;
		}
		Iterator<Variable> myIter = this.variables.iterator();
		for (int i = 0; i < otherVars.length && myIter.hasNext(); i++) {
			Variable myVar = myIter.next();
			if (!(myVar.equals(otherVars[i]))) {
				return false;
			}
		}
		return true;
	}
Returns whether some other stack frame is "equivalent to" this one.
The stack frame is considered equal to another even if they are each
part of a different function.
@param obj the object to compare for equality.
Ghidra/Features/Base/src/main/java/ghidra/util/StackFrameImpl.java