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:
@@ -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)
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user