Reviewers: Søren Gjesse,
Description:
Fix bug 73940.
I think this actually turns the code in question into dead code, because the
current definition of UseSparseVariant only allows arrays in
DictionaryMode, and
these never return encoded ranges from %GetArrayKeys. This is a subtle link
between the definition of %GetArrayKeys and UseSparseVariant, so I would
prefer
to keep the code rather than having an invisible depeendency.
BUG=73940
Please review this at http://codereview.chromium.org/6596004/
Affected files:
M src/array.js
Index: src/array.js
diff --git a/src/array.js b/src/array.js
index
ef82674d789e2460e10cc2cf5fc995a7ae6bdbc2..182cc7a16b65cecab8c74cd2d0a481f8e5126f81
100644
--- a/src/array.js
+++ b/src/array.js
@@ -1018,13 +1018,13 @@ function ArrayIndexOf(element, index) {
}
var min = index;
var max = length;
- if (UseSparseVariant(this, length, true)) {
+ if (UseSparseVariant(this, length, IS_ARRAY(this))) {
var intervals = %GetArrayKeys(this, length);
if (intervals.length == 2 && intervals[0] < 0) {
// A single interval.
var intervalMin = -(intervals[0] + 1);
var intervalMax = intervalMin + intervals[1];
- min = MAX(min, intervalMin);
+ if (min < intervalMin) min = intervalMin;
max = intervalMax; // Capped by length already.
// Fall through to loop below.
} else {
@@ -1074,13 +1074,13 @@ function ArrayLastIndexOf(element, index) {
}
var min = 0;
var max = index;
- if (UseSparseVariant(this, length, true)) {
+ if (UseSparseVariant(this, length, IS_ARRAY(this))) {
var intervals = %GetArrayKeys(this, index + 1);
if (intervals.length == 2 && intervals[0] < 0) {
// A single interval.
var intervalMin = -(intervals[0] + 1);
var intervalMax = intervalMin + intervals[1];
- min = MAX(min, intervalMin);
+ if (min < intervalMin) min = intervalMin;
max = intervalMax; // Capped by index already.
// Fall through to loop below.
} else {
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev