package jdk.nashorn.internal.runtime.arrays; import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.runtime.ScriptRuntime; /** * Filter class that wrap arrays that have been tagged non extensible */ final class NonExtensibleArrayFilter extends ArrayFilter { /** * Constructor * @param underlying array */ NonExtensibleArrayFilter(final ArrayData underlying) { super(underlying); } @Override public ArrayData copy() { return new NonExtensibleArrayFilter(underlying.copy()); } @Override public ArrayData slice(final long from, final long to) { return new NonExtensibleArrayFilter(underlying.slice(from, to)); } private ArrayData extensionCheck(final boolean strict, final int index) { if (!strict) { return this; } throw typeError(Global.instance(), "object.non.extensible", String.valueOf(index), ScriptRuntime.safeToString(this)); } @Override public ArrayData set(final int index, final Object value, final boolean strict) { if (has(index)) { return underlying.set(index, value, strict); } return extensionCheck(strict, index); } @Override public ArrayData set(final int index, final int value, final boolean strict) { if (has(index)) { return underlying.set(index, value, strict); } return extensionCheck(strict, index); } @Override public ArrayData set(final int index, final double value, final boolean strict) { if (has(index)) { return underlying.set(index, value, strict); } return extensionCheck(strict, index); } }