@SuppressWarnings("unchecked")
	private void readRegisterVars(Map<String, Object> result, Function function,
			List<Variable> stackParams) {
		try {
			ProgramContext context = program.getProgramContext();
			String name = (String) result.get("name");
			String registerName = (String) result.get("register");
			if (registerName == null) {
				return;
			}
			Register register = context.getRegister(registerName);

			Map<String, Object> type = (Map<String, Object>) result.get("type");
			DataType dt = findDataType(type);
			if (dt != null && dt.getLength() > register.getMinimumByteSize()) {
				log.appendMsg("Data type [" + result.get("type") + "] too large for register [" +
					registerName + "]");
				dt = null;
			}

			Variable registerParam = new ParameterImpl(name, dt, register, program);
			String comment = (String) result.get("comment");
			registerParam.setComment(comment);

			stackParams.add(registerParam);
		}
		catch (InvalidInputException e) {
			log.appendException(e);
		}
		catch (IllegalArgumentException e) {
			log.appendException(e);
		}
	}
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