@Override
	public AddressSetView analyzeLocation(final Program program, Address start, AddressSetView set,
			final TaskMonitor monitor) throws CancelledException {

		monitor.checkCancelled();

		// get the function body
		if (program.getListing().getInstructionAt(start) == null) {
			return new AddressSet();
		}

		Address flowStart = start;
		AddressSetView flowSet = set;
		final Function func = program.getFunctionManager().getFunctionContaining(start);
		if (func != null) {
			AddressSetView body = func.getBody();
			// don't override flow set if only one address
			if (body.getNumAddresses() > 1) {
				flowSet = body;
			}
			flowStart = func.getEntryPoint();
		}

		SymbolicPropogator symEval = new SymbolicPropogator(program);
		symEval.setParamRefCheck(checkParamRefsOption);

		symEval.setParamPointerRefCheck(checkPointerParamRefsOption);

		symEval.setReturnRefCheck(checkParamRefsOption);
		symEval.setStoredRefCheck(checkStoredRefsOption);

		// follow all flows building up context
		// use context to fill out addresses on certain instructions 
		return flowConstants(program, flowStart, flowSet, symEval, monitor);
	}
Analyze a single location

@param program - program to analyze
@param start - location to start flowing constants
@param set - restriction set of addresses to analyze
@param monitor - monitor to check canceled

@return - set of addresses actually flowed to
@throws CancelledException
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/ConstantPropagationAnalyzer.java