public Handle getPcode(ArrayList<PcodeOp> pcode, Position position, int off, ArrayList<PcodeOp> delayPcode) throws Exception {

		int i;
		HashMap<Object, Handle> handles = new HashMap<Object, Handle>();
		
		for (i = 0; i < pcodeDirectives.size(); i++) {
			Object o = pcodeDirectives.get(i);
						
			if (o.getClass() == OpTemplate.class) {
				if (((OpTemplate) o).omit()) continue;
				pcode.add(((OpTemplate) o).getPcode(handles,position,pcode.size(),off));
			}
			else if (o.getClass() == Operand.class) { // must be a "build operand" directive
				Handle ht = ((Operand) o).getHandle(pcode, position,off);
				if (ht != null) handles.put(o,ht);
			}
			else if (o.getClass() == Integer.class) {
				if (delayPcode != null)
					pcode.addAll(delayPcode);
				else
					throw new SledException("delay slot code requested at inappropriate level of constructor tree");
			}
			else
				throw new SledException("Invalid pcode directive");
		}

		if (result == null) return null;
        return result.resolve(handles,position,off);
	}
Method getPcode.  Recursive pcode generation method.
@param pcode - current list of pcode instructions to which we will append new instructions
@param position
@param off
@param delayPcode - pcode for instruction(s) in delay slot
@return HandleTemplate - handle for the result of this constructors pcode
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/generic/ConstructorPcodeTemplate.java