// Copyright 2019 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

namespace string {
// ES6 #sec-string.prototype.slice ( start, end )
// https://tc39.github.io/ecma262/#sec-string.prototype.slice
transitioning javascript builtin StringPrototypeSlice(
    js-implicit context: NativeContext, receiver: JSAny)(...arguments): String {
  // 1. Let O be ? RequireObjectCoercible(this value).
  // 2. Let S be ? ToString(O).
  const string: String = ToThisString(receiver, 'String.prototype.slice');

  // 3. Let len be the number of elements in S.
  const length: uintptr = string.length_uintptr;

  // Convert {start} to a relative index.
  const arg0 = arguments[0];
  const start: uintptr =
      arg0 != Undefined ? ConvertToRelativeIndex(arg0, length) : 0;

  // 5. If end is undefined, let intEnd be len;
  // else Convert {end} to a relative index.
  const arg1 = arguments[1];
  const end: uintptr =
      arg1 != Undefined ? ConvertToRelativeIndex(arg1, length) : length;

  if (end <= start) {
    return kEmptyString;
  }

  return SubString(string, start, end);
}
}
