protected AbstractAssemblyResolvedPatternsBuilder<?> shiftBuilder(int amt) {
		var builder = factory.newPatternsBuilder();
		builder.description = description;
		builder.cons = cons;
		builder.children = children;
		builder.right = right;
		builder.ins = ins.shift(amt);
		builder.ctx = ctx;

		// Also shift the attached backfills and forbidden patterns
		builder.backfills = new HashSet<>();
		for (AssemblyResolvedBackfill bf : this.backfills) {
			builder.backfills.add(bf.shift(amt));
		}

		builder.forbids = new HashSet<>();
		for (AssemblyResolvedPatterns f : this.forbids) {
			builder.forbids.add(f.shift(amt));
		}

		return builder;
	}
A {@link AssemblyResolution} indicating successful application of a constructor

<p>
This is almost analogous to {@link ghidra.app.plugin.processors.sleigh.pattern.DisjointPattern
DisjointPattern}, in that is joins an instruction {@link AssemblyPatternBlock} with a
corresponding context {@link AssemblyPatternBlock}. However, this object is mutable, and it
collects backfill records, as well as forbidden patterns.

<p>
When the applied constructor is from the "instruction" subtable, this represents a fully-
constructed instruction with required context. All backfill records ought to be resolved and
applied before the final result is given to the user, i.e., passed into the
{@link AssemblySelector}. If at any time during the resolution or backfill process, the result
becomes confined to one of the forbidden patterns, it must be dropped, since the encoding will
actually invoke a more specific SLEIGH constructor.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/DefaultAssemblyResolvedPatterns.java