public Structure processStructure(HighVariable var, Function function,
			boolean createNewStructure, boolean createClassIfNeeded, DecompInterface decomplib) {

		if (var == null) {
			return null;
		}

		init();

		Structure structDT = null;

		if (!createNewStructure) {
			structDT = getStructureForExtending(var.getDataType());
			if (structDT != null) {
				componentMap.populateOriginalStructure(structDT);
			}
		}

		fillOutStructureDef(var);
		if (decomplib != null) {
			pushIntoCalls(decomplib);
		}

		long size = componentMap.getSize();
		if (size == 0) {
			return null;
		}
		if (size < 0 || size > Integer.MAX_VALUE) {
			Msg.error(this, "Computed structure length out-of-range: " + size);
			return null;
		}

		if (structDT == null) {
			if (createClassIfNeeded && DecompilerUtils.isThisParameter(var, function)) {
				structDT = createUniqueClassNamespaceAndStructure(var, (int) size, function);
			}
			else {
				structDT = createUniqueStructure((int) size);
			}
		}
		else {
			expandStructureSizeIfNeeded(structDT, (int) size);
		}

		populateStructure(structDT);

		return structDT;
	}
Create or update a Structure data-type given a function and a root pointer variable.
The function must already be decompiled, but if a decompiler interface is provided, this
method will recursively follow variable references into CALLs, possibly triggering additional
decompilation.
@param var is the pointer variable
@param function is the function to process
@param createNewStructure if true a new Structure with a unique name will always be generated,
if false and the variable corresponds to a Structure pointer, the existing Structure will be 
updated instead.
@param createClassIfNeeded if true and variable corresponds to a <B>this</B> pointer without 
an assigned Ghidra Class (i.e., {@code void * this}), the function will be assigned to a 
new unique Ghidra Class namespace with a new identically named Structure returned.  If false,
a new unique Structure will be created.
@param decomplib is the (optional) decompiler interface, which can be used to recursively
decompile into CALLs.
@return a filled-in Structure or null if one could not be created
Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/util/FillOutStructureHelper.java