blob: 605553c4f6698b987bd867dd62368d988298df1f [file] [log] [blame]
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);
}
}