// 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); } }