@SuppressWarnings("unchecked")
	private void readStackFrame(Map<String, Object> result, Function func,
			List<Variable> stackParams, SourceType sourceType) {
		if (func == null) {
			return;
		}
		StackFrame frame = func.getStackFrame();

		Double localVarSize = (Double) result.get("localVarSize");
		if (localVarSize != null) {
			frame.setLocalSize((int) (double) localVarSize);
		}
//		Double paramOffset = (Double) result.get("parameterOffset");
//		if (paramOffset != null) {
//			frame.setParameterOffset((int) (double) paramOffset));
//		}
		Double retOffset = (Double) result.get("returnAddressOffset");
		if (retOffset != null) {
			frame.setReturnAddressOffset((int) (double) retOffset);
		}
//		Double purgeSize = (Double) result.get("purgeSize");
//		if (purgeSize != null && validPurge) {
//			func.setStackPurgeSize((int) (double) purgeSize);
//		}
		List<Map<String, Object>> stackVars = (List<Map<String, Object>>) result.get("stackVars");
		for (Map<String, Object> var : stackVars) {
			readVariable(var, func, stackParams, sourceType);
		}
	}
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