| // 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 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; |
| } |