public int assignAddress(DataType dt, PrototypePieces proto, int pos, DataTypeManager dtManager,
			int[] status, ParameterPieces res) {
		if (!filter.filter(dt)) {
			return AssignAction.FAIL;
		}
		if (qualifier != null && !qualifier.filter(proto, pos)) {
			return AssignAction.FAIL;
		}
		int response = assign.assignAddress(dt, proto, pos, dtManager, status, res);
		if (response != AssignAction.FAIL) {
			for (int i = 0; i < sideeffects.length; ++i) {
				sideeffects[i].assignAddress(dt, proto, pos, dtManager, status, res);
			}
		}
		return response;
	}
Assign an address and other details for a specific parameter or for return storage in context

The Address is only assigned if the data-type filter and the optional qualifier filter
pass, otherwise a FAIL response is returned.
If the filters pass, the Address is assigned based on the AssignAction specific to
this rule, and the action's response code is returned.
@param dt is the data-type of the parameter or return value
@param proto is the high-level description of the function prototype
@param pos is the position of the parameter (pos>=0) or return storage (pos=-1)
@param dtManager is a data-type manager for (possibly) transforming the data-type
@param status is the resource consumption array
@param res will hold the resulting description of the parameter
@return the response code
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ModelRule.java