private void determineFacet(ClangToken tokenAtCursor) {
		accessOp = tokenAtCursor.getPcodeOp();
		int opcode = accessOp.getOpcode();
		if (opcode == PcodeOp.PTRSUB) {
			parentDt = typeIsUnionRelated(accessOp.getInput(0));
			if (parentDt == null) {
				accessOp = null;
				return;
			}
			accessVn = accessOp.getInput(0);
			accessSlot = 0;
			if (accessOp.getInput(1).getOffset() == 0) {	// Artificial op
				do {
					Varnode tmpVn = accessOp.getOutput();
					PcodeOp tmpOp = tmpVn.getLoneDescend();
					if (tmpOp == null) {
						break;
					}
					accessOp = tmpOp;
					accessVn = tmpVn;
					accessSlot = accessOp.getSlot(accessVn);
				}
				while (accessOp.getOpcode() == PcodeOp.PTRSUB &&
					accessOp.getInput(1).getOffset() == 0);
			}
		}
		else {
			for (accessSlot = 0; accessSlot < accessOp.getNumInputs(); ++accessSlot) {
				accessVn = accessOp.getInput(accessSlot);
				parentDt = typeIsUnionRelated(accessVn);
				if (parentDt != null) {
					break;
				}
			}
			if (accessSlot >= accessOp.getNumInputs()) {
				accessSlot = -1;
				accessVn = accessOp.getOutput();
				parentDt = typeIsUnionRelated(accessVn);
				if (parentDt == null) {
					accessOp = null;
					return;		// Give up, could not find type associated with field
				}
			}
			if (opcode == PcodeOp.SUBPIECE && accessSlot == 0 && !(parentDt instanceof Pointer)) {
				// SUBPIECE acts directly as resolution operator
				// Choose field based on output varnode, even though it isn't the union data-type
				accessSlot = -1;
				accessVn = accessOp.getOutput();
			}
		}
	}
Determine the particular Varnode whose union facet will be modified by this action.
The field -accessVn- will be filled in with the particular Varnode. -accessOp- is set to
the operation at the cursor, and -accessOp- is either an input or the output, with
-accessSlot- being set either to the input slot or -1 if the Varnode is the output.
Additionally -parentDt is filled in with the data-type associated with the Varnode.
If the union can't be determined, -accessOp- is set to null.
@param tokenAtCursor is the display token selected by the user
Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/ForceUnionAction.java