private static long readOperandValue(DWARFExpressionOperandType operandType,
			BinaryReader reader, byte addrSize, int intSize) throws IOException {
		try {
			switch (operandType) {
				case ADDR:
					return reader.readNextUnsignedValue(addrSize);
				case S_BYTE:
					return reader.readNextByte();
				case S_SHORT:
					return reader.readNextShort();
				case S_INT:
					return reader.readNextInt();
				case S_LONG:
					return reader.readNextLong();
				case U_BYTE:
					return reader.readNextUnsignedByte();
				case U_SHORT:
					return reader.readNextUnsignedShort();
				case U_INT:
					return reader.readNextUnsignedInt();
				case U_LONG:
					return reader.readNextLong(); /* & there is no mask for ulong */
				case S_LEB128:
					return reader.readNext(LEB128::signed);
				case U_LEB128:
					return reader.readNext(LEB128::unsigned);
				case SIZED_BLOB:
					throw new IOException("Can't read SIZED_BLOB as a Long value");
				case DWARF_INT:
					return reader.readNextUnsignedValue(intSize);
			}
		}
		catch (ArrayIndexOutOfBoundsException aioob) {
			throw new IOException("Not enough bytes to read " + operandType);
		}
		throw new IOException("Unknown DWARFExpressionOperandType " + operandType);
	}
A {@link DWARFExpression} is an immutable list of {@link DWARFExpressionOperation operations} and some factory methods to read
an expression from its binary representation.
<p>
Use a {@link DWARFExpressionEvaluator} to execute a {@link DWARFExpression}.
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/expression/DWARFExpression.java