private void updateFunction(Function func, ReturnParameterImpl retImpl, List<Variable> plist,
			SourceType sourceType) {
		try {
			Variable[] arr = new Variable[plist.size()];
			int i = 0;
			for (Variable variable : plist) {
				arr[i++] = variable;
			}
			FunctionUpdateType type =
				func.hasCustomVariableStorage() ? FunctionUpdateType.CUSTOM_STORAGE
						: FunctionUpdateType.DYNAMIC_STORAGE_ALL_PARAMS;
			func.updateFunction(func.getCallingConventionName(), retImpl, type, true,
				SourceType.IMPORTED, arr);
		}
		catch (DuplicateNameException e) {
			log.appendMsg("Could not set name of a parameter in function: " + funcDesc(func) +
				": " + e.getMessage());
		}
		catch (InvalidInputException iie) {
			log.appendMsg("Bad parameter definition in function: " + funcDesc(func) + ": " +
				iie.getMessage());
		}
	}
Parses a list of {@link Function function} definitions from SARIF and creates
then, adding them to the current {@link Program program}.
<p>
Information from a TYPEINFO_COMMENT is used in preference to information from
RETURN_TYPE and STACK_FRAME/STACK_VARs that are tagged as parameters.
<p>
DTD for the FUNCTION element:

<pre>
<code>
&lt;!ELEMENT FUNCTION (RETURN_TYPE?, ADDRESS_RANGE*, REGULAR_CMT?, REPEATABLE_CMT?, TYPEINFO_CMT?, STACK_FRAME?, REGISTER_VAR*)&gt;
</code>
</pre>

@param result             the parser
@param options
@param monitor            the task monitor
@throws AddressFormatException if any address is not parsable
@throws CancelledException     if the operation is cancelled through the
                               monitor
Ghidra/Features/Sarif/src/main/java/sarif/managers/FunctionsSarifMgr.java