public int assignAddress(DataType dt, PrototypePieces proto, int pos, DataTypeManager dtManager,
			int[] status, ParameterPieces res)

	{
		if (dt.isZeroLength()) {
			return AssignAction.NO_ASSIGNMENT;
		}
		if (dt == DataType.DEFAULT) {
			return AssignAction.NO_ASSIGNMENT;
		}
		if (dt instanceof TypeDef td && td.getBaseDataType() == DataType.DEFAULT) {
			return AssignAction.NO_ASSIGNMENT;
		}
		for (ModelRule modelRule : modelRules) {
			int responseCode = modelRule.assignAddress(dt, proto, pos, dtManager, status, res);
			if (responseCode != AssignAction.FAIL) {
				return responseCode;
			}
		}
		StorageClass store = ParamEntry.getBasicTypeClass(dt);
		return assignAddressFallback(store, dt, false, status, res);
	}
Fill in the Address and other details for the given parameter

Attempt to apply a ModelRule first. If these do not succeed, use the fallback assignment algorithm.
@param dt is the data-type assigned to the parameter
@param proto is the description of the function prototype
@param pos is the position of the parameter to assign (pos=-1 for output, pos >=0 for input)
@param dtManager is the data-type manager for (possibly) transforming the parameter's data-type
@param status is the consumed resource status array
@param res is parameter description to be filled in
@return the response code
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamListStandard.java