blob: 6fad3e66833c8d1dbfcf718b8629313aba001851 [file] [log] [blame]
// Copyright 2021 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 array {
extern builtin ArrayConcat(Context, JSFunction, JSAny, int32): JSAny;
transitioning javascript builtin
ArrayPrototypeConcat(
js-implicit context: NativeContext, receiver: JSAny)(...arguments): JSAny {
// Fast path if we invoke as `x.concat()`.
if (arguments.length == 0) {
typeswitch (receiver) {
case (a: FastJSArrayForConcat): {
return CloneFastJSArray(context, a);
}
case (JSAny): {
// Fallthrough.
}
}
}
// Fast path if we invoke as `[].concat(x)`.
try {
const receiverAsArray: FastJSArrayForConcat =
Cast<FastJSArrayForConcat>(receiver)
otherwise ReceiverIsNotFastJSArrayForConcat;
if (receiverAsArray.IsEmpty() && arguments.length == 1) {
typeswitch (arguments[0]) {
case (a: FastJSArrayForCopy): {
return CloneFastJSArray(context, a);
}
case (JSAny): {
// Fallthrough.
}
}
}
} label ReceiverIsNotFastJSArrayForConcat {
// Fallthrough.
}
// TODO(victorgomes): Implement slow path ArrayConcat in Torque.
tail ArrayConcat(
context, LoadTargetFromFrame(), Undefined,
Convert<int32>(arguments.actual_count));
}
} // namespace array