summaryrefslogtreecommitdiff
path: root/deps/v8/src/builtins/array-reduce-right.tq
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/builtins/array-reduce-right.tq')
-rw-r--r--deps/v8/src/builtins/array-reduce-right.tq95
1 files changed, 55 insertions, 40 deletions
diff --git a/deps/v8/src/builtins/array-reduce-right.tq b/deps/v8/src/builtins/array-reduce-right.tq
index b1aa71b85b..ae5ca99d3d 100644
--- a/deps/v8/src/builtins/array-reduce-right.tq
+++ b/deps/v8/src/builtins/array-reduce-right.tq
@@ -6,13 +6,13 @@ namespace array {
transitioning javascript builtin
ArrayReduceRightPreLoopEagerDeoptContinuation(
js-implicit context: Context,
- receiver: Object)(callback: Object, length: Object): Object {
+ receiver: JSAny)(callback: JSAny, length: JSAny): JSAny {
// All continuation points in the optimized every implementation are
// after the ToObject(O) call that ensures we are dealing with a
// JSReceiver.
//
// Also, this great mass of casts is necessary because the signature
- // of Torque javascript builtins requires Object type for all parameters
+ // of Torque javascript builtins requires JSAny type for all parameters
// other than {context}.
const jsreceiver = Cast<JSReceiver>(receiver) otherwise unreachable;
const callbackfn = Cast<Callable>(callback) otherwise unreachable;
@@ -27,15 +27,15 @@ namespace array {
transitioning javascript builtin
ArrayReduceRightLoopEagerDeoptContinuation(
- js-implicit context: Context, receiver: Object)(
- callback: Object, initialK: Object, length: Object,
- accumulator: Object): Object {
+ js-implicit context: Context, receiver: JSAny)(
+ callback: JSAny, initialK: JSAny, length: JSAny,
+ accumulator: JSAny): JSAny {
// All continuation points in the optimized every implementation are
// after the ToObject(O) call that ensures we are dealing with a
// JSReceiver.
//
// Also, this great mass of casts is necessary because the signature
- // of Torque javascript builtins requires Object type for all parameters
+ // of Torque javascript builtins requires JSAny type for all parameters
// other than {context}.
const jsreceiver = Cast<JSReceiver>(receiver) otherwise unreachable;
const callbackfn = Cast<Callable>(callback) otherwise unreachable;
@@ -48,9 +48,8 @@ namespace array {
transitioning javascript builtin
ArrayReduceRightLoopLazyDeoptContinuation(
- js-implicit context: Context, receiver: Object)(
- callback: Object, initialK: Object, length: Object,
- result: Object): Object {
+ js-implicit context: Context, receiver: JSAny)(
+ callback: JSAny, initialK: JSAny, length: JSAny, result: JSAny): JSAny {
// All continuation points in the optimized every implementation are
// after the ToObject(O) call that ensures we are dealing with a
// JSReceiver.
@@ -67,8 +66,9 @@ namespace array {
transitioning builtin ArrayReduceRightLoopContinuation(implicit context:
Context)(
- _receiver: JSReceiver, callbackfn: Callable, initialAccumulator: Object,
- o: JSReceiver, initialK: Number, _length: Number): Object {
+ _receiver: JSReceiver, callbackfn: Callable,
+ initialAccumulator: JSAny | TheHole, o: JSReceiver, initialK: Number,
+ _length: Number): JSAny {
let accumulator = initialAccumulator;
// 8b and 9. Repeat, while k >= 0
@@ -83,16 +83,20 @@ namespace array {
// 8b iii and 9c. If kPresent is true, then
if (present == True) {
// 8b iii and 9c i. Let kValue be ? Get(O, Pk).
- const value: Object = GetProperty(o, k);
-
- if (accumulator == TheHole) {
- // 8b iii 1.
- accumulator = value;
- } else {
- // 9c. ii. Set accumulator to ? Call(callbackfn, undefined,
- // <accumulator, kValue, k, O>).
- accumulator =
- Call(context, callbackfn, Undefined, accumulator, value, k, o);
+ const value: JSAny = GetProperty(o, k);
+
+ typeswitch (accumulator) {
+ case (TheHole): {
+ // 8b iii 1.
+ accumulator = value;
+ }
+ case (accumulatorNotHole: JSAny): {
+ // 9c. ii. Set accumulator to ? Call(callbackfn, undefined,
+ // <accumulator, kValue, k, O>).
+ accumulator = Call(
+ context, callbackfn, Undefined, accumulatorNotHole, value, k,
+ o);
+ }
}
}
@@ -102,16 +106,20 @@ namespace array {
// 8c. if kPresent is false, throw a TypeError exception.
// If the accumulator is discovered with the sentinel hole value,
// this means kPresent is false.
- if (accumulator == TheHole) {
- ThrowTypeError(kReduceNoInitial, 'Array.prototype.reduceRight');
+ typeswitch (accumulator) {
+ case (TheHole): {
+ ThrowTypeError(kReduceNoInitial, 'Array.prototype.reduceRight');
+ }
+ case (accumulator: JSAny): {
+ return accumulator;
+ }
}
- return accumulator;
}
transitioning macro FastArrayReduceRight(implicit context: Context)(
o: JSReceiver, len: Number, callbackfn: Callable,
- initialAccumulator: Object): Object
- labels Bailout(Number, Object) {
+ initialAccumulator: JSAny | TheHole): JSAny
+ labels Bailout(Number, JSAny | TheHole) {
let accumulator = initialAccumulator;
const smiLen = Cast<Smi>(len) otherwise goto Bailout(len - 1, accumulator);
const fastO = Cast<FastJSArrayForRead>(o)
@@ -125,25 +133,32 @@ namespace array {
// Ensure that we haven't walked beyond a possibly updated length.
if (k >= fastOW.Get().length) goto Bailout(k, accumulator);
- const value: Object = fastOW.LoadElementNoHole(k) otherwise continue;
- if (accumulator == TheHole) {
- accumulator = value;
- } else {
- accumulator = Call(
- context, callbackfn, Undefined, accumulator, value, k,
- fastOW.Get());
+ const value: JSAny = fastOW.LoadElementNoHole(k) otherwise continue;
+ typeswitch (accumulator) {
+ case (TheHole): {
+ accumulator = value;
+ }
+ case (accumulatorNotHole: JSAny): {
+ accumulator = Call(
+ context, callbackfn, Undefined, accumulatorNotHole, value, k,
+ fastOW.Get());
+ }
}
}
- if (accumulator == TheHole) {
- ThrowTypeError(kReduceNoInitial, 'Array.prototype.reduceRight');
+ typeswitch (accumulator) {
+ case (TheHole): {
+ ThrowTypeError(kReduceNoInitial, 'Array.prototype.reduceRight');
+ }
+ case (accumulator: JSAny): {
+ return accumulator;
+ }
}
- return accumulator;
}
// https://tc39.github.io/ecma262/#sec-array.prototype.reduceRight
transitioning javascript builtin
- ArrayReduceRight(js-implicit context: Context, receiver: Object)(
- ...arguments): Object {
+ ArrayReduceRight(js-implicit context: Context, receiver: JSAny)(...arguments):
+ JSAny {
try {
RequireObjectCoercible(receiver, 'Array.prototype.reduceRight');
@@ -163,14 +178,14 @@ namespace array {
// exception. (This case is handled at the end of
// ArrayReduceRightLoopContinuation).
- const initialValue: Object =
+ const initialValue: JSAny | TheHole =
arguments.length > 1 ? arguments[1] : TheHole;
try {
return FastArrayReduceRight(o, len, callbackfn, initialValue)
otherwise Bailout;
}
- label Bailout(value: Number, accumulator: Object) {
+ label Bailout(value: Number, accumulator: JSAny | TheHole) {
return ArrayReduceRightLoopContinuation(
o, callbackfn, accumulator, o, value, len);
}