45557b1f89
Bug: v8:7793 Change-Id: Id2a93f8ac8c512dbc5cdeb43a97e04d8d6684954 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2196130 Commit-Queue: Tobias Tebbi <tebbi@chromium.org> Reviewed-by: Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#67748}
35 lines
1.1 KiB
Plaintext
35 lines
1.1 KiB
Plaintext
// 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);
|
|
}
|
|
}
|