public DWARFExpressionResult evaluate(DWARFExpression _expr) throws DWARFExpressionException {
		this.expr = _expr;
		currentOp = null;
		int stepCount = 0;
		for (currentOpIndex =
			0; currentOpIndex < expr.getOpCount(); currentOpIndex++, stepCount++) {
			currentOp = expr.getOp(currentOpIndex);

			try {
				if (stepCount >= maxStepCount) {
					throw new DWARFExpressionException(
						"Excessive expression run length, terminating after " + stepCount +
							" operations");
				}
				if (Thread.currentThread().isInterrupted()) {
					throw new DWARFExpressionException(
						"Thread interrupted while evaluating DWARF expression, terminating after " +
							stepCount + " operations");
				}

				_preValidateCurrentOp();
				_evaluateCurrentOp();
			}
			catch (DWARFExpressionException dee) {
				if (dee.getExpression() == null) {
					dee.setExpression(expr);
					dee.setStep(currentOpIndex);
				}
				throw dee;
			}
		}

		return new DWARFExpressionResult(stack);
	}
@param _expr
@param stackArgs - pushed 0..N, so stackArgs[0] will be deepest, stackArgs[N] will be topmost.
@return
@throws DWARFExpressionException
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/expression/DWARFExpressionEvaluator.java