whole_func_string: function SparseSlice(array, start_i, del_count, len, deleted_elements) {
    // Move deleted elements to a new array (the return value from splice).
    var indices = %GetArrayKeys(array, start_i + del_count);
    if (IS_NUMBER(indices)) {
      var limit = indices;
      for (var i = start_i; i < limit; ++i) {
        var current = array[i];
        if (!IS_UNDEFINED(current) || i in array) {
          %CreateDataProperty(deleted_elements, i - start_i, current);
        }
      }
    } else {
      var length = indices.length;
      for (var k = 0; k < length; ++k) {
        var key = indices[k];
        if (key >= start_i) {
          var current = array[key];
          if (!IS_UNDEFINED(current) || key in array) {
            %CreateDataProperty(deleted_elements, key - start_i, current);
          }
        }
      }
    }
  }
func_code_string: function SparseSlice(array, start_i, del_count, len, deleted_elements) {
    // Move deleted elements to a new array (the return value from splice).
    var indices = %GetArrayKeys(array, start_i + del_count);
    if (IS_NUMBER(indices)) {
      var limit = indices;
      for (var i = start_i; i < limit; ++i) {
        var current = array[i];
        if (!IS_UNDEFINED(current) || i in array) {
          %CreateDataProperty(deleted_elements, i - start_i, current);
        }
      }
    } else {
      var length = indices.length;
      for (var k = 0; k < length; ++k) {
        var key = indices[k];
        if (key >= start_i) {
          var current = array[key];
          if (!IS_UNDEFINED(current) || key in array) {
            %CreateDataProperty(deleted_elements, key - start_i, current);
          }
        }
      }
    }
  }
func_documentation_string: This function implements the optimized splice implementation that can use special array operations to handle sparse arrays in a sensible fashion.