function assertNoPoly(quantifier, char) {
              if (quantifier.max === Infinity) {
                const qChar = toCharSet(quantifier.element);
                if (qChar && !qChar.isDisjointWith(char)) {
                  const intersection = qChar.intersect(char);
                  const literal = JS.toLiteral({
                    type: "Concatenation",
                    elements: [
                      { type: "CharacterClass", characters: intersection }
                    ]
                  })
                  const lang = `/${literal.source}/${literal.flags}`;

                  const rangeStr = patternStr.substring(node.start + 1, quantifier.end + 1);
                  const rangeHighlight = `^${"~".repeat(node.end - node.start - 1)}${" ".repeat(quantifier.start - node.end)}^${"~".repeat(quantifier.end - quantifier.start - 1)}`;

                  reportError(`${rulePath}: Polynomial backtracking. By repeating any character that matches ${lang}, an attack string can be created.\n\n    ${rangeStr}\n    ${rangeHighlight}\n\nFull pattern:\n${patternStr}\n${" ".repeat(node.start + 1)}${rangeHighlight}`);
                }
              }
            }
@param {Quantifier} quantifier
@param {CharSet} char