// 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 { // 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 options: JSAny = arguments[2]; const obj: JSObject = ConstructAggregateErrorHelper( context, target, newTarget, message, options); // 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, Object): JSObject; extern transitioning runtime ConstructInternalAggregateErrorHelper( Context, Object): JSObject; }