mirror of
https://github.com/bendtherules/completion-viz.git
synced 2026-08-18 21:52:36 +00:00
Clone engine262 in /engine262
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import {
|
||||
DefinePropertyOrThrow,
|
||||
OrdinaryCreateFromConstructor,
|
||||
ToString,
|
||||
} from '../abstract-ops/all.mjs';
|
||||
import {
|
||||
Descriptor,
|
||||
Value,
|
||||
} from '../value.mjs';
|
||||
import { Q, X } from '../completion.mjs';
|
||||
import { surroundingAgent } from '../engine.mjs';
|
||||
import { captureStack } from '../helpers.mjs';
|
||||
import { BootstrapConstructor } from './Bootstrap.mjs';
|
||||
|
||||
// #sec-error-constructor
|
||||
function ErrorConstructor([message = Value.undefined], { NewTarget }) {
|
||||
// 1. If NewTarget is undefined, let newTarget be the active function object; else let newTarget be NewTarget.
|
||||
let newTarget;
|
||||
if (NewTarget === Value.undefined) {
|
||||
newTarget = surroundingAgent.activeFunctionObject;
|
||||
} else {
|
||||
newTarget = NewTarget;
|
||||
}
|
||||
// 2. Let O be ? OrdinaryCreateFromConstructor(newTarget, "%Error.prototype%", « [[ErrorData]] »).
|
||||
const O = Q(OrdinaryCreateFromConstructor(newTarget, '%Error.prototype%', ['ErrorData']));
|
||||
// 3. If message is not undefined, then
|
||||
if (message !== Value.undefined) {
|
||||
// a. Let msg be ? ToString(message).
|
||||
const msg = Q(ToString(message));
|
||||
// b. Let msgDesc be the PropertyDescriptor { [[Value]]: msg, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
const msgDesc = Descriptor({
|
||||
Value: msg,
|
||||
Writable: Value.true,
|
||||
Enumerable: Value.false,
|
||||
Configurable: Value.true,
|
||||
});
|
||||
// c. Perform ! DefinePropertyOrThrow(O, "message", msgDesc).
|
||||
X(DefinePropertyOrThrow(O, new Value('message'), msgDesc));
|
||||
}
|
||||
|
||||
X(captureStack(O)); // NON-SPEC
|
||||
|
||||
// 4. Return O.
|
||||
return O;
|
||||
}
|
||||
|
||||
export function BootstrapError(realmRec) {
|
||||
const error = BootstrapConstructor(realmRec, ErrorConstructor, 'Error', 1, realmRec.Intrinsics['%Error.prototype%'], []);
|
||||
|
||||
realmRec.Intrinsics['%Error%'] = error;
|
||||
}
|
||||
Reference in New Issue
Block a user