| // Copyright 2023 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 error { |
| |
| // https://arai-a.github.io/ecma262-compare/?pr=3000&id=sec-suppressederror |
| transitioning javascript builtin SuppressedErrorConstructor( |
| js-implicit context: NativeContext, target: JSFunction, newTarget: JSAny)( |
| ...arguments): JSAny { |
| const error: JSAny = arguments[0]; |
| const suppressed: JSAny = arguments[1]; |
| const message: JSAny = arguments[2]; |
| |
| // 1. If NewTarget is undefined, let newTarget be the active function object; |
| // else let newTarget be NewTarget. |
| // 2. Let O be ? OrdinaryCreateFromConstructor(newTarget, |
| // "%SuppressedError.prototype%", « [[ErrorData]] »). |
| // 3. If message is not undefined, then |
| // a. Let messageString be ? ToString(message). |
| // b. Perform CreateNonEnumerableDataPropertyOrThrow(O, "message", |
| // messageString). |
| const obj: JSObject = |
| ConstructSuppressedError(context, target, newTarget, message); |
| |
| // 4. Perform CreateNonEnumerableDataPropertyOrThrow(O, "error", error). |
| SetOwnPropertyIgnoreAttributes( |
| obj, ErrorStringConstant(), error, |
| SmiConstant(PropertyAttributes::DONT_ENUM)); |
| |
| // 5. Perform CreateNonEnumerableDataPropertyOrThrow(O, "suppressed", |
| // suppressed). |
| SetOwnPropertyIgnoreAttributes( |
| obj, SuppressedStringConstant(), suppressed, |
| SmiConstant(PropertyAttributes::DONT_ENUM)); |
| |
| // 6. Return O. |
| return obj; |
| } |
| |
| extern transitioning runtime ConstructSuppressedError( |
| Context, JSFunction, JSAny, Object): JSObject; |
| |
| } |