protected T evaluateLeaf(Program program, Varnode vn) {
		Address address = vn.getAddress();
		if (address.isConstantAddress()) {
			return evaluateConstant(vn.getOffset(), vn.getSize());
		}
		else if (address.isRegisterAddress()) {
			return evaluateRegister(address, vn.getSize());
		}
		else if (address.isStackAddress()) {
			return evaluateStack(address.getOffset(), vn.getSize());
		}
		else if (address.isMemoryAddress()) {
			return evaluateMemory(translateMemory(program, address), vn.getSize());
		}
		else if (address.isUniqueAddress()) {
			return evaluateUnique(vn.getOffset(), vn.getSize());
		}
		else {
			throw new PcodeExecutionException("Unrecognized address space in " + vn);
		}
	}
Evaluate a leaf varnode

<p>
This method translates the varnode accordingly and delegates the evaluation, indirectly, to
{@link #evaluateMemory(Address, int)}. Notable exceptions are constants, which are just
evaluated to their immediate value, and unique variables, which cannot ordinarily be leaves.

@param program the program defining the static context
@param vn the varnode
@return the value obtained from the dynamic context
Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/eval/AbstractVarnodeEvaluator.java