public AssemblyResolutionResults resolveRootRecursion(AssemblyResolutionResults temp) {
		AssemblyProduction rootRec = getRootRecursion();
		if (rootRec == null) {
			return temp;
		}
		try (DbgCtx dc = DBG.start("Resolving root recursion:")) {
			AssemblyResolutionResults result = factory.newAssemblyResolutionResults();

			for (AssemblyResolution ar : temp) {
				if (ar.isError()) {
					result.add(ar);
					continue;
				}
				@SuppressWarnings("unchecked")
				RP rp = (RP) ar;
				AssemblyPatternBlock dst = rp.getContext();
				// TODO: The desired context may need to be passed in. For now, just take start.
				AssemblyPatternBlock src = context; // NOTE: This is only correct for "instruction"
				String table = "instruction";

				DBG.println("Finding paths from " + src + " to " + ar.lineToString());
				Collection<Deque<AssemblyConstructorSemantic>> paths =
					ctxGraph.computeOptimalApplications(src, table, dst, table);
				DBG.println("Found " + paths.size());
				for (Deque<AssemblyConstructorSemantic> path : paths) {
					DBG.println("  " + path);
					result.absorb(applyRecursionPath(path, tree, rootRec, ar));
				}
			}

			return result;
		}
	}
If necessary, resolve recursive constructors at the root, usually for prefixes

<p>
If there are no pure recursive constructors at the root, then this simply returns
{@code temp} unmodified.

@param temp the resolved root results
@return the results with pure recursive constructors applied to obtain a compatible context
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AbstractAssemblyTreeResolver.java