nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/arrays/DeletedRangeArrayFilter.java
changeset 26886 18c744ab4df2
parent 25865 d38d876f1654
child 27098 2875b30458d3
equal deleted inserted replaced
26786:f0c5e4b732da 26886:18c744ab4df2
    43 
    43 
    44     private static ArrayData maybeSparse(final ArrayData underlying, final long hi) {
    44     private static ArrayData maybeSparse(final ArrayData underlying, final long hi) {
    45         if(hi < SparseArrayData.MAX_DENSE_LENGTH || underlying instanceof SparseArrayData) {
    45         if(hi < SparseArrayData.MAX_DENSE_LENGTH || underlying instanceof SparseArrayData) {
    46             return underlying;
    46             return underlying;
    47         }
    47         }
    48         return new SparseArrayData(underlying, underlying.length());
    48         return new SparseArrayData(underlying, underlying.length);
    49     }
    49     }
    50 
    50 
    51     private boolean isEmpty() {
    51     private boolean isEmpty() {
    52         return lo > hi;
    52         return lo > hi;
    53     }
    53     }
    91         return value;
    91         return value;
    92     }
    92     }
    93 
    93 
    94     @Override
    94     @Override
    95     public ArrayData ensure(final long safeIndex) {
    95     public ArrayData ensure(final long safeIndex) {
    96         if (safeIndex >= SparseArrayData.MAX_DENSE_LENGTH && safeIndex >= length()) {
    96         if (safeIndex >= SparseArrayData.MAX_DENSE_LENGTH && safeIndex >= length) {
    97             return new SparseArrayData(this, safeIndex + 1);
    97             return new SparseArrayData(this, safeIndex + 1);
    98         }
    98         }
    99 
    99 
   100         return super.ensure(safeIndex);
   100         return super.ensure(safeIndex);
   101     }
   101     }
   108     }
   108     }
   109 
   109 
   110     @Override
   110     @Override
   111     public ArrayData shiftRight(final int by) {
   111     public ArrayData shiftRight(final int by) {
   112         super.shiftRight(by);
   112         super.shiftRight(by);
   113         lo = Math.min(length(), lo + by);
   113         final long len = length;
   114         hi = Math.min(length() - 1, hi + by);
   114         lo = Math.min(len, lo + by);
       
   115         hi = Math.min(len - 1, hi + by);
   115 
   116 
   116         return isEmpty() ? getUnderlying() : this;
   117         return isEmpty() ? getUnderlying() : this;
   117     }
   118     }
   118 
   119 
   119     @Override
   120     @Override
   235         return this;
   236         return this;
   236     }
   237     }
   237 
   238 
   238     @Override
   239     @Override
   239     public Object pop() {
   240     public Object pop() {
   240         final int index = (int)(length() - 1);
   241         final int index = (int)length - 1;
   241         if (super.has(index)) {
   242         if (super.has(index)) {
   242             final boolean isDeleted = isDeleted(index);
   243             final boolean isDeleted = isDeleted(index);
   243             final Object value      = super.pop();
   244             final Object value      = super.pop();
   244 
   245 
   245             lo = Math.min(index + 1, lo);
   246             lo = Math.min(index + 1, lo);