Bug 60866

Summary: Evaluation order broken for empty alternatives in subpatterns
Product: WebKit Reporter: Gavin Barraclough <barraclough>
Component: JavaScriptCoreAssignee: Gavin Barraclough <barraclough>
Status: RESOLVED FIXED    
Severity: Normal CC: ggaren, pvarga, zherczeg
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on: 60860    
Bug Blocks:    

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 3 Gavin Barraclough 2011-05-16 02:08:37 PDT
Fixed in r86547.
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.