@Override
	public MaskedLong valueForResolution(OperandValue ov, Map<String, Long> vals,
			AssemblyResolvedPatterns rc) {
		Constructor cons = ov.getConstructor();
		OperandSymbol sym = cons.getOperand(ov.getIndex());
		PatternExpression patexp = sym.getDefiningExpression();
		if (patexp != null) {
			// We're good to go
		}
		else {
			TripleSymbol defSym = sym.getDefiningSymbol();
			if (defSym != null) {
				patexp = defSym.getPatternExpression();
			}
		}
		if (patexp == null) {
			return MaskedLong.ZERO; // TODO: ZERO or UNKS?
		}
		// TODO: Can just shift the rc to the left the appropriate number of bytes.
		// Would only affect the instruction block.
		// Since I'm using this just for context, ignore shifting for now.
		//int shamt = AssemblyTreeResolver.computeOffset(sym, cons, rc.children);
		// Children would be null here, anyway.
		return solver.valueForResolution(patexp, vals, rc);
		// NOTE: To be paranoid, I could check for the existence of TokenField in the expression
		// And also check if a shift would be performed.
	}
Obtains the "defining expression"

<p>
This is either the symbol's assigned defining expression, or the expression associated with
its defining symbol.

@return the defining expression, or null if neither is available
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/OperandValueSolver.java