8075231: Typed array setters are very slow when index exceeds capacity
Reviewed-by: attila, lagergren
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeFloat32Array.java Thu Mar 26 21:39:25 2015 +0100
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeFloat32Array.java Thu Mar 26 22:13:41 2015 +0100
@@ -114,12 +114,11 @@
private void setElem(final int index, final double elem) {
try {
- nb.put(index, (float)elem);
+ if (index < nb.limit()) {
+ nb.put(index, (float) elem);
+ }
} catch (final IndexOutOfBoundsException e) {
- //swallow valid array indexes. it's ok.
- if (index < 0) {
- throw new ClassCastException();
- }
+ throw new ClassCastException();
}
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeFloat64Array.java Thu Mar 26 21:39:25 2015 +0100
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeFloat64Array.java Thu Mar 26 22:13:41 2015 +0100
@@ -114,12 +114,11 @@
private void setElem(final int index, final double elem) {
try {
- nb.put(index, elem);
+ if (index < nb.limit()) {
+ nb.put(index, elem);
+ }
} catch (final IndexOutOfBoundsException e) {
- //swallow valid array indexes. it's ok.
- if (index < 0) {
- throw new ClassCastException();
- }
+ throw new ClassCastException();
}
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt16Array.java Thu Mar 26 21:39:25 2015 +0100
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt16Array.java Thu Mar 26 22:13:41 2015 +0100
@@ -115,12 +115,11 @@
private void setElem(final int index, final int elem) {
try {
- nb.put(index, (short)elem);
+ if (index < nb.limit()) {
+ nb.put(index, (short) elem);
+ }
} catch (final IndexOutOfBoundsException e) {
- //swallow valid array indexes. it's ok.
- if (index < 0) {
- throw new ClassCastException();
- }
+ throw new ClassCastException();
}
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt32Array.java Thu Mar 26 21:39:25 2015 +0100
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt32Array.java Thu Mar 26 22:13:41 2015 +0100
@@ -104,11 +104,11 @@
private void setElem(final int index, final int elem) {
try {
- nb.put(index, elem);
- } catch (final IndexOutOfBoundsException e) {
- if (index < 0) {
- throw new ClassCastException();
- }
+ if (index < nb.limit()) {
+ nb.put(index, elem);
+ }
+ } catch (final IndexOutOfBoundsException e) {
+ throw new ClassCastException();
}
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt8Array.java Thu Mar 26 21:39:25 2015 +0100
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt8Array.java Thu Mar 26 22:13:41 2015 +0100
@@ -113,12 +113,11 @@
private void setElem(final int index, final int elem) {
try {
- nb.put(index, (byte)elem);
+ if (index < nb.limit()) {
+ nb.put(index, (byte) elem);
+ }
} catch (final IndexOutOfBoundsException e) {
- //swallow valid array indexes. it's ok.
- if (index < 0) {
- throw new ClassCastException();
- }
+ throw new ClassCastException();
}
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint16Array.java Thu Mar 26 21:39:25 2015 +0100
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint16Array.java Thu Mar 26 22:13:41 2015 +0100
@@ -104,12 +104,11 @@
private void setElem(final int index, final int elem) {
try {
- nb.put(index, (char)elem);
+ if (index < nb.limit()) {
+ nb.put(index, (char) elem);
+ }
} catch (final IndexOutOfBoundsException e) {
- //swallow valid array indexes. it's ok.
- if (index < 0) {
- throw new ClassCastException();
- }
+ throw new ClassCastException();
}
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint32Array.java Thu Mar 26 21:39:25 2015 +0100
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint32Array.java Thu Mar 26 22:13:41 2015 +0100
@@ -113,12 +113,11 @@
private void setElem(final int index, final int elem) {
try {
- nb.put(index, elem);
+ if (index < nb.limit()) {
+ nb.put(index, elem);
+ }
} catch (final IndexOutOfBoundsException e) {
- //swallow valid array indexes. it's ok.
- if (index < 0) {
- throw new ClassCastException();
- }
+ throw new ClassCastException();
}
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint8Array.java Thu Mar 26 21:39:25 2015 +0100
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint8Array.java Thu Mar 26 22:13:41 2015 +0100
@@ -104,12 +104,11 @@
private void setElem(final int index, final int elem) {
try {
- nb.put(index, (byte)elem);
+ if (index < nb.limit()) {
+ nb.put(index, (byte) elem);
+ }
} catch (final IndexOutOfBoundsException e) {
- //swallow valid array indexes. it's ok.
- if (index < 0) {
- throw new ClassCastException();
- }
+ throw new ClassCastException();
}
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint8ClampedArray.java Thu Mar 26 21:39:25 2015 +0100
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint8ClampedArray.java Thu Mar 26 22:13:41 2015 +0100
@@ -133,18 +133,17 @@
private void setElem(final int index, final int elem) {
try {
- final byte clamped;
- if ((elem & 0xffff_ff00) == 0) {
- clamped = (byte)elem;
- } else {
- clamped = elem < 0 ? 0 : (byte)0xff;
+ if (index < nb.limit()) {
+ final byte clamped;
+ if ((elem & 0xffff_ff00) == 0) {
+ clamped = (byte) elem;
+ } else {
+ clamped = elem < 0 ? 0 : (byte) 0xff;
+ }
+ nb.put(index, clamped);
}
- nb.put(index, clamped);
} catch (final IndexOutOfBoundsException e) {
- //swallow valid array indexes. it's ok.
- if (index < 0) {
- throw new ClassCastException();
- }
+ throw new ClassCastException();
}
}