<html>
    <head>
      <base href="https://bugs.webkit.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [Enhancement]: Add ability for the YARR JIT to properly handle nested expressions that can match without consuming characters"
   href="https://bugs.webkit.org/show_bug.cgi?id=200786">200786</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>[Enhancement]: Add ability for the YARR JIT to properly handle nested expressions that can match without consuming characters
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>WebKit
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>WebKit Nightly Build
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>Unspecified
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Unspecified
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>Normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P2
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>JavaScriptCore
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>webkit-unassigned@lists.webkit.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>msaboff@apple.com
          </td>
        </tr></table>
      <p>
        <div>
        <pre>The YARR interpreter has a function for matching nested expressions that might not consume characters.  This is needed when we try to match containing parenthesis which have variable counts, but their contents match an empty string.  An example regex is /(a*)*x/.  When we use this regex to match "aa", we'll match the "aa" via the parenthesis sub pattern and then fail trying to match the 'x'.  Then we'll backtrack.  The (a*)* subexpression will match a zero length string and try match the 'x'.   We have now entered an infinite loop that only exits due to exceeding the loop try count.  In the case where the parenthesis has a variable count, the interpreter will make sure that each time we try matching the parenthesis contents, we make sure we actually consumes characters.  This is done in the interpreter with the function matchNonZeroDisjunction().  The JIT should emit the same kind of logic.</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>