|Summary:||Evaluation order broken for empty alternatives in subpatterns|
|Product:||WebKit||Reporter:||Gavin Barraclough <barraclough>|
|Severity:||Normal||CC:||ggaren, pvarga, zherczeg|
|Version:||528+ (Nightly build)|
|Bug Depends on:||60860|
Description Gavin Barraclough 2011-05-15 19:28:57 PDT
for example: /(|a)/.exec("a"); should return ["",""], but instead returns ["a","a"]. This was broken by https://bugs.webkit.org/show_bug.cgi?id=51395, which will be reverted (this unsafe optimization does not appear significant to any benchmarks we are tracking, we should reimplement in a more restricted, safe fashion only if we can demonstrate an important workload benefitting from doing so).
Comment 1 Gavin Barraclough 2011-05-15 19:33:28 PDT
This unsafe optimization is masking further problems in the JIT, reverting the optimization causes failures in fast/regex/parentheses. These issues are fixed by 60860.
Comment 2 Geoffrey Garen 2011-05-16 00:08:29 PDT
rs=me to roll out that optimization with a layout test for /(|a)/.exec("a") /(a|)/.exec("b")
Comment 4 Zoltan Herczeg 2011-05-18 06:24:45 PDT
Perhaps a non-greedy conversion? (|a) == a?? (a|) == a?
Comment 5 Gavin Barraclough 2011-05-23 13:51:01 PDT
Conversion to an appropriately greedy quantifier would be possible, but would limit the scope of this optimization. We would consider such a patch if it were to provide a useful performance gain on an interesting workload.