private boolean loadSymbolBasedVariables() {
		if (symbolMap != null) {
			return false;
		}
		symbolMap = new HashMap<>();
		locals = new ArrayList<>();
		params = new ArrayList<>();
		autoParams = null;
		SymbolIterator it = program.getSymbolTable().getChildren(functionSymbol);
		while (it.hasNext()) {
			SymbolDB s = (SymbolDB) it.next();
			if (s instanceof VariableSymbolDB) {
				VariableSymbolDB varSym = (VariableSymbolDB) s;
				if (isBadVariable(varSym)) {
					// silently ignore bad variable if address no longer decodes
					// This can happen due to changes in stack address space dimensions
					// TODO: it would be nice to cleanup such bad variables
					foundBadVariables = true;
					continue;
				}
				if (s.getSymbolType() == SymbolType.PARAMETER) {
					ParameterDB p = new ParameterDB(this, s);
					symbolMap.put(s, p);
					params.add(p);
				}
				else {
					VariableDB var = new LocalVariableDB(this, s);
					symbolMap.put(s, var);
					locals.add(var);
				}
			}
		}
		Collections.sort(params);
		Collections.sort(locals);
		return true;
	}
@see ghidra.program.model.listing.Function#getStackFrame()
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionDB.java