ed5496f3cd
This fixes behavior for HeapNumber {index} arguments passed to AdvanceStringIndex. Previously, we'd blindly treat {index} as a Smi. Passing a HeapNumber instead would result in a Smi addition on the tagged HeapNumber pointer. BUG=chromium:709015 Review-Url: https://codereview.chromium.org/2798933003 Cr-Commit-Position: refs/heads/master@{#44458}
26 lines
890 B
JavaScript
26 lines
890 B
JavaScript
// Copyright 2017 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --allow-natives-syntax
|
|
|
|
function testAdvanceStringIndex(lastIndex, expectedLastIndex) {
|
|
let exec_count = 0;
|
|
let last_last_index = -1;
|
|
|
|
let fake_re = {
|
|
exec: () => { return (exec_count++ == 0) ? [""] : null },
|
|
get lastIndex() { return lastIndex; },
|
|
set lastIndex(value) { last_last_index = value },
|
|
get global() { return true; },
|
|
get flags() { return "g"; }
|
|
};
|
|
|
|
assertEquals([""], RegExp.prototype[Symbol.match].call(fake_re, "abc"));
|
|
assertEquals(expectedLastIndex, last_last_index);
|
|
}
|
|
|
|
testAdvanceStringIndex(new Number(42), 43); // Value wrapper.
|
|
testAdvanceStringIndex(%AllocateHeapNumber(), 1); // HeapNumber.
|
|
testAdvanceStringIndex(4294967295, 4294967296); // HeapNumber.
|