constructor(expression, range, runtimeRequirements) {
		super();
		this.expression = expression;
		this.range = range;
		this.runtimeRequirements = runtimeRequirements
			? new Set(runtimeRequirements)
			: null;
		this._hashUpdate = undefined;
	}
@param {string} expression the expression
@param {number | Range} range the source range
@param {(string[] | null)=} runtimeRequirements runtime requirements