1 package jdk.nashorn.internal.runtime.arrays; 2 3 import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; 4 import jdk.nashorn.internal.objects.Global; 5 import jdk.nashorn.internal.runtime.ScriptRuntime; 6 7 /** 8 * Filter class that wrap arrays that have been tagged non extensible 9 */ 10 final class NonExtensibleArrayFilter extends ArrayFilter { 11 12 /** 13 * Constructor 14 * @param underlying array 15 */ 16 NonExtensibleArrayFilter(final ArrayData underlying) { 17 super(underlying); 18 } 19 20 @Override 21 public ArrayData copy() { 22 return new NonExtensibleArrayFilter(underlying.copy()); 23 } 24 25 @Override 26 public ArrayData slice(final long from, final long to) { 27 return new NonExtensibleArrayFilter(underlying.slice(from, to)); 28 } 29 30 private ArrayData extensionCheck(final boolean strict, final int index) { 31 if (!strict) { 32 return this; 33 } 34 throw typeError(Global.instance(), "object.non.extensible", String.valueOf(index), ScriptRuntime.safeToString(this)); 35 } 36 37 @Override 38 public ArrayData set(final int index, final Object value, final boolean strict) { 39 if (has(index)) { 40 return underlying.set(index, value, strict); 41 } 42 return extensionCheck(strict, index); 43 } 44 45 @Override 46 public ArrayData set(final int index, final int value, final boolean strict) { 47 if (has(index)) { 48 return underlying.set(index, value, strict); 49 } 50 return extensionCheck(strict, index); 51 } 52 53 @Override 54 public ArrayData set(final int index, final long value, final boolean strict) { 55 if (has(index)) { 56 return underlying.set(index, value, strict); 57 } 58 return extensionCheck(strict, index); 59 } 60 61 @Override 62 public ArrayData set(final int index, final double value, final boolean strict) { 63 if (has(index)) { 64 return underlying.set(index, value, strict); 65 } 66 return extensionCheck(strict, index); 67 } 68 }