private void orderOperands() {
		OperandSymbol sym;

		VectorSTL<OperandSymbol> patternorder = new VectorSTL<>();
		// New order of the operands
		VectorSTL<OperandSymbol> newops = new VectorSTL<>();
		int lastsize;

		pateq.operandOrder(this, patternorder);
		for (int i = 0; i < operands.size(); ++i) { // Make sure patternorder contains all operands
			sym = operands.get(i);
			if (!sym.isMarked()) {
				patternorder.push_back(sym);
				sym.setMark(); // Make sure all operands are marked
			}
		}
		do {
			lastsize = newops.size();
			for (int i = 0; i < patternorder.size(); ++i) {
				sym = patternorder.get(i);
				if (!sym.isMarked()) {
					// "unmarked" means it is already in newops
					continue;
				}
				if (sym.isOffsetIrrelevant()) {
					// expression Operands come last
					continue;
				}
				if ((sym.offsetbase == -1) || (!operands.get(sym.offsetbase).isMarked())) {
					newops.push_back(sym);
					sym.clearMark();
				}
			}
		}
		while (newops.size() != lastsize);

		// Tack on expression Operands
		for (int i = 0; i < patternorder.size(); ++i) {
			sym = patternorder.get(i);
			if (sym.isOffsetIrrelevant()) {
				newops.push_back(sym);
				sym.clearMark();
			}
		}

		if (newops.size() != operands.size()) {
			throw new SleighError("Circular offset dependency between operands", location);
		}

		for (int i = 0; i < newops.size(); ++i) { // Fix up operand indices
			newops.get(i).hand = i;
			newops.get(i).localexp.changeIndex(i);
		}
		VectorSTL<Integer> handmap = new VectorSTL<>(operands.size()); // Create
		// index
		// translation map
		for (int i = 0; i < operands.size(); ++i) {
			handmap.push_back(operands.get(i).hand);
		}

		// Fix up offsetbase
		for (int i = 0; i < newops.size(); ++i) {
			sym = newops.get(i);
			if (sym.offsetbase == -1) {
				continue;
			}
			sym.offsetbase = handmap.get(sym.offsetbase);
		}
		// Fix up templates
		if (templ != null) {
			templ.changeHandleIndex(handmap);
		}
		for (int i = 0; i < namedtempl.size(); ++i) {
			ConstructTpl ntempl = namedtempl.get(i);
			if (ntempl != null) {
				ntempl.changeHandleIndex(handmap);
			}
		}
		// Fix up printpiece operand refs
		for (int i = 0; i < printpiece.size(); ++i) {
			final String piece = printpiece.get(i);
			if (piece.length() > 0 && piece.charAt(0) == '\n') {
				int index = piece.charAt(1) - 'A';
				index = handmap.get(index);
				char c = (char) ('A' + index);
				printpiece.set(i, "\n" + c);
			}
		}
		operands = newops;
	}
Return the source file index
@return index
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/Constructor.java