Fix sticky flag handling in @@replace (#4005)

JerryScript-DCO-1.0-Signed-off-by: Dániel Bátyai daniel.batyai@h-lab.eu
This commit is contained in:
Dániel Bátyai
2020-07-20 12:54:06 +02:00
committed by GitHub
parent c2bfdde806
commit 74781c28c2
6 changed files with 182 additions and 104 deletions
+38 -2
View File
@@ -680,9 +680,45 @@ Object.defineProperty(abruptStickyRegexp, 'sticky', {
}
});
assert(abruptStickyRegexp[Symbol.replace]() === "undefinedndefined");
var r = /./;
r.lastIndex = {
valueOf: function() {
throw "abrupt lastIndex"
}
}
try {
abruptStickyRegexp[Symbol.replace]();
r[Symbol.replace]("a", "b");
assert(false);
} catch (e) {
assert(e === "abrupt sticky");
assert(e === "abrupt lastIndex");
}
var r = /a/y;
r.lastIndex = 3;
assert (r[Symbol.replace]("aaaaa", "b") === "aaaba");
assert (r.lastIndex === 4);
assert (r[Symbol.replace]("ccccc", "b") === "ccccc");
assert (r.lastIndex === 0);
var r = /a/yg;
r.lastIndex = 3;
assert (r[Symbol.replace]("aaaaa", "b") === "bbbbb");
assert (r.lastIndex === 0);
var replaceCalled = false;
var r = /a/
r.lastIndex = 2;
assert(r[Symbol.replace]("aaaa", function(match, index) {
replaceCalled = true;
assert (match === "a");
assert (index === 0);
return "b";
}) === "baaa");
assert (replaceCalled);
assert (r.lastIndex === 2)
+14
View File
@@ -132,3 +132,17 @@ try {
} catch (e) {
assert (e === "abrupt replacer toString");
}
var r = /./;
r.lastIndex = {
valueOf: function() {
throw "abrupt lastIndex"
}
}
try {
"a".replace(r, "b");
assert(false);
} catch (e) {
assert(e === "abrupt lastIndex");
}