[JSC] AI should not propagate AbstractValue relying on constant folding phase
[WebKit-https.git] / JSTests / microbenchmarks / regexp-prototype-split-observable-side-effects4.js
1 //@ runNoFTL
2
3 function assert(testedValue, msg) {
4     if (!testedValue)
5         throw Error(msg);
6 }
7
8 // RegExp.prototype with overridden exec: Testing ES6 21.2.5.11: 19.b. Let z be ? RegExpExec(splitter, S).
9 (function () {
10     let accesses = [];
11     let origDescriptor = Object.getOwnPropertyDescriptor(RegExp.prototype, "exec");
12     let origExec = origDescriptor.value;
13
14     let obj = /it/;
15     Object.defineProperty(RegExp.prototype, "exec", {
16         value: function(str) {
17             accesses.push("exec");
18             return origExec.call(this, str);
19         }
20     });
21
22     // The @@split slow path should only call the internal version of substr. Make sure
23     // that it's not calling the public version which can be overridden.
24     String.prototype.substr = function(start, length) {
25         throw Error("Should not call overridden substr");
26     }
27
28     // The @@split slow path should only call the internal version of includes. Make sure
29     // that it's not calling the public version which can be overridden.
30     String.prototype.includes = function(pattern) {
31         throw Error("Should not call overridden includes");
32     }
33
34     assert(accesses == "", "unexpected call to overridden props");
35     let result = RegExp.prototype[Symbol.split].call(obj, "splitme");
36     assert(accesses == "exec,exec,exec,exec,exec,exec", "Property accesses do not match expectation");
37     assert(result == "spl,me", "Unexpected result");
38 })();