Update lastIndex handling in RegExpBuiltinExec (#4010)
JerryScript-DCO-1.0-Signed-off-by: Dániel Bátyai daniel.batyai@h-lab.eu
This commit is contained in:
@@ -12,11 +12,56 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
var t = new RegExp ("abc","g");
|
||||
t.lastIndex = -12;
|
||||
var t = /abc/g;
|
||||
t.lastIndex = -12.5;
|
||||
result = t.exec("abc abc");
|
||||
assert(result[0] === "abc");
|
||||
assert(result.index === 0);
|
||||
assert(t.lastIndex === 3);
|
||||
|
||||
assert(RegExp.prototype.lastIndex === undefined)
|
||||
|
||||
var r = /./y
|
||||
r.lastIndex = -1;
|
||||
assert (JSON.stringify(r.exec("abca")) === '["a"]');
|
||||
assert (r.lastIndex === 1);
|
||||
assert (JSON.stringify(r.exec("abca")) === '["b"]');
|
||||
assert (r.lastIndex === 2);
|
||||
|
||||
r.lastIndex = 5;
|
||||
assert (JSON.stringify(r.exec("abca")) === 'null');
|
||||
assert (r.lastIndex === 0);
|
||||
|
||||
var r = /a/y
|
||||
assert (JSON.stringify(r.exec("abca")) === '["a"]');
|
||||
assert (r.lastIndex === 1);
|
||||
assert (JSON.stringify(r.exec("abca")) === 'null');
|
||||
assert (r.lastIndex === 0);
|
||||
|
||||
var r = /./g
|
||||
r.lastIndex = -1;
|
||||
assert (JSON.stringify(r.exec("abca")) === '["a"]');
|
||||
assert (r.lastIndex === 1);
|
||||
assert (JSON.stringify(r.exec("abca")) === '["b"]');
|
||||
assert (r.lastIndex === 2);
|
||||
|
||||
r.lastIndex = 5;
|
||||
assert (JSON.stringify(r.exec("abca")) === 'null');
|
||||
assert (r.lastIndex === 0);
|
||||
|
||||
var r = /a/g
|
||||
assert (JSON.stringify(r.exec("abca")) === '["a"]');
|
||||
assert (r.lastIndex === 1);
|
||||
assert (JSON.stringify(r.exec("abca")) === '["a"]');
|
||||
assert (r.lastIndex === 4);
|
||||
assert (JSON.stringify(r.exec("abca")) === 'null');
|
||||
assert (r.lastIndex === 0);
|
||||
|
||||
var r = /./uim
|
||||
r.lastIndex = 2;
|
||||
assert (JSON.stringify(r.exec("abcd")) === '["a"]');
|
||||
assert (r.lastIndex === 2);
|
||||
|
||||
r.lastIndex = "lastIndex";
|
||||
assert (JSON.stringify(r.exec("abcd")) === '["a"]');
|
||||
assert (r.lastIndex === "lastIndex");
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
var t = new RegExp ("abc","g");
|
||||
t.lastIndex = -12;
|
||||
var t = /abc/g;
|
||||
t.lastIndex = -12.5;
|
||||
result = t.exec("abc abc");
|
||||
assert(!result);
|
||||
assert(t.lastIndex === 0);
|
||||
|
||||
@@ -101,3 +101,17 @@ assert (re2.ignoreCase === re1.ignoreCase);
|
||||
assert (re2.multiline === re1.multiline);
|
||||
assert (re2.source === re1.source);
|
||||
assert (re2.lastIndex === 0);
|
||||
|
||||
var r = /./
|
||||
r.lastIndex = {
|
||||
valueOf: function() {
|
||||
throw "abrupt lastIndex"
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
r.exec("a");
|
||||
assert(false);
|
||||
} catch (e) {
|
||||
assert (e === "abrupt lastIndex");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user