blob: 0f4a47b3e737d4ca61e8730b131ae24017881a40 [file] [log] [blame]
// Copyright 2020 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.
#include 'src/objects/js-objects.h'
namespace error {
transitioning javascript builtin AggregateErrorConstructor(
js-implicit context: NativeContext, target: JSFunction,
newTarget: JSAny)(...arguments): JSAny {
// This function is implementing the spec as suggested by
// https://github.com/tc39/proposal-promise-any/pull/59 . FIXME(marja):
// change this if the PR is declined, otherwise remove the comment.
// 1. If NewTarget is undefined, let newTarget be the active function
// object, else let newTarget be NewTarget.
// 2. Let O be ? OrdinaryCreateFromConstructor(newTarget,
// "%AggregateError.prototype%", « [[ErrorData]], [[AggregateErrors]] »).
// 3. If _message_ is not _undefined_, then
// a. Let msg be ? ToString(_message_).
// b. Let msgDesc be the PropertyDescriptor { [[Value]]: _msg_,
// [[Writable]]: *true*, [[Enumerable]]: *false*, [[Configurable]]: *true*
// c. Perform ! DefinePropertyOrThrow(_O_, *"message"*, _msgDesc_).
const message: JSAny = arguments[1];
const obj: JSObject =
ConstructAggregateErrorHelper(context, target, newTarget, message);
// 4. Let errorsList be ? IterableToList(errors).
const errors: JSAny = arguments[0];
const errorsList = iterator::IterableToListWithSymbolLookup(errors);
// 5. Perform ! DefinePropertyOrThrow(_O_, `"errors"`, Property Descriptor {
// [[Configurable]]: *true*, [[Enumerable]]: *false*, [[Writable]]: *true*,
// [[Value]]: ! CreateArrayFromList(_errorsList_) }).
SetOwnPropertyIgnoreAttributes(
obj, ErrorsStringConstant(), errorsList,
SmiConstant(PropertyAttributes::DONT_ENUM));
// 6. Return O.
return obj;
}
extern transitioning runtime ConstructAggregateErrorHelper(
Context, JSFunction, JSAny, Object): JSObject;
extern transitioning runtime ConstructInternalAggregateErrorHelper(
Context, Object): JSObject;
}