public Varnode getVarnode(Varnode space, Varnode offset, int size, ContextEvaluator evaluator) {
		if (offset == null) {
			return null;
		}
		int spaceID = offset.getSpace();
		long valbase = 0;
		if (isRegister(offset)) {
			Register reg = trans.getRegister(offset);
			if (reg == null) {
				return null;
			}
			spaceID = getAddressSpace(reg.getName(),reg.getBitLength());
			valbase = 0;
		}
		else if (offset.isConstant()) {
			valbase = offset.getOffset();
			spaceID = (int) space.getOffset();
		}
		else if (isSuspectConstant(offset)) {
			// constant suspicious don't let if fall into symbolic
			// handle same as normal constant but keep suspicious space
			valbase = offset.getOffset();
			spaceID = (int) space.getOffset();
		}
		else if (OffsetAddressFactory.isSymbolSpace(spaceID)) {
			if (evaluator == null) {
				return null;
			}

			// is there an assumed value that should be returned for any unknown value?
			Instruction instr = getCurrentInstruction(currentAddress);
			Long lval = evaluator.unknownValue(this, instr, offset);
			valbase = offset.getOffset();
			if (lval != null) {
				spaceID = (int) space.getOffset();
				valbase += lval.longValue();
			}
		}
		else {
			return null;
		}
		return getVarnode(spaceID, valbase, size);
	}
return the location that this varnode was last set
This is a transient thing, so it should only be used as a particular flow is being processed...

@param rvar the register varnode
@param bval this parameter is unused.
@return address that the register was set.
Ghidra/Features/Base/src/main/java/ghidra/program/util/VarnodeContext.java