mirror of
https://github.com/bendtherules/ask262.git
synced 2026-08-18 21:31:46 +00:00
3441 lines
1010 KiB
HTML
3441 lines
1010 KiB
HTML
<!doctype html><html lang="en-GB-oxendict">
|
|
<head><meta name="viewport" content="width=device-width, initial-scale=1"><meta charset="utf-8"><meta property="og:image" content="https://tc39.es/ecmarkup/ecma-logo.png"><meta property="og:title" content="ECMAScript® 2026 Language Specification"><meta property="og:description" content="Introduction
|
|
This Ecma Standard defines the ECMAScript 2026 Language. It is the seventeenth edition of the ECMAScript Language Specification. ECMAScript is based on several originating technologies, the most well-known being JavaScript (Netscape) and JScript (Microsoft). The language was invent">
|
|
<link rel="icon" href="../img/favicon.ico">
|
|
<link rel="stylesheet" href="../assets/css/ecmarkup.css"><link rel="stylesheet" href="../assets/css/print.css" media="print"><style>
|
|
.unicode-property-table {
|
|
table-layout: fixed;
|
|
width: 100%;
|
|
font-size: 80%;
|
|
}
|
|
|
|
#metadata-block {
|
|
margin: 4em 0;
|
|
padding: 10px;
|
|
border: 1px solid #ee8421;
|
|
}
|
|
#metadata-block h1 {
|
|
font-size: 1.5em;
|
|
margin-top: 0;
|
|
}
|
|
#metadata-block > ul {
|
|
list-style-type: none;
|
|
margin: 0; padding: 0;
|
|
}
|
|
|
|
#ecma-logo {
|
|
width: 500px;
|
|
}
|
|
|
|
.corner-cell {
|
|
position: relative;
|
|
height: 2lh;
|
|
}
|
|
.corner-cell .slash {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: linear-gradient(to bottom left, transparent calc(50% - 1px), gray, transparent calc(50% + 1px));
|
|
}
|
|
.corner-cell > .column {
|
|
position: absolute;
|
|
bottom: 0.4em;
|
|
left: 1em;
|
|
}
|
|
.corner-cell > .row {
|
|
position: absolute;
|
|
top: 0.4em;
|
|
right: 1em;
|
|
}
|
|
</style>
|
|
<style media="print">
|
|
/**
|
|
* ECMA-262-specific hacks. Shouldn't require a ton of maintenance; audit if
|
|
* visual inspection results in unexpected page breaks.
|
|
*
|
|
* For print version, the table captioned "Module fields after the initial Evaluate() call" _may_ need to set the row
|
|
* EVALUATING-ASYNC to one cell with a colspan of 5. It typically does not fit on the page, but the cell merging is
|
|
* not a perfectly accurate solution and will not be merged back in to the specification.
|
|
* See https://github.com/tc39/ecma262/pull/3623#issuecomment-3029366960
|
|
*/
|
|
|
|
/* Make sure tables are wide enough for their captions */
|
|
table {
|
|
min-width: 135mm;
|
|
}
|
|
|
|
/* 2.2 Examples of legacy/normative-optional are small enough to be aggressive against breaks */
|
|
#sec-conformance [example],
|
|
/* 16.2.1.xxx many tables */
|
|
#sec-example-cyclic-module-record-graphs table {
|
|
break-inside: avoid-page;
|
|
}
|
|
|
|
/* 12.10.1 long note can break wherever it wants */
|
|
#sec-rules-of-automatic-semicolon-insertion > emu-note {
|
|
break-before: initial;
|
|
break-inside: initial;
|
|
}
|
|
|
|
/* 12.10.X Sections start with an <em> not inside a <p> */
|
|
#sec-examples-of-automatic-semicolon-insertion > em,
|
|
#sec-interesting-cases-of-automatic-semicolon-insertion > em,
|
|
#sec-asi-cases-with-no-lineterminator-here > em {
|
|
display: block;
|
|
margin-top: 1.25ex;
|
|
}
|
|
|
|
/* 15.1.X missing spacing between intro and first emu-grammar */
|
|
#sec-static-semantics-containsexpression > emu-grammar:first-of-type {
|
|
margin-top: 2ex;
|
|
}
|
|
|
|
/* 15.3 A very long term combined with inline-block, nowrap, and justified text resulting in weird punctuation */
|
|
#sec-arrow-function-definitions > p > emu-grammar {
|
|
text-align: left;
|
|
}
|
|
|
|
/* 20.X legacy title */
|
|
#sec-object\.prototype\.__proto__ > .attributes-tag {
|
|
break-before: avoid-page;
|
|
break-after: avoid-page;
|
|
}
|
|
|
|
/* 21.X table middle column is too narrow */
|
|
#table-time-zone-identifier-record-fields > figure > table th:nth-of-type(2) {
|
|
min-width: 19mm;
|
|
}
|
|
|
|
/* 29.X extremely long note */
|
|
#sec-shared-memory-guidelines > emu-note {
|
|
break-inside: auto;
|
|
}
|
|
|
|
.unicode-property-table {
|
|
table-layout: initial;
|
|
width: auto;
|
|
font-size: 90%;
|
|
}
|
|
|
|
.unicode-property-table th:first-of-type {
|
|
width: 33%;
|
|
}
|
|
|
|
.corner-cell {
|
|
background-image: url(data:image/svg+xml;base64,PHN2ZyBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIgaGVpZ2h0PSI0NiIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEuNSIgd2lkdGg9IjI0MiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtMzE1LjI2NiAzOTYuMzQzIDI0MS4zOTQgNDUuMTU1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4wNCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTMxNC45MyAtMzk1LjkzNSkiLz48L3N2Zz4=);
|
|
background-repeat: no-repeat;
|
|
background-size: 100% 3em;
|
|
height: 3em;
|
|
padding: 0;
|
|
vertical-align: inherit;
|
|
position: static;
|
|
}
|
|
|
|
.corner-cell .slash {
|
|
display: none;
|
|
}
|
|
|
|
.corner-cell > .column, .corner-cell > .row {
|
|
display: block;
|
|
position: relative;
|
|
}
|
|
|
|
.corner-cell > .row {
|
|
text-align: right;
|
|
top: -0.75em
|
|
}
|
|
|
|
.corner-cell > .column {
|
|
text-align: left;
|
|
bottom: -1.25em;
|
|
}
|
|
</style>
|
|
<title>ECMAScript® 2026 Language Specification</title><script src="../assets/js/multipage.js?cache=Wu2V1pj2" defer=""></script><script src="../assets/js/ecmarkup.js?cache=BPFBckdu" defer=""></script><style>
|
|
@media print {
|
|
@page :left {
|
|
@bottom-right {
|
|
content: '© Ecma International 2026';
|
|
}
|
|
}
|
|
@page :right {
|
|
@bottom-left {
|
|
content: '© Ecma International 2026';
|
|
}
|
|
}
|
|
@page :first {
|
|
@bottom-left {
|
|
content: '';
|
|
}
|
|
@bottom-right {
|
|
content: '';
|
|
}
|
|
}
|
|
@page :blank {
|
|
@bottom-left {
|
|
content: '';
|
|
}
|
|
@bottom-right {
|
|
content: '';
|
|
}
|
|
}
|
|
}
|
|
</style><style>
|
|
@import url("https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/styles/base16/solarized-light.min.css");
|
|
@import url("https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/styles/a11y-dark.min.css") (prefers-color-scheme: dark);
|
|
</style><link rel="canonical" href="../#sec-ecmascript-language-scripts-and-modules"></head>
|
|
<body><div id="menu"><div id="menu-search"><input type="text" id="menu-search-box" placeholder="Search..."><div id="menu-search-results" class="inactive"></div></div><div id="menu-pins"><div class="menu-pane-header">Pins<button class="unpin-all">clear</button></div><ul id="menu-pins-list"></ul></div><div class="menu-pane-header">Table of Contents</div><div id="menu-toc"><ol class="toc"><li><span class="item-toggle-none"></span><a href="./#sec-intro" title="Introduction">Introduction</a></li><li><span class="item-toggle-none"></span><a href="scope.html#sec-scope" title="Scope"><span class="secnum">1</span> Scope</a></li><li><span class="item-toggle">+</span><a href="conformance.html#sec-conformance" title="Conformance"><span class="secnum">2</span> Conformance</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="conformance.html#sec-conformance-normative-optional" title="Example Normative Optional Clause Heading"><span class="secnum">2.1</span> Example Normative Optional Clause Heading</a></li><li><span class="item-toggle-none"></span><a href="conformance.html#sec-conformance-legacy" title="Example Legacy Clause Heading"><span class="secnum">2.2</span> Example Legacy Clause Heading</a></li><li><span class="item-toggle-none"></span><a href="conformance.html#sec-conformance-legacy-normative-optional" title="Example Legacy Normative Optional Clause Heading"><span class="secnum">2.3</span> Example Legacy Normative Optional Clause Heading</a></li></ol></li><li><span class="item-toggle-none"></span><a href="normative-references.html#sec-normative-references" title="Normative References"><span class="secnum">3</span> Normative References</a></li><li><span class="item-toggle">+</span><a href="overview.html#sec-overview" title="Overview"><span class="secnum">4</span> Overview</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="overview.html#sec-web-scripting" title="Web Scripting"><span class="secnum">4.1</span> Web Scripting</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-hosts-and-implementations" title="Hosts and Implementations"><span class="secnum">4.2</span> Hosts and Implementations</a></li><li><span class="item-toggle">+</span><a href="overview.html#sec-ecmascript-overview" title="ECMAScript Overview"><span class="secnum">4.3</span> ECMAScript Overview</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="overview.html#sec-objects" title="Objects"><span class="secnum">4.3.1</span> Objects</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-strict-variant-of-ecmascript" title="The Strict Variant of ECMAScript"><span class="secnum">4.3.2</span> The Strict Variant of ECMAScript</a></li></ol></li><li><span class="item-toggle">+</span><a href="overview.html#sec-terms-and-definitions" title="Terms and Definitions"><span class="secnum">4.4</span> Terms and Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-implementation-approximated" title="implementation-approximated"><span class="secnum">4.4.1</span> implementation-approximated</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-implementation-defined" title="implementation-defined"><span class="secnum">4.4.2</span> implementation-defined</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-host-defined" title="host-defined"><span class="secnum">4.4.3</span> host-defined</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-type" title="type"><span class="secnum">4.4.4</span> type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-primitive-value" title="primitive value"><span class="secnum">4.4.5</span> primitive value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-object" title="object"><span class="secnum">4.4.6</span> object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-constructor" title="constructor"><span class="secnum">4.4.7</span> constructor</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-prototype" title="prototype"><span class="secnum">4.4.8</span> prototype</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-ordinary-object" title="ordinary object"><span class="secnum">4.4.9</span> ordinary object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-exotic-object" title="exotic object"><span class="secnum">4.4.10</span> exotic object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-standard-object" title="standard object"><span class="secnum">4.4.11</span> standard object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-built-in-object" title="built-in object"><span class="secnum">4.4.12</span> built-in object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-undefined-value" title="undefined value"><span class="secnum">4.4.13</span> undefined value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-undefined-type" title="Undefined type"><span class="secnum">4.4.14</span> Undefined type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-null-value" title="null value"><span class="secnum">4.4.15</span> null value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-null-type" title="Null type"><span class="secnum">4.4.16</span> Null type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-boolean-value" title="Boolean value"><span class="secnum">4.4.17</span> Boolean value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-boolean-type" title="Boolean type"><span class="secnum">4.4.18</span> Boolean type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-boolean-object" title="Boolean object"><span class="secnum">4.4.19</span> Boolean object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-string-value" title="String value"><span class="secnum">4.4.20</span> String value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-string-type" title="String type"><span class="secnum">4.4.21</span> String type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-string-object" title="String object"><span class="secnum">4.4.22</span> String object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-number-value" title="Number value"><span class="secnum">4.4.23</span> Number value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-number-type" title="Number type"><span class="secnum">4.4.24</span> Number type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-number-object" title="Number object"><span class="secnum">4.4.25</span> Number object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-infinity" title="Infinity"><span class="secnum">4.4.26</span> Infinity</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-nan" title="NaN"><span class="secnum">4.4.27</span> NaN</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-bigint-value" title="BigInt value"><span class="secnum">4.4.28</span> BigInt value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-bigint-type" title="BigInt type"><span class="secnum">4.4.29</span> BigInt type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-bigint-object" title="BigInt object"><span class="secnum">4.4.30</span> BigInt object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-symbol-value" title="Symbol value"><span class="secnum">4.4.31</span> Symbol value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-symbol-type" title="Symbol type"><span class="secnum">4.4.32</span> Symbol type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-symbol-object" title="Symbol object"><span class="secnum">4.4.33</span> Symbol object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-function" title="function"><span class="secnum">4.4.34</span> function</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-built-in-function" title="built-in function"><span class="secnum">4.4.35</span> built-in function</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-built-in-constructor" title="built-in constructor"><span class="secnum">4.4.36</span> built-in constructor</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-property" title="property"><span class="secnum">4.4.37</span> property</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-method" title="method"><span class="secnum">4.4.38</span> method</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-built-in-method" title="built-in method"><span class="secnum">4.4.39</span> built-in method</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-attribute" title="attribute"><span class="secnum">4.4.40</span> attribute</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-own-property" title="own property"><span class="secnum">4.4.41</span> own property</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-inherited-property" title="inherited property"><span class="secnum">4.4.42</span> inherited property</a></li></ol></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-organization-of-this-specification" title="Organization of This Specification"><span class="secnum">4.5</span> Organization of This Specification</a></li></ol></li><li><span class="item-toggle">+</span><a href="notational-conventions.html#sec-notational-conventions" title="Notational Conventions"><span class="secnum">5</span> Notational Conventions</a><ol class="toc"><li><span class="item-toggle">+</span><a href="notational-conventions.html#sec-syntactic-and-lexical-grammars" title="Syntactic and Lexical Grammars"><span class="secnum">5.1</span> Syntactic and Lexical Grammars</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-context-free-grammars" title="Context-Free Grammars"><span class="secnum">5.1.1</span> Context-Free Grammars</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-lexical-and-regexp-grammars" title="The Lexical and RegExp Grammars"><span class="secnum">5.1.2</span> The Lexical and RegExp Grammars</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-numeric-string-grammar" title="The Numeric String Grammar"><span class="secnum">5.1.3</span> The Numeric String Grammar</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-syntactic-grammar" title="The Syntactic Grammar"><span class="secnum">5.1.4</span> The Syntactic Grammar</a></li><li><span class="item-toggle">+</span><a href="notational-conventions.html#sec-grammar-notation" title="Grammar Notation"><span class="secnum">5.1.5</span> Grammar Notation</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-terminal-symbols" title="Terminal Symbols"><span class="secnum">5.1.5.1</span> Terminal Symbols</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-nonterminal-symbols-and-productions" title="Nonterminal Symbols and Productions"><span class="secnum">5.1.5.2</span> Nonterminal Symbols and Productions</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-optional-symbols" title="Optional Symbols"><span class="secnum">5.1.5.3</span> Optional Symbols</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-grammatical-parameters" title="Grammatical Parameters"><span class="secnum">5.1.5.4</span> Grammatical Parameters</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-one-of" title="one of"><span class="secnum">5.1.5.5</span> one of</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-empty" title="[empty]"><span class="secnum">5.1.5.6</span> [empty]</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-lookahead-restrictions" title="Lookahead Restrictions"><span class="secnum">5.1.5.7</span> Lookahead Restrictions</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-no-lineterminator-here" title="[no LineTerminator here]"><span class="secnum">5.1.5.8</span> [no <emu-nt>LineTerminator</emu-nt> here]</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-but-not" title="but not"><span class="secnum">5.1.5.9</span> but not</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-descriptive-phrases" title="Descriptive Phrases"><span class="secnum">5.1.5.10</span> Descriptive Phrases</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="notational-conventions.html#sec-algorithm-conventions" title="Algorithm Conventions"><span class="secnum">5.2</span> Algorithm Conventions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-evaluation-order" title="Evaluation Order"><span class="secnum">5.2.1</span> Evaluation Order</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-algorithm-conventions-abstract-operations" title="Abstract Operations"><span class="secnum">5.2.2</span> Abstract Operations</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations" title="Syntax-Directed Operations"><span class="secnum">5.2.3</span> Syntax-Directed Operations</a></li><li><span class="item-toggle">+</span><a href="notational-conventions.html#sec-runtime-semantics" title="Runtime Semantics"><span class="secnum">5.2.4</span> Runtime Semantics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-completion-ao" title="Completion ( completionRecord )"><span class="secnum">5.2.4.1</span> Completion ( <var>completionRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-throw-an-exception" title="Throw an Exception"><span class="secnum">5.2.4.2</span> Throw an Exception</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-shorthands-for-unwrapping-completion-records" title="Shorthands for Unwrapping Completion Records"><span class="secnum">5.2.4.3</span> Shorthands for Unwrapping Completion Records</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-implicit-normal-completion" title="Implicit Normal Completion"><span class="secnum">5.2.4.4</span> Implicit Normal Completion</a></li></ol></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-static-semantic-rules" title="Static Semantics"><span class="secnum">5.2.5</span> Static Semantics</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-mathematical-operations" title="Mathematical Operations"><span class="secnum">5.2.6</span> Mathematical Operations</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-value-notation" title="Value Notation"><span class="secnum">5.2.7</span> Value Notation</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-identity" title="Identity"><span class="secnum">5.2.8</span> Identity</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-data-types-and-values" title="ECMAScript Data Types and Values"><span class="secnum">6</span> ECMAScript Data Types and Values</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types" title="ECMAScript Language Types"><span class="secnum">6.1</span> ECMAScript Language Types</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-undefined-type" title="The Undefined Type"><span class="secnum">6.1.1</span> The Undefined Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-null-type" title="The Null Type"><span class="secnum">6.1.2</span> The Null Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-boolean-type" title="The Boolean Type"><span class="secnum">6.1.3</span> The Boolean Type</a></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type" title="The String Type"><span class="secnum">6.1.4</span> The String Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-stringindexof" title="StringIndexOf ( string, searchValue, fromIndex )"><span class="secnum">6.1.4.1</span> StringIndexOf ( <var>string</var>, <var>searchValue</var>, <var>fromIndex</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-stringlastindexof" title="StringLastIndexOf ( string, searchValue, fromIndex )"><span class="secnum">6.1.4.2</span> StringLastIndexOf ( <var>string</var>, <var>searchValue</var>, <var>fromIndex</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-symbol-type" title="The Symbol Type"><span class="secnum">6.1.5</span> The Symbol Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols" title="Well-Known Symbols"><span class="secnum">6.1.5.1</span> Well-Known Symbols</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-numeric-types" title="Numeric Types"><span class="secnum">6.1.6</span> Numeric Types</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-number-type" title="The Number Type"><span class="secnum">6.1.6.1</span> The Number Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-unaryMinus" title="Number::unaryMinus ( x )"><span class="secnum">6.1.6.1.1</span> Number::unaryMinus ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseNOT" title="Number::bitwiseNOT ( x )"><span class="secnum">6.1.6.1.2</span> Number::bitwiseNOT ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-exponentiate" title="Number::exponentiate ( base, exponent )"><span class="secnum">6.1.6.1.3</span> Number::exponentiate ( <var>base</var>, <var>exponent</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-multiply" title="Number::multiply ( x, y )"><span class="secnum">6.1.6.1.4</span> Number::multiply ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-divide" title="Number::divide ( x, y )"><span class="secnum">6.1.6.1.5</span> Number::divide ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-remainder" title="Number::remainder ( n, d )"><span class="secnum">6.1.6.1.6</span> Number::remainder ( <var>n</var>, <var>d</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-add" title="Number::add ( x, y )"><span class="secnum">6.1.6.1.7</span> Number::add ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-subtract" title="Number::subtract ( x, y )"><span class="secnum">6.1.6.1.8</span> Number::subtract ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-leftShift" title="Number::leftShift ( x, y )"><span class="secnum">6.1.6.1.9</span> Number::leftShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-signedRightShift" title="Number::signedRightShift ( x, y )"><span class="secnum">6.1.6.1.10</span> Number::signedRightShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-unsignedRightShift" title="Number::unsignedRightShift ( x, y )"><span class="secnum">6.1.6.1.11</span> Number::unsignedRightShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-lessThan" title="Number::lessThan ( x, y )"><span class="secnum">6.1.6.1.12</span> Number::lessThan ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-equal" title="Number::equal ( x, y )"><span class="secnum">6.1.6.1.13</span> Number::equal ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-sameValue" title="Number::sameValue ( x, y )"><span class="secnum">6.1.6.1.14</span> Number::sameValue ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-sameValueZero" title="Number::sameValueZero ( x, y )"><span class="secnum">6.1.6.1.15</span> Number::sameValueZero ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numberbitwiseop" title="NumberBitwiseOp ( op, x, y )"><span class="secnum">6.1.6.1.16</span> NumberBitwiseOp ( <var>op</var>, <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseAND" title="Number::bitwiseAND ( x, y )"><span class="secnum">6.1.6.1.17</span> Number::bitwiseAND ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseXOR" title="Number::bitwiseXOR ( x, y )"><span class="secnum">6.1.6.1.18</span> Number::bitwiseXOR ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseOR" title="Number::bitwiseOR ( x, y )"><span class="secnum">6.1.6.1.19</span> Number::bitwiseOR ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-tostring" title="Number::toString ( x, radix )"><span class="secnum">6.1.6.1.20</span> Number::toString ( <var>x</var>, <var>radix</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-bigint-type" title="The BigInt Type"><span class="secnum">6.1.6.2</span> The BigInt Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-unaryMinus" title="BigInt::unaryMinus ( x )"><span class="secnum">6.1.6.2.1</span> BigInt::unaryMinus ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseNOT" title="BigInt::bitwiseNOT ( x )"><span class="secnum">6.1.6.2.2</span> BigInt::bitwiseNOT ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-exponentiate" title="BigInt::exponentiate ( base, exponent )"><span class="secnum">6.1.6.2.3</span> BigInt::exponentiate ( <var>base</var>, <var>exponent</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-multiply" title="BigInt::multiply ( x, y )"><span class="secnum">6.1.6.2.4</span> BigInt::multiply ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-divide" title="BigInt::divide ( x, y )"><span class="secnum">6.1.6.2.5</span> BigInt::divide ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-remainder" title="BigInt::remainder ( n, d )"><span class="secnum">6.1.6.2.6</span> BigInt::remainder ( <var>n</var>, <var>d</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-add" title="BigInt::add ( x, y )"><span class="secnum">6.1.6.2.7</span> BigInt::add ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-subtract" title="BigInt::subtract ( x, y )"><span class="secnum">6.1.6.2.8</span> BigInt::subtract ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-leftShift" title="BigInt::leftShift ( x, y )"><span class="secnum">6.1.6.2.9</span> BigInt::leftShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-signedRightShift" title="BigInt::signedRightShift ( x, y )"><span class="secnum">6.1.6.2.10</span> BigInt::signedRightShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-unsignedRightShift" title="BigInt::unsignedRightShift ( x, y )"><span class="secnum">6.1.6.2.11</span> BigInt::unsignedRightShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-lessThan" title="BigInt::lessThan ( x, y )"><span class="secnum">6.1.6.2.12</span> BigInt::lessThan ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-equal" title="BigInt::equal ( x, y )"><span class="secnum">6.1.6.2.13</span> BigInt::equal ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-binaryand" title="BinaryAnd ( x, y )"><span class="secnum">6.1.6.2.14</span> BinaryAnd ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-binaryor" title="BinaryOr ( x, y )"><span class="secnum">6.1.6.2.15</span> BinaryOr ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-binaryxor" title="BinaryXor ( x, y )"><span class="secnum">6.1.6.2.16</span> BinaryXor ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-bigintbitwiseop" title="BigIntBitwiseOp ( op, x, y )"><span class="secnum">6.1.6.2.17</span> BigIntBitwiseOp ( <var>op</var>, <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseAND" title="BigInt::bitwiseAND ( x, y )"><span class="secnum">6.1.6.2.18</span> BigInt::bitwiseAND ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseXOR" title="BigInt::bitwiseXOR ( x, y )"><span class="secnum">6.1.6.2.19</span> BigInt::bitwiseXOR ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseOR" title="BigInt::bitwiseOR ( x, y )"><span class="secnum">6.1.6.2.20</span> BigInt::bitwiseOR ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-tostring" title="BigInt::toString ( x, radix )"><span class="secnum">6.1.6.2.21</span> BigInt::toString ( <var>x</var>, <var>radix</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-object-type" title="The Object Type"><span class="secnum">6.1.7</span> The Object Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-property-attributes" title="Property Attributes"><span class="secnum">6.1.7.1</span> Property Attributes</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-object-internal-methods-and-internal-slots" title="Object Internal Methods and Internal Slots"><span class="secnum">6.1.7.2</span> Object Internal Methods and Internal Slots</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-invariants-of-the-essential-internal-methods" title="Invariants of the Essential Internal Methods"><span class="secnum">6.1.7.3</span> Invariants of the Essential Internal Methods</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-well-known-intrinsic-objects" title="Well-Known Intrinsic Objects"><span class="secnum">6.1.7.4</span> Well-Known Intrinsic Objects</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-specification-types" title="ECMAScript Specification Types"><span class="secnum">6.2</span> ECMAScript Specification Types</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-enum-specification-type" title="The Enum Specification Type"><span class="secnum">6.2.1</span> The Enum Specification Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type" title="The List and Record Specification Types"><span class="secnum">6.2.2</span> The List and Record Specification Types</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-set-and-relation-specification-type" title="The Set and Relation Specification Types"><span class="secnum">6.2.3</span> The Set and Relation Specification Types</a></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type" title="The Completion Record Specification Type"><span class="secnum">6.2.4</span> The Completion Record Specification Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-normalcompletion" title="NormalCompletion ( value )"><span class="secnum">6.2.4.1</span> NormalCompletion ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-throwcompletion" title="ThrowCompletion ( value )"><span class="secnum">6.2.4.2</span> ThrowCompletion ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-returncompletion" title="ReturnCompletion ( value )"><span class="secnum">6.2.4.3</span> ReturnCompletion ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-updateempty" title="UpdateEmpty ( completionRecord, value )"><span class="secnum">6.2.4.4</span> UpdateEmpty ( <var>completionRecord</var>, <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type" title="The Reference Record Specification Type"><span class="secnum">6.2.5</span> The Reference Record Specification Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-ispropertyreference" title="IsPropertyReference ( V )"><span class="secnum">6.2.5.1</span> IsPropertyReference ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-isunresolvablereference" title="IsUnresolvableReference ( V )"><span class="secnum">6.2.5.2</span> IsUnresolvableReference ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-issuperreference" title="IsSuperReference ( V )"><span class="secnum">6.2.5.3</span> IsSuperReference ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-isprivatereference" title="IsPrivateReference ( V )"><span class="secnum">6.2.5.4</span> IsPrivateReference ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-getvalue" title="GetValue ( V )"><span class="secnum">6.2.5.5</span> GetValue ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-putvalue" title="PutValue ( V, W )"><span class="secnum">6.2.5.6</span> PutValue ( <var>V</var>, <var>W</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-getthisvalue" title="GetThisValue ( V )"><span class="secnum">6.2.5.7</span> GetThisValue ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-initializereferencedbinding" title="InitializeReferencedBinding ( V, W )"><span class="secnum">6.2.5.8</span> InitializeReferencedBinding ( <var>V</var>, <var>W</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-makeprivatereference" title="MakePrivateReference ( baseValue, privateIdentifier )"><span class="secnum">6.2.5.9</span> MakePrivateReference ( <var>baseValue</var>, <var>privateIdentifier</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type" title="The Property Descriptor Specification Type"><span class="secnum">6.2.6</span> The Property Descriptor Specification Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor" title="IsAccessorDescriptor ( Desc )"><span class="secnum">6.2.6.1</span> IsAccessorDescriptor ( <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-isdatadescriptor" title="IsDataDescriptor ( Desc )"><span class="secnum">6.2.6.2</span> IsDataDescriptor ( <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-isgenericdescriptor" title="IsGenericDescriptor ( Desc )"><span class="secnum">6.2.6.3</span> IsGenericDescriptor ( <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-frompropertydescriptor" title="FromPropertyDescriptor ( Desc )"><span class="secnum">6.2.6.4</span> FromPropertyDescriptor ( <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-topropertydescriptor" title="ToPropertyDescriptor ( Obj )"><span class="secnum">6.2.6.5</span> ToPropertyDescriptor ( <var>Obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-completepropertydescriptor" title="CompletePropertyDescriptor ( Desc )"><span class="secnum">6.2.6.6</span> CompletePropertyDescriptor ( <var>Desc</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-lexical-environment-and-environment-record-specification-types" title="The Environment Record Specification Type"><span class="secnum">6.2.7</span> The Environment Record Specification Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-abstract-closure" title="The Abstract Closure Specification Type"><span class="secnum">6.2.8</span> The Abstract Closure Specification Type</a></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-data-blocks" title="Data Blocks"><span class="secnum">6.2.9</span> Data Blocks</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-createbytedatablock" title="CreateByteDataBlock ( size )"><span class="secnum">6.2.9.1</span> CreateByteDataBlock ( <var>size</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-createsharedbytedatablock" title="CreateSharedByteDataBlock ( size )"><span class="secnum">6.2.9.2</span> CreateSharedByteDataBlock ( <var>size</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-copydatablockbytes" title="CopyDataBlockBytes ( toBlock, toIndex, fromBlock, fromIndex, count )"><span class="secnum">6.2.9.3</span> CopyDataBlockBytes ( <var>toBlock</var>, <var>toIndex</var>, <var>fromBlock</var>, <var>fromIndex</var>, <var>count</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-privateelement-specification-type" title="The PrivateElement Specification Type"><span class="secnum">6.2.10</span> The PrivateElement Specification Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-classfielddefinition-record-specification-type" title="The ClassFieldDefinition Record Specification Type"><span class="secnum">6.2.11</span> The ClassFieldDefinition Record Specification Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-private-names" title="Private Names"><span class="secnum">6.2.12</span> Private Names</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-classstaticblockdefinition-record-specification-type" title="The ClassStaticBlockDefinition Record Specification Type"><span class="secnum">6.2.13</span> The ClassStaticBlockDefinition Record Specification Type</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-abstract-operations" title="Abstract Operations"><span class="secnum">7</span> Abstract Operations</a><ol class="toc"><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-type-conversion" title="Type Conversion"><span class="secnum">7.1</span> Type Conversion</a><ol class="toc"><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-toprimitive" title="ToPrimitive ( input [ , preferredType ] )"><span class="secnum">7.1.1</span> ToPrimitive ( <var>input</var> [ , <var>preferredType</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-ordinarytoprimitive" title="OrdinaryToPrimitive ( O, hint )"><span class="secnum">7.1.1.1</span> OrdinaryToPrimitive ( <var>O</var>, <var>hint</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toboolean" title="ToBoolean ( argument )"><span class="secnum">7.1.2</span> ToBoolean ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tonumeric" title="ToNumeric ( value )"><span class="secnum">7.1.3</span> ToNumeric ( <var>value</var> )</a></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-tonumber" title="ToNumber ( argument )"><span class="secnum">7.1.4</span> ToNumber ( <var>argument</var> )</a><ol class="toc"><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-tonumber-applied-to-the-string-type" title="ToNumber Applied to the String Type"><span class="secnum">7.1.4.1</span> ToNumber Applied to the String Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-stringtonumber" title="StringToNumber ( str )"><span class="secnum">7.1.4.1.1</span> StringToNumber ( <var>str</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-runtime-semantics-stringnumericvalue" title="Runtime Semantics: StringNumericValue"><span class="secnum">7.1.4.1.2</span> RS: StringNumericValue</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-roundmvresult" title="RoundMVResult ( n )"><span class="secnum">7.1.4.1.3</span> RoundMVResult ( <var>n</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tointegerorinfinity" title="ToIntegerOrInfinity ( argument )"><span class="secnum">7.1.5</span> ToIntegerOrInfinity ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toint32" title="ToInt32 ( argument )"><span class="secnum">7.1.6</span> ToInt32 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-touint32" title="ToUint32 ( argument )"><span class="secnum">7.1.7</span> ToUint32 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toint16" title="ToInt16 ( argument )"><span class="secnum">7.1.8</span> ToInt16 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-touint16" title="ToUint16 ( argument )"><span class="secnum">7.1.9</span> ToUint16 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toint8" title="ToInt8 ( argument )"><span class="secnum">7.1.10</span> ToInt8 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-touint8" title="ToUint8 ( argument )"><span class="secnum">7.1.11</span> ToUint8 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-touint8clamp" title="ToUint8Clamp ( argument )"><span class="secnum">7.1.12</span> ToUint8Clamp ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tobigint" title="ToBigInt ( argument )"><span class="secnum">7.1.13</span> ToBigInt ( <var>argument</var> )</a></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-stringtobigint" title="StringToBigInt ( str )"><span class="secnum">7.1.14</span> StringToBigInt ( <var>str</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-stringintegerliteral-grammar" title="StringIntegerLiteral Grammar"><span class="secnum">7.1.14.1</span> StringIntegerLiteral Grammar</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-runtime-semantics-mv-for-stringintegerliteral" title="Runtime Semantics: MV"><span class="secnum">7.1.14.2</span> RS: MV</a></li></ol></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tobigint64" title="ToBigInt64 ( argument )"><span class="secnum">7.1.15</span> ToBigInt64 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tobiguint64" title="ToBigUint64 ( argument )"><span class="secnum">7.1.16</span> ToBigUint64 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tostring" title="ToString ( argument )"><span class="secnum">7.1.17</span> ToString ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toobject" title="ToObject ( argument )"><span class="secnum">7.1.18</span> ToObject ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-topropertykey" title="ToPropertyKey ( argument )"><span class="secnum">7.1.19</span> ToPropertyKey ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tolength" title="ToLength ( argument )"><span class="secnum">7.1.20</span> ToLength ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-canonicalnumericindexstring" title="CanonicalNumericIndexString ( argument )"><span class="secnum">7.1.21</span> CanonicalNumericIndexString ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toindex" title="ToIndex ( value )"><span class="secnum">7.1.22</span> ToIndex ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-testing-and-comparison-operations" title="Testing and Comparison Operations"><span class="secnum">7.2</span> Testing and Comparison Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-requireobjectcoercible" title="RequireObjectCoercible ( argument )"><span class="secnum">7.2.1</span> RequireObjectCoercible ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isarray" title="IsArray ( argument )"><span class="secnum">7.2.2</span> IsArray ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iscallable" title="IsCallable ( argument )"><span class="secnum">7.2.3</span> IsCallable ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isconstructor" title="IsConstructor ( argument )"><span class="secnum">7.2.4</span> IsConstructor ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isextensible-o" title="IsExtensible ( O )"><span class="secnum">7.2.5</span> IsExtensible ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isregexp" title="IsRegExp ( argument )"><span class="secnum">7.2.6</span> IsRegExp ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isstringwellformedunicode" title="Static Semantics: IsStringWellFormedUnicode ( string )"><span class="secnum">7.2.7</span> SS: IsStringWellFormedUnicode ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-sametype" title="SameType ( x, y )"><span class="secnum">7.2.8</span> SameType ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-samevalue" title="SameValue ( x, y )"><span class="secnum">7.2.9</span> SameValue ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-samevaluezero" title="SameValueZero ( x, y )"><span class="secnum">7.2.10</span> SameValueZero ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-samevaluenonnumber" title="SameValueNonNumber ( x, y )"><span class="secnum">7.2.11</span> SameValueNonNumber ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-islessthan" title="IsLessThan ( x, y, LeftFirst )"><span class="secnum">7.2.12</span> IsLessThan ( <var>x</var>, <var>y</var>, <var>LeftFirst</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-islooselyequal" title="IsLooselyEqual ( x, y )"><span class="secnum">7.2.13</span> IsLooselyEqual ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isstrictlyequal" title="IsStrictlyEqual ( x, y )"><span class="secnum">7.2.14</span> IsStrictlyEqual ( <var>x</var>, <var>y</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-operations-on-objects" title="Operations on Objects"><span class="secnum">7.3</span> Operations on Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-makebasicobject" title="MakeBasicObject ( internalSlotsList )"><span class="secnum">7.3.1</span> MakeBasicObject ( <var>internalSlotsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-get-o-p" title="Get ( O, P )"><span class="secnum">7.3.2</span> Get ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getv" title="GetV ( V, P )"><span class="secnum">7.3.3</span> GetV ( <var>V</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-set-o-p-v-throw" title="Set ( O, P, V, Throw )"><span class="secnum">7.3.4</span> Set ( <var>O</var>, <var>P</var>, <var>V</var>, <var>Throw</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createdataproperty" title="CreateDataProperty ( O, P, V )"><span class="secnum">7.3.5</span> CreateDataProperty ( <var>O</var>, <var>P</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createdatapropertyorthrow" title="CreateDataPropertyOrThrow ( O, P, V )"><span class="secnum">7.3.6</span> CreateDataPropertyOrThrow ( <var>O</var>, <var>P</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createnonenumerabledatapropertyorthrow" title="CreateNonEnumerableDataPropertyOrThrow ( O, P, V )"><span class="secnum">7.3.7</span> CreateNonEnumerableDataPropertyOrThrow ( <var>O</var>, <var>P</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-definepropertyorthrow" title="DefinePropertyOrThrow ( O, P, desc )"><span class="secnum">7.3.8</span> DefinePropertyOrThrow ( <var>O</var>, <var>P</var>, <var>desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-deletepropertyorthrow" title="DeletePropertyOrThrow ( O, P )"><span class="secnum">7.3.9</span> DeletePropertyOrThrow ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getmethod" title="GetMethod ( V, P )"><span class="secnum">7.3.10</span> GetMethod ( <var>V</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-hasproperty" title="HasProperty ( O, P )"><span class="secnum">7.3.11</span> HasProperty ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-hasownproperty" title="HasOwnProperty ( O, P )"><span class="secnum">7.3.12</span> HasOwnProperty ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-call" title="Call ( F, V [ , argumentsList ] )"><span class="secnum">7.3.13</span> Call ( <var>F</var>, <var>V</var> [ , <var>argumentsList</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-construct" title="Construct ( F [ , argumentsList [ , newTarget ] ] )"><span class="secnum">7.3.14</span> Construct ( <var>F</var> [ , <var>argumentsList</var> [ , <var>newTarget</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-setintegritylevel" title="SetIntegrityLevel ( O, level )"><span class="secnum">7.3.15</span> SetIntegrityLevel ( <var>O</var>, <var>level</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-testintegritylevel" title="TestIntegrityLevel ( O, level )"><span class="secnum">7.3.16</span> TestIntegrityLevel ( <var>O</var>, <var>level</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createarrayfromlist" title="CreateArrayFromList ( elements )"><span class="secnum">7.3.17</span> CreateArrayFromList ( <var>elements</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-lengthofarraylike" title="LengthOfArrayLike ( obj )"><span class="secnum">7.3.18</span> LengthOfArrayLike ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createlistfromarraylike" title="CreateListFromArrayLike ( obj [ , validElementTypes ] )"><span class="secnum">7.3.19</span> CreateListFromArrayLike ( <var>obj</var> [ , <var>validElementTypes</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-invoke" title="Invoke ( V, P [ , argumentsList ] )"><span class="secnum">7.3.20</span> Invoke ( <var>V</var>, <var>P</var> [ , <var>argumentsList</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-ordinaryhasinstance" title="OrdinaryHasInstance ( C, O )"><span class="secnum">7.3.21</span> OrdinaryHasInstance ( <var>C</var>, <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-speciesconstructor" title="SpeciesConstructor ( O, defaultConstructor )"><span class="secnum">7.3.22</span> SpeciesConstructor ( <var>O</var>, <var>defaultConstructor</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-enumerableownproperties" title="EnumerableOwnProperties ( O, kind )"><span class="secnum">7.3.23</span> EnumerableOwnProperties ( <var>O</var>, <var>kind</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getfunctionrealm" title="GetFunctionRealm ( obj )"><span class="secnum">7.3.24</span> GetFunctionRealm ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-copydataproperties" title="CopyDataProperties ( target, source, excludedItems )"><span class="secnum">7.3.25</span> CopyDataProperties ( <var>target</var>, <var>source</var>, <var>excludedItems</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-privateelementfind" title="PrivateElementFind ( O, P )"><span class="secnum">7.3.26</span> PrivateElementFind ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-privatefieldadd" title="PrivateFieldAdd ( O, P, value )"><span class="secnum">7.3.27</span> PrivateFieldAdd ( <var>O</var>, <var>P</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-privatemethodoraccessoradd" title="PrivateMethodOrAccessorAdd ( O, method )"><span class="secnum">7.3.28</span> PrivateMethodOrAccessorAdd ( <var>O</var>, <var>method</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-hostensurecanaddprivateelement" title="HostEnsureCanAddPrivateElement ( O )"><span class="secnum">7.3.29</span> HostEnsureCanAddPrivateElement ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-privateget" title="PrivateGet ( O, P )"><span class="secnum">7.3.30</span> PrivateGet ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-privateset" title="PrivateSet ( O, P, value )"><span class="secnum">7.3.31</span> PrivateSet ( <var>O</var>, <var>P</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-definefield" title="DefineField ( receiver, fieldRecord )"><span class="secnum">7.3.32</span> DefineField ( <var>receiver</var>, <var>fieldRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-initializeinstanceelements" title="InitializeInstanceElements ( O, constructor )"><span class="secnum">7.3.33</span> InitializeInstanceElements ( <var>O</var>, <var>constructor</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-add-value-to-keyed-group" title="AddValueToKeyedGroup ( groups, key, value )"><span class="secnum">7.3.34</span> AddValueToKeyedGroup ( <var>groups</var>, <var>key</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-groupby" title="GroupBy ( items, callback, keyCoercion )"><span class="secnum">7.3.35</span> GroupBy ( <var>items</var>, <var>callback</var>, <var>keyCoercion</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getoptionsobject" title="GetOptionsObject ( options )"><span class="secnum">7.3.36</span> GetOptionsObject ( <var>options</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-SetterThatIgnoresPrototypeProperties" title="SetterThatIgnoresPrototypeProperties ( thisValue, home, p, v )"><span class="secnum">7.3.37</span> SetterThatIgnoresPrototypeProperties ( <var>thisValue</var>, <var>home</var>, <var>p</var>, <var>v</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-operations-on-iterator-objects" title="Operations on Iterator Objects"><span class="secnum">7.4</span> Operations on Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iterator-records" title="Iterator Records"><span class="secnum">7.4.1</span> Iterator Records</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getiteratordirect" title="GetIteratorDirect ( obj )"><span class="secnum">7.4.2</span> GetIteratorDirect ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getiteratorfrommethod" title="GetIteratorFromMethod ( obj, method )"><span class="secnum">7.4.3</span> GetIteratorFromMethod ( <var>obj</var>, <var>method</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getiterator" title="GetIterator ( obj, kind )"><span class="secnum">7.4.4</span> GetIterator ( <var>obj</var>, <var>kind</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getiteratorflattenable" title="GetIteratorFlattenable ( obj, primitiveHandling )"><span class="secnum">7.4.5</span> GetIteratorFlattenable ( <var>obj</var>, <var>primitiveHandling</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratornext" title="IteratorNext ( iteratorRecord [ , value ] )"><span class="secnum">7.4.6</span> IteratorNext ( <var>iteratorRecord</var> [ , <var>value</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorcomplete" title="IteratorComplete ( iteratorResult )"><span class="secnum">7.4.7</span> IteratorComplete ( <var>iteratorResult</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorvalue" title="IteratorValue ( iteratorResult )"><span class="secnum">7.4.8</span> IteratorValue ( <var>iteratorResult</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorstep" title="IteratorStep ( iteratorRecord )"><span class="secnum">7.4.9</span> IteratorStep ( <var>iteratorRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorstepvalue" title="IteratorStepValue ( iteratorRecord )"><span class="secnum">7.4.10</span> IteratorStepValue ( <var>iteratorRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorclose" title="IteratorClose ( iteratorRecord, completion )"><span class="secnum">7.4.11</span> IteratorClose ( <var>iteratorRecord</var>, <var>completion</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorcloseall" title="IteratorCloseAll ( iters, completion )"><span class="secnum">7.4.12</span> IteratorCloseAll ( <var>iters</var>, <var>completion</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-ifabruptcloseiterator" title="IfAbruptCloseIterator ( value, iteratorRecord )"><span class="secnum">7.4.13</span> IfAbruptCloseIterator ( <var>value</var>, <var>iteratorRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-asynciteratorclose" title="AsyncIteratorClose ( iteratorRecord, completion )"><span class="secnum">7.4.14</span> AsyncIteratorClose ( <var>iteratorRecord</var>, <var>completion</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-ifabruptcloseasynciterator" title="IfAbruptCloseAsyncIterator ( value, iteratorRecord )"><span class="secnum">7.4.15</span> IfAbruptCloseAsyncIterator ( <var>value</var>, <var>iteratorRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createiterresultobject" title="CreateIteratorResultObject ( value, done )"><span class="secnum">7.4.16</span> CreateIteratorResultObject ( <var>value</var>, <var>done</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createlistiteratorRecord" title="CreateListIteratorRecord ( list )"><span class="secnum">7.4.17</span> CreateListIteratorRecord ( <var>list</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratortolist" title="IteratorToList ( iteratorRecord )"><span class="secnum">7.4.18</span> IteratorToList ( <var>iteratorRecord</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations" title="Syntax-Directed Operations"><span class="secnum">8</span> Syntax-Directed Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">8.1</span> RS: Evaluation</a></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations-scope-analysis" title="Scope Analysis"><span class="secnum">8.2</span> Scope Analysis</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-boundnames" title="Static Semantics: BoundNames"><span class="secnum">8.2.1</span> SS: BoundNames</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-declarationpart" title="Static Semantics: DeclarationPart"><span class="secnum">8.2.2</span> SS: DeclarationPart</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-isconstantdeclaration" title="Static Semantics: IsConstantDeclaration"><span class="secnum">8.2.3</span> SS: IsConstantDeclaration</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames" title="Static Semantics: LexicallyDeclaredNames"><span class="secnum">8.2.4</span> SS: LexicallyDeclaredNames</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-lexicallyscopeddeclarations" title="Static Semantics: LexicallyScopedDeclarations"><span class="secnum">8.2.5</span> SS: LexicallyScopedDeclarations</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-vardeclarednames" title="Static Semantics: VarDeclaredNames"><span class="secnum">8.2.6</span> SS: VarDeclaredNames</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-varscopeddeclarations" title="Static Semantics: VarScopedDeclarations"><span class="secnum">8.2.7</span> SS: VarScopedDeclarations</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-toplevellexicallydeclarednames" title="Static Semantics: TopLevelLexicallyDeclaredNames"><span class="secnum">8.2.8</span> SS: TopLevelLexicallyDeclaredNames</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-toplevellexicallyscopeddeclarations" title="Static Semantics: TopLevelLexicallyScopedDeclarations"><span class="secnum">8.2.9</span> SS: TopLevelLexicallyScopedDeclarations</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-toplevelvardeclarednames" title="Static Semantics: TopLevelVarDeclaredNames"><span class="secnum">8.2.10</span> SS: TopLevelVarDeclaredNames</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-toplevelvarscopeddeclarations" title="Static Semantics: TopLevelVarScopedDeclarations"><span class="secnum">8.2.11</span> SS: TopLevelVarScopedDeclarations</a></li></ol></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations-labels" title="Labels"><span class="secnum">8.3</span> Labels</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-containsduplicatelabels" title="Static Semantics: ContainsDuplicateLabels"><span class="secnum">8.3.1</span> SS: ContainsDuplicateLabels</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-containsundefinedbreaktarget" title="Static Semantics: ContainsUndefinedBreakTarget"><span class="secnum">8.3.2</span> SS: ContainsUndefinedBreakTarget</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-containsundefinedcontinuetarget" title="Static Semantics: ContainsUndefinedContinueTarget"><span class="secnum">8.3.3</span> SS: ContainsUndefinedContinueTarget</a></li></ol></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations-function-name-inference" title="Function Name Inference"><span class="secnum">8.4</span> Function Name Inference</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-hasname" title="Static Semantics: HasName"><span class="secnum">8.4.1</span> SS: HasName</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-isfunctiondefinition" title="Static Semantics: IsFunctionDefinition"><span class="secnum">8.4.2</span> SS: IsFunctionDefinition</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-isanonymousfunctiondefinition" title="Static Semantics: IsAnonymousFunctionDefinition ( expr )"><span class="secnum">8.4.3</span> SS: IsAnonymousFunctionDefinition ( <var>expr</var> )</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-isidentifierref" title="Static Semantics: IsIdentifierRef"><span class="secnum">8.4.4</span> SS: IsIdentifierRef</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-runtime-semantics-namedevaluation" title="Runtime Semantics: NamedEvaluation"><span class="secnum">8.4.5</span> RS: NamedEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations-contains" title="Contains"><span class="secnum">8.5</span> Contains</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-contains" title="Static Semantics: Contains"><span class="secnum">8.5.1</span> SS: Contains</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-computedpropertycontains" title="Static Semantics: ComputedPropertyContains"><span class="secnum">8.5.2</span> SS: ComputedPropertyContains</a></li></ol></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations-miscellaneous" title="Miscellaneous"><span class="secnum">8.6</span> Miscellaneous</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-runtime-semantics-instantiatefunctionobject" title="Runtime Semantics: InstantiateFunctionObject"><span class="secnum">8.6.1</span> RS: InstantiateFunctionObject</a></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-runtime-semantics-bindinginitialization" title="Runtime Semantics: BindingInitialization"><span class="secnum">8.6.2</span> RS: BindingInitialization</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-initializeboundname" title="InitializeBoundName ( name, value, environment )"><span class="secnum">8.6.2.1</span> InitializeBoundName ( <var>name</var>, <var>value</var>, <var>environment</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-runtime-semantics-iteratorbindinginitialization" title="Runtime Semantics: IteratorBindingInitialization"><span class="secnum">8.6.3</span> RS: IteratorBindingInitialization</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype" title="Static Semantics: AssignmentTargetType"><span class="secnum">8.6.4</span> SS: AssignmentTargetType</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-propname" title="Static Semantics: PropName"><span class="secnum">8.6.5</span> SS: PropName</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-executable-code-and-execution-contexts" title="Executable Code and Execution Contexts"><span class="secnum">9</span> Executable Code and Execution Contexts</a><ol class="toc"><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-environment-records" title="Environment Records"><span class="secnum">9.1</span> Environment Records</a><ol class="toc"><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-the-environment-record-type-hierarchy" title="The Environment Record Type Hierarchy"><span class="secnum">9.1.1</span> The Environment Record Type Hierarchy</a><ol class="toc"><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records" title="Declarative Environment Records"><span class="secnum">9.1.1.1</span> Declarative Environment Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-hasbinding-n" title="HasBinding ( N )"><span class="secnum">9.1.1.1.1</span> HasBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-createmutablebinding-n-d" title="CreateMutableBinding ( N, D )"><span class="secnum">9.1.1.1.2</span> CreateMutableBinding ( <var>N</var>, <var>D</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-createimmutablebinding-n-s" title="CreateImmutableBinding ( N, S )"><span class="secnum">9.1.1.1.3</span> CreateImmutableBinding ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-initializebinding-n-v" title="InitializeBinding ( N, V )"><span class="secnum">9.1.1.1.4</span> InitializeBinding ( <var>N</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-setmutablebinding-n-v-s" title="SetMutableBinding ( N, V, S )"><span class="secnum">9.1.1.1.5</span> SetMutableBinding ( <var>N</var>, <var>V</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-getbindingvalue-n-s" title="GetBindingValue ( N, S )"><span class="secnum">9.1.1.1.6</span> GetBindingValue ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-deletebinding-n" title="DeleteBinding ( N )"><span class="secnum">9.1.1.1.7</span> DeleteBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-hasthisbinding" title="HasThisBinding ( )"><span class="secnum">9.1.1.1.8</span> HasThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-getthisbinding" title="GetThisBinding ( )"><span class="secnum">9.1.1.1.9</span> GetThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-hassuperbinding" title="HasSuperBinding ( )"><span class="secnum">9.1.1.1.10</span> HasSuperBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-withbaseobject" title="WithBaseObject ( )"><span class="secnum">9.1.1.1.11</span> WithBaseObject ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records" title="Object Environment Records"><span class="secnum">9.1.1.2</span> Object Environment Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-hasbinding-n" title="HasBinding ( N )"><span class="secnum">9.1.1.2.1</span> HasBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-createmutablebinding-n-d" title="CreateMutableBinding ( N, D )"><span class="secnum">9.1.1.2.2</span> CreateMutableBinding ( <var>N</var>, <var>D</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-createimmutablebinding-n-s" title="CreateImmutableBinding ( N, S )"><span class="secnum">9.1.1.2.3</span> CreateImmutableBinding ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-initializebinding-n-v" title="InitializeBinding ( N, V )"><span class="secnum">9.1.1.2.4</span> InitializeBinding ( <var>N</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-setmutablebinding-n-v-s" title="SetMutableBinding ( N, V, S )"><span class="secnum">9.1.1.2.5</span> SetMutableBinding ( <var>N</var>, <var>V</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-getbindingvalue-n-s" title="GetBindingValue ( N, S )"><span class="secnum">9.1.1.2.6</span> GetBindingValue ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-deletebinding-n" title="DeleteBinding ( N )"><span class="secnum">9.1.1.2.7</span> DeleteBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-hasthisbinding" title="HasThisBinding ( )"><span class="secnum">9.1.1.2.8</span> HasThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-getthisbinding" title="GetThisBinding ( )"><span class="secnum">9.1.1.2.9</span> GetThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-hassuperbinding" title="HasSuperBinding ( )"><span class="secnum">9.1.1.2.10</span> HasSuperBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-withbaseobject" title="WithBaseObject ( )"><span class="secnum">9.1.1.2.11</span> WithBaseObject ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-function-environment-records" title="Function Environment Records"><span class="secnum">9.1.1.3</span> Function Environment Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-bindthisvalue" title="BindThisValue ( envRec, V )"><span class="secnum">9.1.1.3.1</span> BindThisValue ( <var>envRec</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-function-environment-records-hasthisbinding" title="HasThisBinding ( )"><span class="secnum">9.1.1.3.2</span> HasThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-function-environment-records-getthisbinding" title="GetThisBinding ( )"><span class="secnum">9.1.1.3.3</span> GetThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-function-environment-records-hassuperbinding" title="HasSuperBinding ( )"><span class="secnum">9.1.1.3.4</span> HasSuperBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getsuperbase" title="GetSuperBase ( envRec )"><span class="secnum">9.1.1.3.5</span> GetSuperBase ( <var>envRec</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records" title="Global Environment Records"><span class="secnum">9.1.1.4</span> Global Environment Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-hasbinding-n" title="HasBinding ( N )"><span class="secnum">9.1.1.4.1</span> HasBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-createmutablebinding-n-d" title="CreateMutableBinding ( N, D )"><span class="secnum">9.1.1.4.2</span> CreateMutableBinding ( <var>N</var>, <var>D</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-createimmutablebinding-n-s" title="CreateImmutableBinding ( N, S )"><span class="secnum">9.1.1.4.3</span> CreateImmutableBinding ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-initializebinding-n-v" title="InitializeBinding ( N, V )"><span class="secnum">9.1.1.4.4</span> InitializeBinding ( <var>N</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-setmutablebinding-n-v-s" title="SetMutableBinding ( N, V, S )"><span class="secnum">9.1.1.4.5</span> SetMutableBinding ( <var>N</var>, <var>V</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-getbindingvalue-n-s" title="GetBindingValue ( N, S )"><span class="secnum">9.1.1.4.6</span> GetBindingValue ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-deletebinding-n" title="DeleteBinding ( N )"><span class="secnum">9.1.1.4.7</span> DeleteBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-hasthisbinding" title="HasThisBinding ( )"><span class="secnum">9.1.1.4.8</span> HasThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-getthisbinding" title="GetThisBinding ( )"><span class="secnum">9.1.1.4.9</span> GetThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-hassuperbinding" title="HasSuperBinding ( )"><span class="secnum">9.1.1.4.10</span> HasSuperBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-withbaseobject" title="WithBaseObject ( )"><span class="secnum">9.1.1.4.11</span> WithBaseObject ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-haslexicaldeclaration" title="HasLexicalDeclaration ( envRec, N )"><span class="secnum">9.1.1.4.12</span> HasLexicalDeclaration ( <var>envRec</var>, <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hasrestrictedglobalproperty" title="HasRestrictedGlobalProperty ( envRec, N )"><span class="secnum">9.1.1.4.13</span> HasRestrictedGlobalProperty ( <var>envRec</var>, <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-candeclareglobalvar" title="CanDeclareGlobalVar ( envRec, N )"><span class="secnum">9.1.1.4.14</span> CanDeclareGlobalVar ( <var>envRec</var>, <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-candeclareglobalfunction" title="CanDeclareGlobalFunction ( envRec, N )"><span class="secnum">9.1.1.4.15</span> CanDeclareGlobalFunction ( <var>envRec</var>, <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-createglobalvarbinding" title="CreateGlobalVarBinding ( envRec, N, D )"><span class="secnum">9.1.1.4.16</span> CreateGlobalVarBinding ( <var>envRec</var>, <var>N</var>, <var>D</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-createglobalfunctionbinding" title="CreateGlobalFunctionBinding ( envRec, N, V, D )"><span class="secnum">9.1.1.4.17</span> CreateGlobalFunctionBinding ( <var>envRec</var>, <var>N</var>, <var>V</var>, <var>D</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-module-environment-records" title="Module Environment Records"><span class="secnum">9.1.1.5</span> Module Environment Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-module-environment-records-getbindingvalue-n-s" title="GetBindingValue ( N, S )"><span class="secnum">9.1.1.5.1</span> GetBindingValue ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-module-environment-records-deletebinding-n" title="DeleteBinding ( N )"><span class="secnum">9.1.1.5.2</span> DeleteBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-module-environment-records-hasthisbinding" title="HasThisBinding ( )"><span class="secnum">9.1.1.5.3</span> HasThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-module-environment-records-getthisbinding" title="GetThisBinding ( )"><span class="secnum">9.1.1.5.4</span> GetThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-createimportbinding" title="CreateImportBinding ( envRec, N, M, N2 )"><span class="secnum">9.1.1.5.5</span> CreateImportBinding ( <var>envRec</var>, <var>N</var>, <var>M</var>, <var>N2</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-environment-record-operations" title="Environment Record Operations"><span class="secnum">9.1.2</span> Environment Record Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getidentifierreference" title="GetIdentifierReference ( env, name, strict )"><span class="secnum">9.1.2.1</span> GetIdentifierReference ( <var>env</var>, <var>name</var>, <var>strict</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newdeclarativeenvironment" title="NewDeclarativeEnvironment ( E )"><span class="secnum">9.1.2.2</span> NewDeclarativeEnvironment ( <var>E</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newobjectenvironment" title="NewObjectEnvironment ( O, W, E )"><span class="secnum">9.1.2.3</span> NewObjectEnvironment ( <var>O</var>, <var>W</var>, <var>E</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newfunctionenvironment" title="NewFunctionEnvironment ( F, newTarget )"><span class="secnum">9.1.2.4</span> NewFunctionEnvironment ( <var>F</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newglobalenvironment" title="NewGlobalEnvironment ( G, thisValue )"><span class="secnum">9.1.2.5</span> NewGlobalEnvironment ( <var>G</var>, <var>thisValue</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newmoduleenvironment" title="NewModuleEnvironment ( E )"><span class="secnum">9.1.2.6</span> NewModuleEnvironment ( <var>E</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-privateenvironment-records" title="PrivateEnvironment Records"><span class="secnum">9.2</span> PrivateEnvironment Records</a><ol class="toc"><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-privateenvironment-record-operations" title="PrivateEnvironment Record Operations"><span class="secnum">9.2.1</span> PrivateEnvironment Record Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newprivateenvironment" title="NewPrivateEnvironment ( outerPrivateEnv )"><span class="secnum">9.2.1.1</span> NewPrivateEnvironment ( <var>outerPrivateEnv</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-resolve-private-identifier" title="ResolvePrivateIdentifier ( privateEnv, identifier )"><span class="secnum">9.2.1.2</span> ResolvePrivateIdentifier ( <var>privateEnv</var>, <var>identifier</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-code-realms" title="Realms"><span class="secnum">9.3</span> Realms</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-initializehostdefinedrealm" title="InitializeHostDefinedRealm ( )"><span class="secnum">9.3.1</span> InitializeHostDefinedRealm ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-createintrinsics" title="CreateIntrinsics ( realmRec )"><span class="secnum">9.3.2</span> CreateIntrinsics ( <var>realmRec</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-setdefaultglobalbindings" title="SetDefaultGlobalBindings ( realmRec )"><span class="secnum">9.3.3</span> SetDefaultGlobalBindings ( <var>realmRec</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-execution-contexts" title="Execution Contexts"><span class="secnum">9.4</span> Execution Contexts</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getactivescriptormodule" title="GetActiveScriptOrModule ( )"><span class="secnum">9.4.1</span> GetActiveScriptOrModule ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-resolvebinding" title="ResolveBinding ( name [ , env ] )"><span class="secnum">9.4.2</span> ResolveBinding ( <var>name</var> [ , <var>env</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getthisenvironment" title="GetThisEnvironment ( )"><span class="secnum">9.4.3</span> GetThisEnvironment ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-resolvethisbinding" title="ResolveThisBinding ( )"><span class="secnum">9.4.4</span> ResolveThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getnewtarget" title="GetNewTarget ( )"><span class="secnum">9.4.5</span> GetNewTarget ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getglobalobject" title="GetGlobalObject ( )"><span class="secnum">9.4.6</span> GetGlobalObject ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-jobs" title="Jobs and Host Operations to Enqueue Jobs"><span class="secnum">9.5</span> Jobs and Host Operations to Enqueue Jobs</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-jobcallback-records" title="JobCallback Records"><span class="secnum">9.5.1</span> JobCallback Records</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hostmakejobcallback" title="HostMakeJobCallback ( callback )"><span class="secnum">9.5.2</span> HostMakeJobCallback ( <var>callback</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hostcalljobcallback" title="HostCallJobCallback ( jobCallback, V, argumentsList )"><span class="secnum">9.5.3</span> HostCallJobCallback ( <var>jobCallback</var>, <var>V</var>, <var>argumentsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hostenqueuegenericjob" title="HostEnqueueGenericJob ( job, realm )"><span class="secnum">9.5.4</span> HostEnqueueGenericJob ( <var>job</var>, <var>realm</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hostenqueuepromisejob" title="HostEnqueuePromiseJob ( job, realm )"><span class="secnum">9.5.5</span> HostEnqueuePromiseJob ( <var>job</var>, <var>realm</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hostenqueuetimeoutjob" title="HostEnqueueTimeoutJob ( timeoutJob, realm, milliseconds )"><span class="secnum">9.5.6</span> HostEnqueueTimeoutJob ( <var>timeoutJob</var>, <var>realm</var>, <var>milliseconds</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-agents" title="Agents"><span class="secnum">9.6</span> Agents</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-agentsignifier" title="AgentSignifier ( )"><span class="secnum">9.6.1</span> AgentSignifier ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-agentcansuspend" title="AgentCanSuspend ( )"><span class="secnum">9.6.2</span> AgentCanSuspend ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-IncrementModuleAsyncEvaluationCount" title="IncrementModuleAsyncEvaluationCount ( )"><span class="secnum">9.6.3</span> IncrementModuleAsyncEvaluationCount ( )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-agent-clusters" title="Agent Clusters"><span class="secnum">9.7</span> Agent Clusters</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-forward-progress" title="Forward Progress"><span class="secnum">9.8</span> Forward Progress</a></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-weakref-processing-model" title="Processing Model of WeakRef and FinalizationRegistry Targets"><span class="secnum">9.9</span> Processing Model of WeakRef and FinalizationRegistry Targets</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-weakref-invariants" title="Objectives"><span class="secnum">9.9.1</span> Objectives</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-liveness" title="Liveness"><span class="secnum">9.9.2</span> Liveness</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-weakref-execution" title="Execution"><span class="secnum">9.9.3</span> Execution</a></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-weakref-host-hooks" title="Host Hooks"><span class="secnum">9.9.4</span> Host Hooks</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-host-cleanup-finalization-registry" title="HostEnqueueFinalizationRegistryCleanupJob ( finalizationRegistry )"><span class="secnum">9.9.4.1</span> HostEnqueueFinalizationRegistryCleanupJob ( <var>finalizationRegistry</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-clear-kept-objects" title="ClearKeptObjects ( )"><span class="secnum">9.10</span> ClearKeptObjects ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-addtokeptobjects" title="AddToKeptObjects ( value )"><span class="secnum">9.11</span> AddToKeptObjects ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-cleanup-finalization-registry" title="CleanupFinalizationRegistry ( finalizationRegistry )"><span class="secnum">9.12</span> CleanupFinalizationRegistry ( <var>finalizationRegistry</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-canbeheldweakly" title="CanBeHeldWeakly ( v )"><span class="secnum">9.13</span> CanBeHeldWeakly ( <var>v</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-and-exotic-objects-behaviours" title="Ordinary and Exotic Objects Behaviours"><span class="secnum">10</span> Ordinary and Exotic Objects Behaviours</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots" title="Ordinary Object Internal Methods and Internal Slots"><span class="secnum">10.1</span> Ordinary Object Internal Methods and Internal Slots</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-getprototypeof" title="[[GetPrototypeOf]] ( )"><span class="secnum">10.1.1</span> <var class="field">[[GetPrototypeOf]]</var> ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarygetprototypeof" title="OrdinaryGetPrototypeOf ( O )"><span class="secnum">10.1.1.1</span> OrdinaryGetPrototypeOf ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-setprototypeof-v" title="[[SetPrototypeOf]] ( V )"><span class="secnum">10.1.2</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarysetprototypeof" title="OrdinarySetPrototypeOf ( O, V )"><span class="secnum">10.1.2.1</span> OrdinarySetPrototypeOf ( <var>O</var>, <var>V</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-isextensible" title="[[IsExtensible]] ( )"><span class="secnum">10.1.3</span> <var class="field">[[IsExtensible]]</var> ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryisextensible" title="OrdinaryIsExtensible ( O )"><span class="secnum">10.1.3.1</span> OrdinaryIsExtensible ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-preventextensions" title="[[PreventExtensions]] ( )"><span class="secnum">10.1.4</span> <var class="field">[[PreventExtensions]]</var> ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarypreventextensions" title="OrdinaryPreventExtensions ( O )"><span class="secnum">10.1.4.1</span> OrdinaryPreventExtensions ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-getownproperty-p" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.1.5</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarygetownproperty" title="OrdinaryGetOwnProperty ( O, P )"><span class="secnum">10.1.5.1</span> OrdinaryGetOwnProperty ( <var>O</var>, <var>P</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.1.6</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty" title="OrdinaryDefineOwnProperty ( O, P, Desc )"><span class="secnum">10.1.6.1</span> OrdinaryDefineOwnProperty ( <var>O</var>, <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-iscompatiblepropertydescriptor" title="IsCompatiblePropertyDescriptor ( Extensible, Desc, Current )"><span class="secnum">10.1.6.2</span> IsCompatiblePropertyDescriptor ( <var>Extensible</var>, <var>Desc</var>, <var>Current</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-validateandapplypropertydescriptor" title="ValidateAndApplyPropertyDescriptor ( O, P, extensible, Desc, current )"><span class="secnum">10.1.6.3</span> ValidateAndApplyPropertyDescriptor ( <var>O</var>, <var>P</var>, <var>extensible</var>, <var>Desc</var>, <var>current</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-hasproperty-p" title="[[HasProperty]] ( P )"><span class="secnum">10.1.7</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryhasproperty" title="OrdinaryHasProperty ( O, P )"><span class="secnum">10.1.7.1</span> OrdinaryHasProperty ( <var>O</var>, <var>P</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-get-p-receiver" title="[[Get]] ( P, Receiver )"><span class="secnum">10.1.8</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryget" title="OrdinaryGet ( O, P, Receiver )"><span class="secnum">10.1.8.1</span> OrdinaryGet ( <var>O</var>, <var>P</var>, <var>Receiver</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-set-p-v-receiver" title="[[Set]] ( P, V, Receiver )"><span class="secnum">10.1.9</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryset" title="OrdinarySet ( O, P, V, Receiver )"><span class="secnum">10.1.9.1</span> OrdinarySet ( <var>O</var>, <var>P</var>, <var>V</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarysetwithowndescriptor" title="OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc )"><span class="secnum">10.1.9.2</span> OrdinarySetWithOwnDescriptor ( <var>O</var>, <var>P</var>, <var>V</var>, <var>Receiver</var>, <var>ownDesc</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-delete-p" title="[[Delete]] ( P )"><span class="secnum">10.1.10</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydelete" title="OrdinaryDelete ( O, P )"><span class="secnum">10.1.10.1</span> OrdinaryDelete ( <var>O</var>, <var>P</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-ownpropertykeys" title="[[OwnPropertyKeys]] ( )"><span class="secnum">10.1.11</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryownpropertykeys" title="OrdinaryOwnPropertyKeys ( O )"><span class="secnum">10.1.11.1</span> OrdinaryOwnPropertyKeys ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate" title="OrdinaryObjectCreate ( proto [ , additionalInternalSlotsList ] )"><span class="secnum">10.1.12</span> OrdinaryObjectCreate ( <var>proto</var> [ , <var>additionalInternalSlotsList</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycreatefromconstructor" title="OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )"><span class="secnum">10.1.13</span> OrdinaryCreateFromConstructor ( <var>constructor</var>, <var>intrinsicDefaultProto</var> [ , <var>internalSlotsList</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-getprototypefromconstructor" title="GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )"><span class="secnum">10.1.14</span> GetPrototypeFromConstructor ( <var>constructor</var>, <var>intrinsicDefaultProto</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-requireinternalslot" title="RequireInternalSlot ( O, internalSlot )"><span class="secnum">10.1.15</span> RequireInternalSlot ( <var>O</var>, <var>internalSlot</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ecmascript-function-objects" title="ECMAScript Function Objects"><span class="secnum">10.2</span> ECMAScript Function Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ecmascript-function-objects-call-thisargument-argumentslist" title="[[Call]] ( thisArgument, argumentsList )"><span class="secnum">10.2.1</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-prepareforordinarycall" title="PrepareForOrdinaryCall ( F, newTarget )"><span class="secnum">10.2.1.1</span> PrepareForOrdinaryCall ( <var>F</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycallbindthis" title="OrdinaryCallBindThis ( F, calleeContext, thisArgument )"><span class="secnum">10.2.1.2</span> OrdinaryCallBindThis ( <var>F</var>, <var>calleeContext</var>, <var>thisArgument</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-runtime-semantics-evaluatebody" title="Runtime Semantics: EvaluateBody"><span class="secnum">10.2.1.3</span> RS: EvaluateBody</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycallevaluatebody" title="OrdinaryCallEvaluateBody ( F, argumentsList )"><span class="secnum">10.2.1.4</span> OrdinaryCallEvaluateBody ( <var>F</var>, <var>argumentsList</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ecmascript-function-objects-construct-argumentslist-newtarget" title="[[Construct]] ( argumentsList, newTarget )"><span class="secnum">10.2.2</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate" title="OrdinaryFunctionCreate ( functionPrototype, sourceText, ParameterList, Body, thisMode, env, privateEnv )"><span class="secnum">10.2.3</span> OrdinaryFunctionCreate ( <var>functionPrototype</var>, <var>sourceText</var>, <var>ParameterList</var>, <var>Body</var>, <var>thisMode</var>, <var>env</var>, <var>privateEnv</var> )</a></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-addrestrictedfunctionproperties" title="AddRestrictedFunctionProperties ( F, realm )"><span class="secnum">10.2.4</span> AddRestrictedFunctionProperties ( <var>F</var>, <var>realm</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-%throwtypeerror%" title="%ThrowTypeError% ( )"><span class="secnum">10.2.4.1</span> %ThrowTypeError% ( )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeconstructor" title="MakeConstructor ( F [ , writablePrototype [ , prototype ] ] )"><span class="secnum">10.2.5</span> MakeConstructor ( <var>F</var> [ , <var>writablePrototype</var> [ , <var>prototype</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeclassconstructor" title="MakeClassConstructor ( F )"><span class="secnum">10.2.6</span> MakeClassConstructor ( <var>F</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-makemethod" title="MakeMethod ( F, homeObject )"><span class="secnum">10.2.7</span> MakeMethod ( <var>F</var>, <var>homeObject</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-definemethodproperty" title="DefineMethodProperty ( homeObject, key, closure, enumerable )"><span class="secnum">10.2.8</span> DefineMethodProperty ( <var>homeObject</var>, <var>key</var>, <var>closure</var>, <var>enumerable</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname" title="SetFunctionName ( F, name [ , prefix ] )"><span class="secnum">10.2.9</span> SetFunctionName ( <var>F</var>, <var>name</var> [ , <var>prefix</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionlength" title="SetFunctionLength ( F, length )"><span class="secnum">10.2.10</span> SetFunctionLength ( <var>F</var>, <var>length</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-functiondeclarationinstantiation" title="FunctionDeclarationInstantiation ( func, argumentsList )"><span class="secnum">10.2.11</span> FunctionDeclarationInstantiation ( <var>func</var>, <var>argumentsList</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-function-objects" title="Built-in Function Objects"><span class="secnum">10.3</span> Built-in Function Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-function-objects-call-thisargument-argumentslist" title="[[Call]] ( thisArgument, argumentsList )"><span class="secnum">10.3.1</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-function-objects-construct-argumentslist-newtarget" title="[[Construct]] ( argumentsList, newTarget )"><span class="secnum">10.3.2</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-builtincallorconstruct" title="BuiltinCallOrConstruct ( F, thisArgument, argumentsList, newTarget )"><span class="secnum">10.3.3</span> BuiltinCallOrConstruct ( <var>F</var>, <var>thisArgument</var>, <var>argumentsList</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-createbuiltinfunction" title="CreateBuiltinFunction ( behaviour, length, name, additionalInternalSlotsList [ , realm [ , prototype [ , prefix [ , async ] ] ] ] )"><span class="secnum">10.3.4</span> CreateBuiltinFunction ( <var>behaviour</var>, <var>length</var>, <var>name</var>, <var>additionalInternalSlotsList</var> [ , <var>realm</var> [ , <var>prototype</var> [ , <var>prefix</var> [ , <var>async</var> ] ] ] ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-exotic-object-internal-methods-and-slots" title="Built-in Exotic Object Internal Methods and Slots"><span class="secnum">10.4</span> Built-in Exotic Object Internal Methods and Slots</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-bound-function-exotic-objects" title="Bound Function Exotic Objects"><span class="secnum">10.4.1</span> Bound Function Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-bound-function-exotic-objects-call-thisargument-argumentslist" title="[[Call]] ( thisArgument, argumentsList )"><span class="secnum">10.4.1.1</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-bound-function-exotic-objects-construct-argumentslist-newtarget" title="[[Construct]] ( argumentsList, newTarget )"><span class="secnum">10.4.1.2</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-boundfunctioncreate" title="BoundFunctionCreate ( targetFunction, boundThis, boundArgs )"><span class="secnum">10.4.1.3</span> BoundFunctionCreate ( <var>targetFunction</var>, <var>boundThis</var>, <var>boundArgs</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-array-exotic-objects" title="Array Exotic Objects"><span class="secnum">10.4.2</span> Array Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-array-exotic-objects-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.4.2.1</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraycreate" title="ArrayCreate ( length [ , proto ] )"><span class="secnum">10.4.2.2</span> ArrayCreate ( <var>length</var> [ , <var>proto</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arrayspeciescreate" title="ArraySpeciesCreate ( originalArray, length )"><span class="secnum">10.4.2.3</span> ArraySpeciesCreate ( <var>originalArray</var>, <var>length</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraysetlength" title="ArraySetLength ( A, Desc )"><span class="secnum">10.4.2.4</span> ArraySetLength ( <var>A</var>, <var>Desc</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-string-exotic-objects" title="String Exotic Objects"><span class="secnum">10.4.3</span> String Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-string-exotic-objects-getownproperty-p" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.4.3.1</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-string-exotic-objects-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.4.3.2</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-string-exotic-objects-ownpropertykeys" title="[[OwnPropertyKeys]] ( )"><span class="secnum">10.4.3.3</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-stringcreate" title="StringCreate ( value, prototype )"><span class="secnum">10.4.3.4</span> StringCreate ( <var>value</var>, <var>prototype</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-stringgetownproperty" title="StringGetOwnProperty ( S, P )"><span class="secnum">10.4.3.5</span> StringGetOwnProperty ( <var>S</var>, <var>P</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects" title="Arguments Exotic Objects"><span class="secnum">10.4.4</span> Arguments Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-getownproperty-p" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.4.4.1</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.4.4.2</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-get-p-receiver" title="[[Get]] ( P, Receiver )"><span class="secnum">10.4.4.3</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-set-p-v-receiver" title="[[Set]] ( P, V, Receiver )"><span class="secnum">10.4.4.4</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-delete-p" title="[[Delete]] ( P )"><span class="secnum">10.4.4.5</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-createunmappedargumentsobject" title="CreateUnmappedArgumentsObject ( argumentsList )"><span class="secnum">10.4.4.6</span> CreateUnmappedArgumentsObject ( <var>argumentsList</var> )</a></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-createmappedargumentsobject" title="CreateMappedArgumentsObject ( func, formals, argumentsList, env )"><span class="secnum">10.4.4.7</span> CreateMappedArgumentsObject ( <var>func</var>, <var>formals</var>, <var>argumentsList</var>, <var>env</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-makearggetter" title="MakeArgGetter ( name, env )"><span class="secnum">10.4.4.7.1</span> MakeArgGetter ( <var>name</var>, <var>env</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeargsetter" title="MakeArgSetter ( name, env )"><span class="secnum">10.4.4.7.2</span> MakeArgSetter ( <var>name</var>, <var>env</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-exotic-objects" title="TypedArray Exotic Objects"><span class="secnum">10.4.5</span> TypedArray Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-preventextensions" title="[[PreventExtensions]] ( )"><span class="secnum">10.4.5.1</span> <var class="field">[[PreventExtensions]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-getownproperty" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.4.5.2</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-hasproperty" title="[[HasProperty]] ( P )"><span class="secnum">10.4.5.3</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-defineownproperty" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.4.5.4</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-get" title="[[Get]] ( P, Receiver )"><span class="secnum">10.4.5.5</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-set" title="[[Set]] ( P, V, Receiver )"><span class="secnum">10.4.5.6</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-delete" title="[[Delete]] ( P )"><span class="secnum">10.4.5.7</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-ownpropertykeys" title="[[OwnPropertyKeys]] ( )"><span class="secnum">10.4.5.8</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-with-buffer-witness-records" title="TypedArray With Buffer Witness Records"><span class="secnum">10.4.5.9</span> TypedArray With Buffer Witness Records</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-maketypedarraywithbufferwitnessrecord" title="MakeTypedArrayWithBufferWitnessRecord ( obj, order )"><span class="secnum">10.4.5.10</span> MakeTypedArrayWithBufferWitnessRecord ( <var>obj</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraycreate" title="TypedArrayCreate ( prototype )"><span class="secnum">10.4.5.11</span> TypedArrayCreate ( <var>prototype</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraybytelength" title="TypedArrayByteLength ( taRecord )"><span class="secnum">10.4.5.12</span> TypedArrayByteLength ( <var>taRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraylength" title="TypedArrayLength ( taRecord )"><span class="secnum">10.4.5.13</span> TypedArrayLength ( <var>taRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-istypedarrayoutofbounds" title="IsTypedArrayOutOfBounds ( taRecord )"><span class="secnum">10.4.5.14</span> IsTypedArrayOutOfBounds ( <var>taRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-istypedarrayfixedlength" title="IsTypedArrayFixedLength ( O )"><span class="secnum">10.4.5.15</span> IsTypedArrayFixedLength ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-isvalidintegerindex" title="IsValidIntegerIndex ( O, index )"><span class="secnum">10.4.5.16</span> IsValidIntegerIndex ( <var>O</var>, <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraygetelement" title="TypedArrayGetElement ( O, index )"><span class="secnum">10.4.5.17</span> TypedArrayGetElement ( <var>O</var>, <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraysetelement" title="TypedArraySetElement ( O, index, value )"><span class="secnum">10.4.5.18</span> TypedArraySetElement ( <var>O</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-isarraybufferviewoutofbounds" title="IsArrayBufferViewOutOfBounds ( O )"><span class="secnum">10.4.5.19</span> IsArrayBufferViewOutOfBounds ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects" title="Module Namespace Exotic Objects"><span class="secnum">10.4.6</span> Module Namespace Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-getprototypeof" title="[[GetPrototypeOf]] ( )"><span class="secnum">10.4.6.1</span> <var class="field">[[GetPrototypeOf]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-setprototypeof-v" title="[[SetPrototypeOf]] ( V )"><span class="secnum">10.4.6.2</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-isextensible" title="[[IsExtensible]] ( )"><span class="secnum">10.4.6.3</span> <var class="field">[[IsExtensible]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-preventextensions" title="[[PreventExtensions]] ( )"><span class="secnum">10.4.6.4</span> <var class="field">[[PreventExtensions]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-getownproperty-p" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.4.6.5</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.4.6.6</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-hasproperty-p" title="[[HasProperty]] ( P )"><span class="secnum">10.4.6.7</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-get-p-receiver" title="[[Get]] ( P, Receiver )"><span class="secnum">10.4.6.8</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-set-p-v-receiver" title="[[Set]] ( P, V, Receiver )"><span class="secnum">10.4.6.9</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-delete-p" title="[[Delete]] ( P )"><span class="secnum">10.4.6.10</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-ownpropertykeys" title="[[OwnPropertyKeys]] ( )"><span class="secnum">10.4.6.11</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-modulenamespacecreate" title="ModuleNamespaceCreate ( module, exports )"><span class="secnum">10.4.6.12</span> ModuleNamespaceCreate ( <var>module</var>, <var>exports</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-immutable-prototype-exotic-objects" title="Immutable Prototype Exotic Objects"><span class="secnum">10.4.7</span> Immutable Prototype Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-immutable-prototype-exotic-objects-setprototypeof-v" title="[[SetPrototypeOf]] ( V )"><span class="secnum">10.4.7.1</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-set-immutable-prototype" title="SetImmutablePrototype ( O, V )"><span class="secnum">10.4.7.2</span> SetImmutablePrototype ( <var>O</var>, <var>V</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots" title="Proxy Object Internal Methods and Internal Slots"><span class="secnum">10.5</span> Proxy Object Internal Methods and Internal Slots</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof" title="[[GetPrototypeOf]] ( )"><span class="secnum">10.5.1</span> <var class="field">[[GetPrototypeOf]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v" title="[[SetPrototypeOf]] ( V )"><span class="secnum">10.5.2</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-isextensible" title="[[IsExtensible]] ( )"><span class="secnum">10.5.3</span> <var class="field">[[IsExtensible]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-preventextensions" title="[[PreventExtensions]] ( )"><span class="secnum">10.5.4</span> <var class="field">[[PreventExtensions]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.5.5</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.5.6</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p" title="[[HasProperty]] ( P )"><span class="secnum">10.5.7</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver" title="[[Get]] ( P, Receiver )"><span class="secnum">10.5.8</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver" title="[[Set]] ( P, V, Receiver )"><span class="secnum">10.5.9</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-delete-p" title="[[Delete]] ( P )"><span class="secnum">10.5.10</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys" title="[[OwnPropertyKeys]] ( )"><span class="secnum">10.5.11</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist" title="[[Call]] ( thisArgument, argumentsList )"><span class="secnum">10.5.12</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget" title="[[Construct]] ( argumentsList, newTarget )"><span class="secnum">10.5.13</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy" title="ValidateNonRevokedProxy ( proxy )"><span class="secnum">10.5.14</span> ValidateNonRevokedProxy ( <var>proxy</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxycreate" title="ProxyCreate ( target, handler )"><span class="secnum">10.5.15</span> ProxyCreate ( <var>target</var>, <var>handler</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-source-code.html#sec-ecmascript-language-source-code" title="ECMAScript Language: Source Text"><span class="secnum">11</span> ECMAScript Language: Source Text</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-source-code.html#sec-source-text" title="Source Text"><span class="secnum">11.1</span> Source Text</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-utf16encodecodepoint" title="Static Semantics: UTF16EncodeCodePoint ( cp )"><span class="secnum">11.1.1</span> SS: UTF16EncodeCodePoint ( <var>cp</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-codepointstostring" title="Static Semantics: CodePointsToString ( text )"><span class="secnum">11.1.2</span> SS: CodePointsToString ( <var>text</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-utf16decodesurrogatepair" title="Static Semantics: UTF16SurrogatePairToCodePoint ( lead, trail )"><span class="secnum">11.1.3</span> SS: UTF16SurrogatePairToCodePoint ( <var>lead</var>, <var>trail</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-codepointat" title="Static Semantics: CodePointAt ( string, position )"><span class="secnum">11.1.4</span> SS: CodePointAt ( <var>string</var>, <var>position</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-stringtocodepoints" title="Static Semantics: StringToCodePoints ( string )"><span class="secnum">11.1.5</span> SS: StringToCodePoints ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-parsetext" title="Static Semantics: ParseText ( sourceText, goalSymbol )"><span class="secnum">11.1.6</span> SS: ParseText ( <var>sourceText</var>, <var>goalSymbol</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-source-code.html#sec-types-of-source-code" title="Types of Source Code"><span class="secnum">11.2</span> Types of Source Code</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-directive-prologues-and-the-use-strict-directive" title="Directive Prologues and the Use Strict Directive"><span class="secnum">11.2.1</span> Directive Prologues and the Use Strict Directive</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-source-code.html#sec-strict-mode-code" title="Strict Mode Code"><span class="secnum">11.2.2</span> Strict Mode Code</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-isstrict" title="Static Semantics: IsStrict ( node )"><span class="secnum">11.2.2.1</span> SS: IsStrict ( <var>node</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-non-ecmascript-functions" title="Non-ECMAScript Functions"><span class="secnum">11.2.3</span> Non-ECMAScript Functions</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-ecmascript-language-lexical-grammar" title="ECMAScript Language: Lexical Grammar"><span class="secnum">12</span> ECMAScript Language: Lexical Grammar</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-unicode-format-control-characters" title="Unicode Format-Control Characters"><span class="secnum">12.1</span> Unicode Format-Control Characters</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-white-space" title="White Space"><span class="secnum">12.2</span> White Space</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-line-terminators" title="Line Terminators"><span class="secnum">12.3</span> Line Terminators</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-comments" title="Comments"><span class="secnum">12.4</span> Comments</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-hashbang" title="Hashbang Comments"><span class="secnum">12.5</span> Hashbang Comments</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-tokens" title="Tokens"><span class="secnum">12.6</span> Tokens</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-names-and-keywords" title="Names and Keywords"><span class="secnum">12.7</span> Names and Keywords</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-identifier-names" title="Identifier Names"><span class="secnum">12.7.1</span> Identifier Names</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-identifier-names-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">12.7.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-identifiercodepoints" title="Static Semantics: IdentifierCodePoints"><span class="secnum">12.7.1.2</span> SS: IdentifierCodePoints</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-identifiercodepoint" title="Static Semantics: IdentifierCodePoint"><span class="secnum">12.7.1.3</span> SS: IdentifierCodePoint</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-keywords-and-reserved-words" title="Keywords and Reserved Words"><span class="secnum">12.7.2</span> Keywords and Reserved Words</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-punctuators" title="Punctuators"><span class="secnum">12.8</span> Punctuators</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-ecmascript-language-lexical-grammar-literals" title="Literals"><span class="secnum">12.9</span> Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-null-literals" title="Null Literals"><span class="secnum">12.9.1</span> Null Literals</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-boolean-literals" title="Boolean Literals"><span class="secnum">12.9.2</span> Boolean Literals</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-literals-numeric-literals" title="Numeric Literals"><span class="secnum">12.9.3</span> Numeric Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-numeric-literals-early-errors" title="Static Semantics: Early Errors"><span class="secnum">12.9.3.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-mv" title="Static Semantics: MV"><span class="secnum">12.9.3.2</span> SS: MV</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-numericvalue" title="Static Semantics: NumericValue"><span class="secnum">12.9.3.3</span> SS: NumericValue</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-literals-string-literals" title="String Literals"><span class="secnum">12.9.4</span> String Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-string-literals-early-errors" title="Static Semantics: Early Errors"><span class="secnum">12.9.4.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv" title="Static Semantics: SV"><span class="secnum">12.9.4.2</span> SS: SV</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-string-literals-static-semantics-mv" title="Static Semantics: MV"><span class="secnum">12.9.4.3</span> SS: MV</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-literals-regular-expression-literals" title="Regular Expression Literals"><span class="secnum">12.9.5</span> Regular Expression Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-bodytext" title="Static Semantics: BodyText"><span class="secnum">12.9.5.1</span> SS: BodyText</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-flagtext" title="Static Semantics: FlagText"><span class="secnum">12.9.5.2</span> SS: FlagText</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-template-literal-lexical-components" title="Template Literal Lexical Components"><span class="secnum">12.9.6</span> Template Literal Lexical Components</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-tv" title="Static Semantics: TV"><span class="secnum">12.9.6.1</span> SS: TV</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-trv" title="Static Semantics: TRV"><span class="secnum">12.9.6.2</span> SS: TRV</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-automatic-semicolon-insertion" title="Automatic Semicolon Insertion"><span class="secnum">12.10</span> Automatic Semicolon Insertion</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-rules-of-automatic-semicolon-insertion" title="Rules of Automatic Semicolon Insertion"><span class="secnum">12.10.1</span> Rules of Automatic Semicolon Insertion</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-examples-of-automatic-semicolon-insertion" title="Examples of Automatic Semicolon Insertion"><span class="secnum">12.10.2</span> Examples of Automatic Semicolon Insertion</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-interesting-cases-of-automatic-semicolon-insertion" title="Interesting Cases of Automatic Semicolon Insertion"><span class="secnum">12.10.3</span> Interesting Cases of Automatic Semicolon Insertion</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-asi-interesting-cases-in-statement-lists" title="Interesting Cases of Automatic Semicolon Insertion in Statement Lists"><span class="secnum">12.10.3.1</span> Interesting Cases of Automatic Semicolon Insertion in Statement Lists</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-asi-cases-with-no-lineterminator-here" title="Cases of Automatic Semicolon Insertion and “[no LineTerminator here]”"><span class="secnum">12.10.3.2</span> Cases of Automatic Semicolon Insertion and “[no <emu-nt>LineTerminator</emu-nt> here]”</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-no-lineterminator-here-automatic-semicolon-insertion-list" title="List of Grammar Productions with Optional Operands and “[no LineTerminator here]”"><span class="secnum">12.10.3.2.1</span> List of Grammar Productions with Optional Operands and “[no <emu-nt>LineTerminator</emu-nt> here]”</a></li></ol></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-ecmascript-language-expressions" title="ECMAScript Language: Expressions"><span class="secnum">13</span> ECMAScript Language: Expressions</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-identifiers" title="Identifiers"><span class="secnum">13.1</span> Identifiers</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-identifiers-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue" title="Static Semantics: StringValue"><span class="secnum">13.1.2</span> SS: StringValue</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-identifiers-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.1.3</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-primary-expression" title="Primary Expression"><span class="secnum">13.2</span> Primary Expression</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-this-keyword" title="The this Keyword"><span class="secnum">13.2.1</span> The <code>this</code> Keyword</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-this-keyword-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.1.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-identifier-reference" title="Identifier Reference"><span class="secnum">13.2.2</span> Identifier Reference</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-primary-expression-literals" title="Literals"><span class="secnum">13.2.3</span> Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-literals-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.3.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-array-initializer" title="Array Initializer"><span class="secnum">13.2.4</span> Array Initializer</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" title="Runtime Semantics: ArrayAccumulation"><span class="secnum">13.2.4.1</span> RS: ArrayAccumulation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-array-initializer-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.4.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-object-initializer" title="Object Initializer"><span class="secnum">13.2.5</span> Object Initializer</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-object-initializer-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.2.5.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-static-semantics-iscomputedpropertykey" title="Static Semantics: IsComputedPropertyKey"><span class="secnum">13.2.5.2</span> SS: IsComputedPropertyKey</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-static-semantics-propertynamelist" title="Static Semantics: PropertyNameList"><span class="secnum">13.2.5.3</span> SS: PropertyNameList</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-object-initializer-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.5.4</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-propertydefinitionevaluation" title="Runtime Semantics: PropertyDefinitionEvaluation"><span class="secnum">13.2.5.5</span> RS: PropertyDefinitionEvaluation</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-function-defining-expressions" title="Function Defining Expressions"><span class="secnum">13.2.6</span> Function Defining Expressions</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-primary-expression-regular-expression-literals" title="Regular Expression Literals"><span class="secnum">13.2.7</span> Regular Expression Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-primary-expression-regular-expression-literals-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.2.7.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-isvalidregularexpressionliteral" title="Static Semantics: IsValidRegularExpressionLiteral ( literal )"><span class="secnum">13.2.7.2</span> SS: IsValidRegularExpressionLiteral ( <var>literal</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-regular-expression-literals-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.7.3</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-template-literals" title="Template Literals"><span class="secnum">13.2.8</span> Template Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-static-semantics-template-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.2.8.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-static-semantics-templatestrings" title="Static Semantics: TemplateStrings"><span class="secnum">13.2.8.2</span> SS: TemplateStrings</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-templatestring" title="Static Semantics: TemplateString ( templateToken, raw )"><span class="secnum">13.2.8.3</span> SS: TemplateString ( <var>templateToken</var>, <var>raw</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-gettemplateobject" title="GetTemplateObject ( templateLiteral )"><span class="secnum">13.2.8.4</span> GetTemplateObject ( <var>templateLiteral</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-substitutionevaluation" title="Runtime Semantics: SubstitutionEvaluation"><span class="secnum">13.2.8.5</span> RS: SubstitutionEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-template-literals-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.8.6</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-grouping-operator" title="The Grouping Operator"><span class="secnum">13.2.9</span> The Grouping Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-grouping-operator-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.2.9.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-grouping-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.9.2</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-left-hand-side-expressions" title="Left-Hand-Side Expressions"><span class="secnum">13.3</span> Left-Hand-Side Expressions</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-static-semantics" title="Static Semantics"><span class="secnum">13.3.1</span> Static Semantics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-left-hand-side-expressions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.3.1.1</span> SS: Early Errors</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-property-accessors" title="Property Accessors"><span class="secnum">13.3.2</span> Property Accessors</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-property-accessors-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.2.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluate-property-access-with-expression-key" title="EvaluatePropertyAccessWithExpressionKey ( baseValue, expression, strict )"><span class="secnum">13.3.3</span> EvaluatePropertyAccessWithExpressionKey ( <var>baseValue</var>, <var>expression</var>, <var>strict</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluate-property-access-with-identifier-key" title="EvaluatePropertyAccessWithIdentifierKey ( baseValue, identifierName, strict )"><span class="secnum">13.3.4</span> EvaluatePropertyAccessWithIdentifierKey ( <var>baseValue</var>, <var>identifierName</var>, <var>strict</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-new-operator" title="The new Operator"><span class="secnum">13.3.5</span> The <code>new</code> Operator</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-new-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.5.1</span> RS: Evaluation</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluatenew" title="EvaluateNew ( constructExpr, arguments )"><span class="secnum">13.3.5.1.1</span> EvaluateNew ( <var>constructExpr</var>, <var>arguments</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-function-calls" title="Function Calls"><span class="secnum">13.3.6</span> Function Calls</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-function-calls-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.6.1</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluatecall" title="EvaluateCall ( func, ref, arguments, tailPosition )"><span class="secnum">13.3.6.2</span> EvaluateCall ( <var>func</var>, <var>ref</var>, <var>arguments</var>, <var>tailPosition</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-super-keyword" title="The super Keyword"><span class="secnum">13.3.7</span> The <code>super</code> Keyword</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-super-keyword-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.7.1</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-getsuperconstructor" title="GetSuperConstructor ( )"><span class="secnum">13.3.7.2</span> GetSuperConstructor ( )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-makesuperpropertyreference" title="MakeSuperPropertyReference ( actualThis, propertyKey, strict )"><span class="secnum">13.3.7.3</span> MakeSuperPropertyReference ( <var>actualThis</var>, <var>propertyKey</var>, <var>strict</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-argument-lists" title="Argument Lists"><span class="secnum">13.3.8</span> Argument Lists</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-argumentlistevaluation" title="Runtime Semantics: ArgumentListEvaluation"><span class="secnum">13.3.8.1</span> RS: ArgumentListEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-optional-chains" title="Optional Chains"><span class="secnum">13.3.9</span> Optional Chains</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-optional-chaining-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.9.1</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-optional-chaining-chain-evaluation" title="Runtime Semantics: ChainEvaluation"><span class="secnum">13.3.9.2</span> RS: ChainEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-import-calls" title="Import Calls"><span class="secnum">13.3.10</span> Import Calls</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-import-call-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.10.1</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluate-import-call" title="EvaluateImportCall ( specifierExpression [ , optionsExpression ] )"><span class="secnum">13.3.10.2</span> EvaluateImportCall ( <var>specifierExpression</var> [ , <var>optionsExpression</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-ContinueDynamicImport" title="ContinueDynamicImport ( promiseCapability, moduleCompletion )"><span class="secnum">13.3.10.3</span> ContinueDynamicImport ( <var>promiseCapability</var>, <var>moduleCompletion</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-tagged-templates" title="Tagged Templates"><span class="secnum">13.3.11</span> Tagged Templates</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-tagged-templates-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.11.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-meta-properties" title="Meta Properties"><span class="secnum">13.3.12</span> Meta Properties</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-meta-properties-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.12.1</span> RS: Evaluation</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-hostgetimportmetaproperties" title="HostGetImportMetaProperties ( moduleRecord )"><span class="secnum">13.3.12.1.1</span> HostGetImportMetaProperties ( <var>moduleRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-hostfinalizeimportmeta" title="HostFinalizeImportMeta ( importMeta, moduleRecord )"><span class="secnum">13.3.12.1.2</span> HostFinalizeImportMeta ( <var>importMeta</var>, <var>moduleRecord</var> )</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-update-expressions" title="Update Expressions"><span class="secnum">13.4</span> Update Expressions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-update-expressions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.4.1</span> SS: Early Errors</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-postfix-increment-operator" title="Postfix Increment Operator"><span class="secnum">13.4.2</span> Postfix Increment Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-postfix-increment-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.4.2.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-postfix-decrement-operator" title="Postfix Decrement Operator"><span class="secnum">13.4.3</span> Postfix Decrement Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-postfix-decrement-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.4.3.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-prefix-increment-operator" title="Prefix Increment Operator"><span class="secnum">13.4.4</span> Prefix Increment Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-prefix-increment-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.4.4.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-prefix-decrement-operator" title="Prefix Decrement Operator"><span class="secnum">13.4.5</span> Prefix Decrement Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-prefix-decrement-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.4.5.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-unary-operators" title="Unary Operators"><span class="secnum">13.5</span> Unary Operators</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-delete-operator" title="The delete Operator"><span class="secnum">13.5.1</span> The <code>delete</code> Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-delete-operator-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.5.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-delete-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.1.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-void-operator" title="The void Operator"><span class="secnum">13.5.2</span> The <code>void</code> Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-void-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.2.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-typeof-operator" title="The typeof Operator"><span class="secnum">13.5.3</span> The <code>typeof</code> Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-typeof-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.3.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-unary-plus-operator" title="Unary + Operator"><span class="secnum">13.5.4</span> Unary <code>+</code> Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-unary-plus-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.4.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-unary-minus-operator" title="Unary - Operator"><span class="secnum">13.5.5</span> Unary <code>-</code> Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-unary-minus-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.5.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-bitwise-not-operator" title="Bitwise NOT Operator ( ~ )"><span class="secnum">13.5.6</span> Bitwise NOT Operator ( <code>~</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-bitwise-not-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.6.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-logical-not-operator" title="Logical NOT Operator ( ! )"><span class="secnum">13.5.7</span> Logical NOT Operator ( <code>!</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-logical-not-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.7.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-exp-operator" title="Exponentiation Operator"><span class="secnum">13.6</span> Exponentiation Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-exp-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.6.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-multiplicative-operators" title="Multiplicative Operators"><span class="secnum">13.7</span> Multiplicative Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-multiplicative-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.7.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-additive-operators" title="Additive Operators"><span class="secnum">13.8</span> Additive Operators</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-addition-operator-plus" title="The Addition Operator ( + )"><span class="secnum">13.8.1</span> The Addition Operator ( <code>+</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-addition-operator-plus-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.8.1.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-subtraction-operator-minus" title="The Subtraction Operator ( - )"><span class="secnum">13.8.2</span> The Subtraction Operator ( <code>-</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-subtraction-operator-minus-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.8.2.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-bitwise-shift-operators" title="Bitwise Shift Operators"><span class="secnum">13.9</span> Bitwise Shift Operators</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-left-shift-operator" title="The Left Shift Operator ( << )"><span class="secnum">13.9.1</span> The Left Shift Operator ( <code><<</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-left-shift-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.9.1.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-signed-right-shift-operator" title="The Signed Right Shift Operator ( >> )"><span class="secnum">13.9.2</span> The Signed Right Shift Operator ( <code>>></code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-signed-right-shift-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.9.2.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-unsigned-right-shift-operator" title="The Unsigned Right Shift Operator ( >>> )"><span class="secnum">13.9.3</span> The Unsigned Right Shift Operator ( <code>>>></code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-unsigned-right-shift-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.9.3.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-relational-operators" title="Relational Operators"><span class="secnum">13.10</span> Relational Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-relational-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.10.1</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-instanceofoperator" title="InstanceofOperator ( V, target )"><span class="secnum">13.10.2</span> InstanceofOperator ( <var>V</var>, <var>target</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-equality-operators" title="Equality Operators"><span class="secnum">13.11</span> Equality Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-equality-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.11.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-binary-bitwise-operators" title="Binary Bitwise Operators"><span class="secnum">13.12</span> Binary Bitwise Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-binary-bitwise-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.12.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-binary-logical-operators" title="Binary Logical Operators"><span class="secnum">13.13</span> Binary Logical Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-binary-logical-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.13.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-conditional-operator" title="Conditional Operator ( ? : )"><span class="secnum">13.14</span> Conditional Operator ( <code>? :</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-conditional-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.14.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-assignment-operators" title="Assignment Operators"><span class="secnum">13.15</span> Assignment Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-assignment-operators-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.15.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-assignment-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.15.2</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-applystringornumericbinaryoperator" title="ApplyStringOrNumericBinaryOperator ( lVal, opText, rVal )"><span class="secnum">13.15.3</span> ApplyStringOrNumericBinaryOperator ( <var>lVal</var>, <var>opText</var>, <var>rVal</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluatestringornumericbinaryexpression" title="EvaluateStringOrNumericBinaryExpression ( leftOperand, opText, rightOperand )"><span class="secnum">13.15.4</span> EvaluateStringOrNumericBinaryExpression ( <var>leftOperand</var>, <var>opText</var>, <var>rightOperand</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-destructuring-assignment" title="Destructuring Assignment"><span class="secnum">13.15.5</span> Destructuring Assignment</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-destructuring-assignment-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.15.5.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-destructuringassignmentevaluation" title="Runtime Semantics: DestructuringAssignmentEvaluation"><span class="secnum">13.15.5.2</span> RS: DestructuringAssignmentEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-propertydestructuringassignmentevaluation" title="Runtime Semantics: PropertyDestructuringAssignmentEvaluation"><span class="secnum">13.15.5.3</span> RS: PropertyDestructuringAssignmentEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-restdestructuringassignmentevaluation" title="Runtime Semantics: RestDestructuringAssignmentEvaluation"><span class="secnum">13.15.5.4</span> RS: RestDestructuringAssignmentEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" title="Runtime Semantics: IteratorDestructuringAssignmentEvaluation"><span class="secnum">13.15.5.5</span> RS: IteratorDestructuringAssignmentEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-keyeddestructuringassignmentevaluation" title="Runtime Semantics: KeyedDestructuringAssignmentEvaluation"><span class="secnum">13.15.5.6</span> RS: KeyedDestructuringAssignmentEvaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-comma-operator" title="Comma Operator ( , )"><span class="secnum">13.16</span> Comma Operator ( <code>,</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-comma-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.16.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-ecmascript-language-statements-and-declarations" title="ECMAScript Language: Statements and Declarations"><span class="secnum">14</span> ECMAScript Language: Statements and Declarations</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-statement-semantics" title="Statement Semantics"><span class="secnum">14.1</span> Statement Semantics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-statement-semantics-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.1.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-block" title="Block"><span class="secnum">14.2</span> Block</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-block-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.2.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-block-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.2.2</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-blockdeclarationinstantiation" title="BlockDeclarationInstantiation ( code, env )"><span class="secnum">14.2.3</span> BlockDeclarationInstantiation ( <var>code</var>, <var>env</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-declarations-and-the-variable-statement" title="Declarations and the Variable Statement"><span class="secnum">14.3</span> Declarations and the Variable Statement</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-let-and-const-declarations" title="Let and Const Declarations"><span class="secnum">14.3.1</span> Let and Const Declarations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-let-and-const-declarations-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.3.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-let-and-const-declarations-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.3.1.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-variable-statement" title="Variable Statement"><span class="secnum">14.3.2</span> Variable Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-variable-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.3.2.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-destructuring-binding-patterns" title="Destructuring Binding Patterns"><span class="secnum">14.3.3</span> Destructuring Binding Patterns</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-destructuring-binding-patterns-runtime-semantics-propertybindinginitialization" title="Runtime Semantics: PropertyBindingInitialization"><span class="secnum">14.3.3.1</span> RS: PropertyBindingInitialization</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-destructuring-binding-patterns-runtime-semantics-restbindinginitialization" title="Runtime Semantics: RestBindingInitialization"><span class="secnum">14.3.3.2</span> RS: RestBindingInitialization</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-keyedbindinginitialization" title="Runtime Semantics: KeyedBindingInitialization"><span class="secnum">14.3.3.3</span> RS: KeyedBindingInitialization</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-empty-statement" title="Empty Statement"><span class="secnum">14.4</span> Empty Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-empty-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.4.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-expression-statement" title="Expression Statement"><span class="secnum">14.5</span> Expression Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-expression-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.5.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-if-statement" title="The if Statement"><span class="secnum">14.6</span> The <code>if</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-if-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.6.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-if-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.6.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-iteration-statements" title="Iteration Statements"><span class="secnum">14.7</span> Iteration Statements</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-iteration-statements-semantics" title="Semantics"><span class="secnum">14.7.1</span> Semantics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-loopcontinues" title="LoopContinues ( completion, labelSet )"><span class="secnum">14.7.1.1</span> LoopContinues ( <var>completion</var>, <var>labelSet</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-loopevaluation" title="Runtime Semantics: LoopEvaluation"><span class="secnum">14.7.1.2</span> RS: LoopEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-do-while-statement" title="The do-while Statement"><span class="secnum">14.7.2</span> The <code>do</code>-<code>while</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-do-while-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.7.2.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-dowhileloopevaluation" title="Runtime Semantics: DoWhileLoopEvaluation"><span class="secnum">14.7.2.2</span> RS: DoWhileLoopEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-while-statement" title="The while Statement"><span class="secnum">14.7.3</span> The <code>while</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-while-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.7.3.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-whileloopevaluation" title="Runtime Semantics: WhileLoopEvaluation"><span class="secnum">14.7.3.2</span> RS: WhileLoopEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-for-statement" title="The for Statement"><span class="secnum">14.7.4</span> The <code>for</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-for-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.7.4.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forloopevaluation" title="Runtime Semantics: ForLoopEvaluation"><span class="secnum">14.7.4.2</span> RS: ForLoopEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-forbodyevaluation" title="ForBodyEvaluation ( test, increment, stmt, perIterationBindings, labelSet )"><span class="secnum">14.7.4.3</span> ForBodyEvaluation ( <var>test</var>, <var>increment</var>, <var>stmt</var>, <var>perIterationBindings</var>, <var>labelSet</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-createperiterationenvironment" title="CreatePerIterationEnvironment ( perIterationBindings )"><span class="secnum">14.7.4.4</span> CreatePerIterationEnvironment ( <var>perIterationBindings</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-for-in-and-for-of-statements" title="The for-in, for-of, and for-await-of Statements"><span class="secnum">14.7.5</span> The <code>for</code>-<code>in</code>, <code>for</code>-<code>of</code>, and <code>for</code>-<code>await</code>-<code>of</code> Statements</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-for-in-and-for-of-statements-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.7.5.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-static-semantics-isdestructuring" title="Static Semantics: IsDestructuring"><span class="secnum">14.7.5.2</span> SS: IsDestructuring</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-fordeclarationbindinginitialization" title="Runtime Semantics: ForDeclarationBindingInitialization"><span class="secnum">14.7.5.3</span> RS: ForDeclarationBindingInitialization</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-fordeclarationbindinginstantiation" title="Runtime Semantics: ForDeclarationBindingInstantiation"><span class="secnum">14.7.5.4</span> RS: ForDeclarationBindingInstantiation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forinofloopevaluation" title="Runtime Semantics: ForInOfLoopEvaluation"><span class="secnum">14.7.5.5</span> RS: ForInOfLoopEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forinofheadevaluation" title="ForIn/OfHeadEvaluation ( uninitializedBoundNames, expr, iterationKind )"><span class="secnum">14.7.5.6</span> ForIn/OfHeadEvaluation ( <var>uninitializedBoundNames</var>, <var>expr</var>, <var>iterationKind</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset" title="ForIn/OfBodyEvaluation ( lhs, stmt, iteratorRecord, iterationKind, lhsKind, labelSet [ , iteratorKind ] )"><span class="secnum">14.7.5.7</span> ForIn/OfBodyEvaluation ( <var>lhs</var>, <var>stmt</var>, <var>iteratorRecord</var>, <var>iterationKind</var>, <var>lhsKind</var>, <var>labelSet</var> [ , <var>iteratorKind</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-for-in-and-for-of-statements-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.7.5.8</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-enumerate-object-properties" title="EnumerateObjectProperties ( O )"><span class="secnum">14.7.5.9</span> EnumerateObjectProperties ( <var>O</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-for-in-iterator-objects" title="For-In Iterator Objects"><span class="secnum">14.7.5.10</span> For-In Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-createforiniterator" title="CreateForInIterator ( object )"><span class="secnum">14.7.5.10.1</span> CreateForInIterator ( <var>object</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-%foriniteratorprototype%-object" title="The %ForInIteratorPrototype% Object"><span class="secnum">14.7.5.10.2</span> The %ForInIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-%foriniteratorprototype%.next" title="%ForInIteratorPrototype%.next ( )"><span class="secnum">14.7.5.10.2.1</span> %ForInIteratorPrototype%.next ( )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-properties-of-for-in-iterator-instances" title="Properties of For-In Iterator Instances"><span class="secnum">14.7.5.10.3</span> Properties of For-In Iterator Instances</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-continue-statement" title="The continue Statement"><span class="secnum">14.8</span> The <code>continue</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-continue-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.8.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-continue-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.8.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-break-statement" title="The break Statement"><span class="secnum">14.9</span> The <code>break</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-break-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.9.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-break-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.9.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-return-statement" title="The return Statement"><span class="secnum">14.10</span> The <code>return</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-return-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.10.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-with-statement" title="The with Statement"><span class="secnum">14.11</span> The <code>with</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-with-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.11.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-with-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.11.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-switch-statement" title="The switch Statement"><span class="secnum">14.12</span> The <code>switch</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-switch-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.12.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-caseblockevaluation" title="Runtime Semantics: CaseBlockEvaluation"><span class="secnum">14.12.2</span> RS: CaseBlockEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-caseclauseisselected" title="CaseClauseIsSelected ( C, input )"><span class="secnum">14.12.3</span> CaseClauseIsSelected ( <var>C</var>, <var>input</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-switch-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.12.4</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-labelled-statements" title="Labelled Statements"><span class="secnum">14.13</span> Labelled Statements</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-labelled-statements-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.13.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-islabelledfunction" title="Static Semantics: IsLabelledFunction ( stmt )"><span class="secnum">14.13.2</span> SS: IsLabelledFunction ( <var>stmt</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-labelled-statements-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.13.3</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-labelledevaluation" title="Runtime Semantics: LabelledEvaluation"><span class="secnum">14.13.4</span> RS: LabelledEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-throw-statement" title="The throw Statement"><span class="secnum">14.14</span> The <code>throw</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-throw-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.14.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-try-statement" title="The try Statement"><span class="secnum">14.15</span> The <code>try</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-try-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.15.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-catchclauseevaluation" title="Runtime Semantics: CatchClauseEvaluation"><span class="secnum">14.15.2</span> RS: CatchClauseEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-try-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.15.3</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-debugger-statement" title="The debugger Statement"><span class="secnum">14.16</span> The <code>debugger</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-debugger-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.16.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-ecmascript-language-functions-and-classes" title="ECMAScript Language: Functions and Classes"><span class="secnum">15</span> ECMAScript Language: Functions and Classes</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-parameter-lists" title="Parameter Lists"><span class="secnum">15.1</span> Parameter Lists</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-parameter-lists-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression" title="Static Semantics: ContainsExpression"><span class="secnum">15.1.2</span> SS: ContainsExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist" title="Static Semantics: IsSimpleParameterList"><span class="secnum">15.1.3</span> SS: IsSimpleParameterList</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasinitializer" title="Static Semantics: HasInitializer"><span class="secnum">15.1.4</span> SS: HasInitializer</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-expectedargumentcount" title="Static Semantics: ExpectedArgumentCount"><span class="secnum">15.1.5</span> SS: ExpectedArgumentCount</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-function-definitions" title="Function Definitions"><span class="secnum">15.2</span> Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.2.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-functionbodycontainsusestrict" title="Static Semantics: FunctionBodyContainsUseStrict"><span class="secnum">15.2.2</span> SS: FunctionBodyContainsUseStrict</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluatefunctionbody" title="Runtime Semantics: EvaluateFunctionBody"><span class="secnum">15.2.3</span> RS: EvaluateFunctionBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateordinaryfunctionobject" title="Runtime Semantics: InstantiateOrdinaryFunctionObject"><span class="secnum">15.2.4</span> RS: InstantiateOrdinaryFunctionObject</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateordinaryfunctionexpression" title="Runtime Semantics: InstantiateOrdinaryFunctionExpression"><span class="secnum">15.2.5</span> RS: InstantiateOrdinaryFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-function-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.2.6</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-arrow-function-definitions" title="Arrow Function Definitions"><span class="secnum">15.3</span> Arrow Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-arrow-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.3.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-concisebodycontainsusestrict" title="Static Semantics: ConciseBodyContainsUseStrict"><span class="secnum">15.3.2</span> SS: ConciseBodyContainsUseStrict</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateconcisebody" title="Runtime Semantics: EvaluateConciseBody"><span class="secnum">15.3.3</span> RS: EvaluateConciseBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiatearrowfunctionexpression" title="Runtime Semantics: InstantiateArrowFunctionExpression"><span class="secnum">15.3.4</span> RS: InstantiateArrowFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-arrow-function-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.3.5</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-method-definitions" title="Method Definitions"><span class="secnum">15.4</span> Method Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-method-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.4.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasdirectsuper" title="Static Semantics: HasDirectSuper"><span class="secnum">15.4.2</span> SS: HasDirectSuper</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-specialmethod" title="Static Semantics: SpecialMethod"><span class="secnum">15.4.3</span> SS: SpecialMethod</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-definemethod" title="Runtime Semantics: DefineMethod"><span class="secnum">15.4.4</span> RS: DefineMethod</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-methoddefinitionevaluation" title="Runtime Semantics: MethodDefinitionEvaluation"><span class="secnum">15.4.5</span> RS: MethodDefinitionEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-generator-function-definitions" title="Generator Function Definitions"><span class="secnum">15.5</span> Generator Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-generator-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.5.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluategeneratorbody" title="Runtime Semantics: EvaluateGeneratorBody"><span class="secnum">15.5.2</span> RS: EvaluateGeneratorBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiategeneratorfunctionobject" title="Runtime Semantics: InstantiateGeneratorFunctionObject"><span class="secnum">15.5.3</span> RS: InstantiateGeneratorFunctionObject</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiategeneratorfunctionexpression" title="Runtime Semantics: InstantiateGeneratorFunctionExpression"><span class="secnum">15.5.4</span> RS: InstantiateGeneratorFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-generator-function-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.5.5</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-async-generator-function-definitions" title="Async Generator Function Definitions"><span class="secnum">15.6</span> Async Generator Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-async-generator-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.6.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateasyncgeneratorbody" title="Runtime Semantics: EvaluateAsyncGeneratorBody"><span class="secnum">15.6.2</span> RS: EvaluateAsyncGeneratorBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncgeneratorfunctionobject" title="Runtime Semantics: InstantiateAsyncGeneratorFunctionObject"><span class="secnum">15.6.3</span> RS: InstantiateAsyncGeneratorFunctionObject</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncgeneratorfunctionexpression" title="Runtime Semantics: InstantiateAsyncGeneratorFunctionExpression"><span class="secnum">15.6.4</span> RS: InstantiateAsyncGeneratorFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-asyncgenerator-definitions-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.6.5</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-class-definitions" title="Class Definitions"><span class="secnum">15.7</span> Class Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-class-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.7.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-classelementkind" title="Static Semantics: ClassElementKind"><span class="secnum">15.7.2</span> SS: ClassElementKind</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-constructormethod" title="Static Semantics: ConstructorMethod"><span class="secnum">15.7.3</span> SS: ConstructorMethod</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-isstatic" title="Static Semantics: IsStatic"><span class="secnum">15.7.4</span> SS: IsStatic</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-nonconstructorelements" title="Static Semantics: NonConstructorElements"><span class="secnum">15.7.5</span> SS: NonConstructorElements</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-prototypepropertynamelist" title="Static Semantics: PrototypePropertyNameList"><span class="secnum">15.7.6</span> SS: PrototypePropertyNameList</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-allprivateidentifiersvalid" title="Static Semantics: AllPrivateIdentifiersValid"><span class="secnum">15.7.7</span> SS: AllPrivateIdentifiersValid</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-privateboundidentifiers" title="Static Semantics: PrivateBoundIdentifiers"><span class="secnum">15.7.8</span> SS: PrivateBoundIdentifiers</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsarguments" title="Static Semantics: ContainsArguments"><span class="secnum">15.7.9</span> SS: ContainsArguments</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classfielddefinitionevaluation" title="Runtime Semantics: ClassFieldDefinitionEvaluation"><span class="secnum">15.7.10</span> RS: ClassFieldDefinitionEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classstaticblockdefinitionevaluation" title="Runtime Semantics: ClassStaticBlockDefinitionEvaluation"><span class="secnum">15.7.11</span> RS: ClassStaticBlockDefinitionEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateclassstaticblockbody" title="Runtime Semantics: EvaluateClassStaticBlockBody"><span class="secnum">15.7.12</span> RS: EvaluateClassStaticBlockBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-classelementevaluation" title="Runtime Semantics: ClassElementEvaluation"><span class="secnum">15.7.13</span> RS: ClassElementEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classdefinitionevaluation" title="Runtime Semantics: ClassDefinitionEvaluation"><span class="secnum">15.7.14</span> RS: ClassDefinitionEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-bindingclassdeclarationevaluation" title="Runtime Semantics: BindingClassDeclarationEvaluation"><span class="secnum">15.7.15</span> RS: BindingClassDeclarationEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-class-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.7.16</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-async-function-definitions" title="Async Function Definitions"><span class="secnum">15.8</span> Async Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-async-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.8.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncfunctionobject" title="Runtime Semantics: InstantiateAsyncFunctionObject"><span class="secnum">15.8.2</span> RS: InstantiateAsyncFunctionObject</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncfunctionexpression" title="Runtime Semantics: InstantiateAsyncFunctionExpression"><span class="secnum">15.8.3</span> RS: InstantiateAsyncFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateasyncfunctionbody" title="Runtime Semantics: EvaluateAsyncFunctionBody"><span class="secnum">15.8.4</span> RS: EvaluateAsyncFunctionBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-async-function-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.8.5</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-async-arrow-function-definitions" title="Async Arrow Function Definitions"><span class="secnum">15.9</span> Async Arrow Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-async-arrow-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.9.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-asyncconcisebodycontainsusestrict" title="Static Semantics: AsyncConciseBodyContainsUseStrict"><span class="secnum">15.9.2</span> SS: AsyncConciseBodyContainsUseStrict</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateasyncconcisebody" title="Runtime Semantics: EvaluateAsyncConciseBody"><span class="secnum">15.9.3</span> RS: EvaluateAsyncConciseBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncarrowfunctionexpression" title="Runtime Semantics: InstantiateAsyncArrowFunctionExpression"><span class="secnum">15.9.4</span> RS: InstantiateAsyncArrowFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-async-arrow-function-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.9.5</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-tail-position-calls" title="Tail Position Calls"><span class="secnum">15.10</span> Tail Position Calls</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-isintailposition" title="Static Semantics: IsInTailPosition ( call )"><span class="secnum">15.10.1</span> SS: IsInTailPosition ( <var>call</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition" title="Static Semantics: HasCallInTailPosition"><span class="secnum">15.10.2</span> SS: HasCallInTailPosition</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-preparefortailcall" title="PrepareForTailCall ( )"><span class="secnum">15.10.3</span> PrepareForTailCall ( )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-ecmascript-language-scripts-and-modules" title="ECMAScript Language: Scripts and Modules"><span class="secnum">16</span> ECMAScript Language: Scripts and Modules</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-scripts" title="Scripts"><span class="secnum">16.1</span> Scripts</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-scripts-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">16.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-scriptisstrict" title="Static Semantics: ScriptIsStrict"><span class="secnum">16.1.2</span> SS: ScriptIsStrict</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-script-semantics-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">16.1.3</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-script-records" title="Script Records"><span class="secnum">16.1.4</span> Script Records</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-parse-script" title="ParseScript ( sourceText, realm, hostDefined )"><span class="secnum">16.1.5</span> ParseScript ( <var>sourceText</var>, <var>realm</var>, <var>hostDefined</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-runtime-semantics-scriptevaluation" title="ScriptEvaluation ( scriptRecord )"><span class="secnum">16.1.6</span> ScriptEvaluation ( <var>scriptRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-globaldeclarationinstantiation" title="GlobalDeclarationInstantiation ( script, env )"><span class="secnum">16.1.7</span> GlobalDeclarationInstantiation ( <var>script</var>, <var>env</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-modules" title="Modules"><span class="secnum">16.2</span> Modules</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-module-semantics" title="Module Semantics"><span class="secnum">16.2.1</span> Module Semantics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-module-semantics-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">16.2.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-importedlocalnames" title="Static Semantics: ImportedLocalNames ( importEntries )"><span class="secnum">16.2.1.2</span> SS: ImportedLocalNames ( <var>importEntries</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-modulerequest-record" title="ModuleRequest Records"><span class="secnum">16.2.1.3</span> ModuleRequest Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-ModuleRequestsEqual" title="ModuleRequestsEqual ( left, right )"><span class="secnum">16.2.1.3.1</span> ModuleRequestsEqual ( <var>left</var>, <var>right</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-modulerequests" title="Static Semantics: ModuleRequests"><span class="secnum">16.2.1.4</span> SS: ModuleRequests</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records" title="Abstract Module Records"><span class="secnum">16.2.1.5</span> Abstract Module Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-EvaluateModuleSync" title="EvaluateModuleSync ( module )"><span class="secnum">16.2.1.5.1</span> EvaluateModuleSync ( <var>module</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-cyclic-module-records" title="Cyclic Module Records"><span class="secnum">16.2.1.6</span> Cyclic Module Records</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-cyclic-module-record-module-record-methods" title="Implementation of Module Record Abstract Methods"><span class="secnum">16.2.1.6.1</span> Implementation of Module Record Abstract Methods</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-LoadRequestedModules" title="LoadRequestedModules ( [ hostDefined ] )"><span class="secnum">16.2.1.6.1.1</span> LoadRequestedModules ( [ <var>hostDefined</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLoading" title="InnerModuleLoading ( state, module )"><span class="secnum">16.2.1.6.1.1.1</span> InnerModuleLoading ( <var>state</var>, <var>module</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-ContinueModuleLoading" title="ContinueModuleLoading ( state, moduleCompletion )"><span class="secnum">16.2.1.6.1.1.2</span> ContinueModuleLoading ( <var>state</var>, <var>moduleCompletion</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-moduledeclarationlinking" title="Link ( )"><span class="secnum">16.2.1.6.1.2</span> Link ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLinking" title="InnerModuleLinking ( module, stack, index )"><span class="secnum">16.2.1.6.1.2.1</span> InnerModuleLinking ( <var>module</var>, <var>stack</var>, <var>index</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-moduleevaluation" title="Evaluate ( )"><span class="secnum">16.2.1.6.1.3</span> Evaluate ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation" title="InnerModuleEvaluation ( module, stack, index )"><span class="secnum">16.2.1.6.1.3.1</span> InnerModuleEvaluation ( <var>module</var>, <var>stack</var>, <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-execute-async-module" title="ExecuteAsyncModule ( module )"><span class="secnum">16.2.1.6.1.3.2</span> ExecuteAsyncModule ( <var>module</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-gather-available-ancestors" title="GatherAvailableAncestors ( module, execList )"><span class="secnum">16.2.1.6.1.3.3</span> GatherAvailableAncestors ( <var>module</var>, <var>execList</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-fulfilled" title="AsyncModuleExecutionFulfilled ( module )"><span class="secnum">16.2.1.6.1.3.4</span> AsyncModuleExecutionFulfilled ( <var>module</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-rejected" title="AsyncModuleExecutionRejected ( module, error )"><span class="secnum">16.2.1.6.1.3.5</span> AsyncModuleExecutionRejected ( <var>module</var>, <var>error</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-example-cyclic-module-record-graphs" title="Example Cyclic Module Record Graphs"><span class="secnum">16.2.1.6.2</span> Example Cyclic Module Record Graphs</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-records" title="Source Text Module Records"><span class="secnum">16.2.1.7</span> Source Text Module Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-parsemodule" title="ParseModule ( sourceText, realm, hostDefined )"><span class="secnum">16.2.1.7.1</span> ParseModule ( <var>sourceText</var>, <var>realm</var>, <var>hostDefined</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-record-module-record-methods" title="Implementation of Module Record Abstract Methods"><span class="secnum">16.2.1.7.2</span> Implementation of Module Record Abstract Methods</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-getexportednames" title="GetExportedNames ( [ exportStarSet ] )"><span class="secnum">16.2.1.7.2.1</span> GetExportedNames ( [ <var>exportStarSet</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-resolveexport" title="ResolveExport ( exportName [ , resolveSet ] )"><span class="secnum">16.2.1.7.2.2</span> ResolveExport ( <var>exportName</var> [ , <var>resolveSet</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-record-cyclic-module-record-methods" title="Implementation of Cyclic Module Record Abstract Methods"><span class="secnum">16.2.1.7.3</span> Implementation of Cyclic Module Record Abstract Methods</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-record-initialize-environment" title="InitializeEnvironment ( )"><span class="secnum">16.2.1.7.3.1</span> InitializeEnvironment ( )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-record-execute-module" title="ExecuteModule ( [ capability ] )"><span class="secnum">16.2.1.7.3.2</span> ExecuteModule ( [ <var>capability</var> ] )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records" title="Synthetic Module Records"><span class="secnum">16.2.1.8</span> Synthetic Module Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-create-default-export-synthetic-module" title="CreateDefaultExportSyntheticModule ( defaultExport )"><span class="secnum">16.2.1.8.1</span> CreateDefaultExportSyntheticModule ( <var>defaultExport</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-parse-json-module" title="ParseJSONModule ( source )"><span class="secnum">16.2.1.8.2</span> ParseJSONModule ( <var>source</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-setsyntheticmoduleexport" title="SetSyntheticModuleExport ( module, exportName, exportValue )"><span class="secnum">16.2.1.8.3</span> SetSyntheticModuleExport ( <var>module</var>, <var>exportName</var>, <var>exportValue</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-module-record-methods" title="Implementation of Module Record Abstract Methods"><span class="secnum">16.2.1.8.4</span> Implementation of Module Record Abstract Methods</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-LoadRequestedModules" title="LoadRequestedModules ( [ hostDefined ] )"><span class="secnum">16.2.1.8.4.1</span> LoadRequestedModules ( [ <var>hostDefined</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-getexportednames" title="GetExportedNames ( [ exportStarSet ] )"><span class="secnum">16.2.1.8.4.2</span> GetExportedNames ( [ <var>exportStarSet</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-resolveexport" title="ResolveExport ( exportName [ , resolveSet ] )"><span class="secnum">16.2.1.8.4.3</span> ResolveExport ( <var>exportName</var> [ , <var>resolveSet</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-Link" title="Link ( )"><span class="secnum">16.2.1.8.4.4</span> Link ( )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-Evaluate" title="Evaluate ( )"><span class="secnum">16.2.1.8.4.5</span> Evaluate ( )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-GetImportedModule" title="GetImportedModule ( referrer, request )"><span class="secnum">16.2.1.9</span> GetImportedModule ( <var>referrer</var>, <var>request</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-HostLoadImportedModule" title="HostLoadImportedModule ( referrer, moduleRequest, hostDefined, payload )"><span class="secnum">16.2.1.10</span> HostLoadImportedModule ( <var>referrer</var>, <var>moduleRequest</var>, <var>hostDefined</var>, <var>payload</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-FinishLoadingImportedModule" title="FinishLoadingImportedModule ( referrer, moduleRequest, payload, result )"><span class="secnum">16.2.1.11</span> FinishLoadingImportedModule ( <var>referrer</var>, <var>moduleRequest</var>, <var>payload</var>, <var>result</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-AllImportAttributesSupported" title="AllImportAttributesSupported ( attributes )"><span class="secnum">16.2.1.12</span> AllImportAttributesSupported ( <var>attributes</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-hostgetsupportedimportattributes" title="HostGetSupportedImportAttributes ( )"><span class="secnum">16.2.1.12.1</span> HostGetSupportedImportAttributes ( )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-getmodulenamespace" title="GetModuleNamespace ( module )"><span class="secnum">16.2.1.13</span> GetModuleNamespace ( <var>module</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-module-semantics-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">16.2.1.14</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-imports" title="Imports"><span class="secnum">16.2.2</span> Imports</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-imports-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">16.2.2.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentries" title="Static Semantics: ImportEntries"><span class="secnum">16.2.2.2</span> SS: ImportEntries</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentriesformodule" title="Static Semantics: ImportEntriesForModule"><span class="secnum">16.2.2.3</span> SS: ImportEntriesForModule</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-withclausetoattributes" title="Static Semantics: WithClauseToAttributes"><span class="secnum">16.2.2.4</span> SS: WithClauseToAttributes</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-exports" title="Exports"><span class="secnum">16.2.3</span> Exports</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-exports-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">16.2.3.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportedbindings" title="Static Semantics: ExportedBindings"><span class="secnum">16.2.3.2</span> SS: ExportedBindings</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportednames" title="Static Semantics: ExportedNames"><span class="secnum">16.2.3.3</span> SS: ExportedNames</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportentries" title="Static Semantics: ExportEntries"><span class="secnum">16.2.3.4</span> SS: ExportEntries</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportentriesformodule" title="Static Semantics: ExportEntriesForModule"><span class="secnum">16.2.3.5</span> SS: ExportEntriesForModule</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-referencedbindings" title="Static Semantics: ReferencedBindings"><span class="secnum">16.2.3.6</span> SS: ReferencedBindings</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-exports-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">16.2.3.7</span> RS: Evaluation</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="error-handling-and-language-extensions.html#sec-error-handling-and-language-extensions" title="Error Handling and Language Extensions"><span class="secnum">17</span> Error Handling and Language Extensions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="error-handling-and-language-extensions.html#sec-forbidden-extensions" title="Forbidden Extensions"><span class="secnum">17.1</span> Forbidden Extensions</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-standard-built-in-objects.html#sec-ecmascript-standard-built-in-objects" title="ECMAScript Standard Built-in Objects"><span class="secnum">18</span> ECMAScript Standard Built-in Objects</a></li><li><span class="item-toggle">+</span><a href="global-object.html#sec-global-object" title="The Global Object"><span class="secnum">19</span> The Global Object</a><ol class="toc"><li><span class="item-toggle">+</span><a href="global-object.html#sec-value-properties-of-the-global-object" title="Value Properties of the Global Object"><span class="secnum">19.1</span> Value Properties of the Global Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="global-object.html#sec-globalthis" title="globalThis"><span class="secnum">19.1.1</span> globalThis</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-value-properties-of-the-global-object-infinity" title="Infinity"><span class="secnum">19.1.2</span> Infinity</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-value-properties-of-the-global-object-nan" title="NaN"><span class="secnum">19.1.3</span> NaN</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-undefined" title="undefined"><span class="secnum">19.1.4</span> undefined</a></li></ol></li><li><span class="item-toggle">+</span><a href="global-object.html#sec-function-properties-of-the-global-object" title="Function Properties of the Global Object"><span class="secnum">19.2</span> Function Properties of the Global Object</a><ol class="toc"><li><span class="item-toggle">+</span><a href="global-object.html#sec-eval-x" title="eval ( x )"><span class="secnum">19.2.1</span> eval ( <var>x</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="global-object.html#sec-performeval" title="PerformEval ( x, strictCaller, direct )"><span class="secnum">19.2.1.1</span> PerformEval ( <var>x</var>, <var>strictCaller</var>, <var>direct</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-hostensurecancompilestrings" title="HostEnsureCanCompileStrings ( calleeRealm, parameterStrings, bodyString, direct )"><span class="secnum">19.2.1.2</span> HostEnsureCanCompileStrings ( <var>calleeRealm</var>, <var>parameterStrings</var>, <var>bodyString</var>, <var>direct</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-evaldeclarationinstantiation" title="EvalDeclarationInstantiation ( body, varEnv, lexEnv, privateEnv, strict )"><span class="secnum">19.2.1.3</span> EvalDeclarationInstantiation ( <var>body</var>, <var>varEnv</var>, <var>lexEnv</var>, <var>privateEnv</var>, <var>strict</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-isfinite-number" title="isFinite ( number )"><span class="secnum">19.2.2</span> isFinite ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-isnan-number" title="isNaN ( number )"><span class="secnum">19.2.3</span> isNaN ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-parsefloat-string" title="parseFloat ( string )"><span class="secnum">19.2.4</span> parseFloat ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-parseint-string-radix" title="parseInt ( string, radix )"><span class="secnum">19.2.5</span> parseInt ( <var>string</var>, <var>radix</var> )</a></li><li><span class="item-toggle">+</span><a href="global-object.html#sec-uri-handling-functions" title="URI Handling Functions"><span class="secnum">19.2.6</span> URI Handling Functions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="global-object.html#sec-decodeuri-encodeduri" title="decodeURI ( encodedURI )"><span class="secnum">19.2.6.1</span> decodeURI ( <var>encodedURI</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-decodeuricomponent-encodeduricomponent" title="decodeURIComponent ( encodedURIComponent )"><span class="secnum">19.2.6.2</span> decodeURIComponent ( <var>encodedURIComponent</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-encodeuri-uri" title="encodeURI ( uri )"><span class="secnum">19.2.6.3</span> encodeURI ( <var>uri</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-encodeuricomponent-uricomponent" title="encodeURIComponent ( uriComponent )"><span class="secnum">19.2.6.4</span> encodeURIComponent ( <var>uriComponent</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-encode" title="Encode ( string, extraUnescaped )"><span class="secnum">19.2.6.5</span> Encode ( <var>string</var>, <var>extraUnescaped</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-decode" title="Decode ( string, preserveEscapeSet )"><span class="secnum">19.2.6.6</span> Decode ( <var>string</var>, <var>preserveEscapeSet</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-parsehexoctet" title="ParseHexOctet ( string, position )"><span class="secnum">19.2.6.7</span> ParseHexOctet ( <var>string</var>, <var>position</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="global-object.html#sec-constructor-properties-of-the-global-object" title="Constructor Properties of the Global Object"><span class="secnum">19.3</span> Constructor Properties of the Global Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-aggregate-error" title="AggregateError ( . . . )"><span class="secnum">19.3.1</span> AggregateError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-array" title="Array ( . . . )"><span class="secnum">19.3.2</span> Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-arraybuffer" title="ArrayBuffer ( . . . )"><span class="secnum">19.3.3</span> ArrayBuffer ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-bigint" title="BigInt ( . . . )"><span class="secnum">19.3.4</span> BigInt ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-bigint64array" title="BigInt64Array ( . . . )"><span class="secnum">19.3.5</span> BigInt64Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-biguint64array" title="BigUint64Array ( . . . )"><span class="secnum">19.3.6</span> BigUint64Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-boolean" title="Boolean ( . . . )"><span class="secnum">19.3.7</span> Boolean ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-dataview" title="DataView ( . . . )"><span class="secnum">19.3.8</span> DataView ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-date" title="Date ( . . . )"><span class="secnum">19.3.9</span> Date ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-error" title="Error ( . . . )"><span class="secnum">19.3.10</span> Error ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-evalerror" title="EvalError ( . . . )"><span class="secnum">19.3.11</span> EvalError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-finalization-registry" title="FinalizationRegistry ( . . . )"><span class="secnum">19.3.12</span> FinalizationRegistry ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-float16array" title="Float16Array ( . . . )"><span class="secnum">19.3.13</span> Float16Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-float32array" title="Float32Array ( . . . )"><span class="secnum">19.3.14</span> Float32Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-float64array" title="Float64Array ( . . . )"><span class="secnum">19.3.15</span> Float64Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-function" title="Function ( . . . )"><span class="secnum">19.3.16</span> Function ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-int8array" title="Int8Array ( . . . )"><span class="secnum">19.3.17</span> Int8Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-int16array" title="Int16Array ( . . . )"><span class="secnum">19.3.18</span> Int16Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-int32array" title="Int32Array ( . . . )"><span class="secnum">19.3.19</span> Int32Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-iterator" title="Iterator ( . . . )"><span class="secnum">19.3.20</span> Iterator ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-map" title="Map ( . . . )"><span class="secnum">19.3.21</span> Map ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-number" title="Number ( . . . )"><span class="secnum">19.3.22</span> Number ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-object" title="Object ( . . . )"><span class="secnum">19.3.23</span> Object ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-promise" title="Promise ( . . . )"><span class="secnum">19.3.24</span> Promise ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-proxy" title="Proxy ( . . . )"><span class="secnum">19.3.25</span> Proxy ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-rangeerror" title="RangeError ( . . . )"><span class="secnum">19.3.26</span> RangeError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-referenceerror" title="ReferenceError ( . . . )"><span class="secnum">19.3.27</span> ReferenceError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-regexp" title="RegExp ( . . . )"><span class="secnum">19.3.28</span> RegExp ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-set" title="Set ( . . . )"><span class="secnum">19.3.29</span> Set ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-sharedarraybuffer" title="SharedArrayBuffer ( . . . )"><span class="secnum">19.3.30</span> SharedArrayBuffer ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-string" title="String ( . . . )"><span class="secnum">19.3.31</span> String ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-symbol" title="Symbol ( . . . )"><span class="secnum">19.3.32</span> Symbol ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-syntaxerror" title="SyntaxError ( . . . )"><span class="secnum">19.3.33</span> SyntaxError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-typeerror" title="TypeError ( . . . )"><span class="secnum">19.3.34</span> TypeError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-uint8array" title="Uint8Array ( . . . )"><span class="secnum">19.3.35</span> Uint8Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-uint8clampedarray" title="Uint8ClampedArray ( . . . )"><span class="secnum">19.3.36</span> Uint8ClampedArray ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-uint16array" title="Uint16Array ( . . . )"><span class="secnum">19.3.37</span> Uint16Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-uint32array" title="Uint32Array ( . . . )"><span class="secnum">19.3.38</span> Uint32Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-urierror" title="URIError ( . . . )"><span class="secnum">19.3.39</span> URIError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-weakmap" title="WeakMap ( . . . )"><span class="secnum">19.3.40</span> WeakMap ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-weakref" title="WeakRef ( . . . )"><span class="secnum">19.3.41</span> WeakRef ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-weakset" title="WeakSet ( . . . )"><span class="secnum">19.3.42</span> WeakSet ( . . . )</a></li></ol></li><li><span class="item-toggle">+</span><a href="global-object.html#sec-other-properties-of-the-global-object" title="Other Properties of the Global Object"><span class="secnum">19.4</span> Other Properties of the Global Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="global-object.html#sec-atomics" title="Atomics"><span class="secnum">19.4.1</span> Atomics</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-json" title="JSON"><span class="secnum">19.4.2</span> JSON</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-math" title="Math"><span class="secnum">19.4.3</span> Math</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-reflect" title="Reflect"><span class="secnum">19.4.4</span> Reflect</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-fundamental-objects" title="Fundamental Objects"><span class="secnum">20</span> Fundamental Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object-objects" title="Object Objects"><span class="secnum">20.1</span> Object Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object-constructor" title="The Object Constructor"><span class="secnum">20.1.1</span> The Object Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object-value" title="Object ( value )"><span class="secnum">20.1.1.1</span> Object ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-object-constructor" title="Properties of the Object Constructor"><span class="secnum">20.1.2</span> Properties of the Object Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.assign" title="Object.assign ( target, ...sources )"><span class="secnum">20.1.2.1</span> Object.assign ( <var>target</var>, ...<var>sources</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.create" title="Object.create ( O, Properties )"><span class="secnum">20.1.2.2</span> Object.create ( <var>O</var>, <var>Properties</var> )</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object.defineproperties" title="Object.defineProperties ( O, Properties )"><span class="secnum">20.1.2.3</span> Object.defineProperties ( <var>O</var>, <var>Properties</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-objectdefineproperties" title="ObjectDefineProperties ( O, Properties )"><span class="secnum">20.1.2.3.1</span> ObjectDefineProperties ( <var>O</var>, <var>Properties</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.defineproperty" title="Object.defineProperty ( O, P, Attributes )"><span class="secnum">20.1.2.4</span> Object.defineProperty ( <var>O</var>, <var>P</var>, <var>Attributes</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.entries" title="Object.entries ( O )"><span class="secnum">20.1.2.5</span> Object.entries ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.freeze" title="Object.freeze ( O )"><span class="secnum">20.1.2.6</span> Object.freeze ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.fromentries" title="Object.fromEntries ( iterable )"><span class="secnum">20.1.2.7</span> Object.fromEntries ( <var>iterable</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.getownpropertydescriptor" title="Object.getOwnPropertyDescriptor ( O, P )"><span class="secnum">20.1.2.8</span> Object.getOwnPropertyDescriptor ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.getownpropertydescriptors" title="Object.getOwnPropertyDescriptors ( O )"><span class="secnum">20.1.2.9</span> Object.getOwnPropertyDescriptors ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.getownpropertynames" title="Object.getOwnPropertyNames ( O )"><span class="secnum">20.1.2.10</span> Object.getOwnPropertyNames ( <var>O</var> )</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object.getownpropertysymbols" title="Object.getOwnPropertySymbols ( O )"><span class="secnum">20.1.2.11</span> Object.getOwnPropertySymbols ( <var>O</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-getownpropertykeys" title="GetOwnPropertyKeys ( O, type )"><span class="secnum">20.1.2.11.1</span> GetOwnPropertyKeys ( <var>O</var>, <var>type</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.getprototypeof" title="Object.getPrototypeOf ( O )"><span class="secnum">20.1.2.12</span> Object.getPrototypeOf ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.groupby" title="Object.groupBy ( items, callback )"><span class="secnum">20.1.2.13</span> Object.groupBy ( <var>items</var>, <var>callback</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.hasown" title="Object.hasOwn ( O, P )"><span class="secnum">20.1.2.14</span> Object.hasOwn ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.is" title="Object.is ( value1, value2 )"><span class="secnum">20.1.2.15</span> Object.is ( <var>value1</var>, <var>value2</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.isextensible" title="Object.isExtensible ( O )"><span class="secnum">20.1.2.16</span> Object.isExtensible ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.isfrozen" title="Object.isFrozen ( O )"><span class="secnum">20.1.2.17</span> Object.isFrozen ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.issealed" title="Object.isSealed ( O )"><span class="secnum">20.1.2.18</span> Object.isSealed ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.keys" title="Object.keys ( O )"><span class="secnum">20.1.2.19</span> Object.keys ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.preventextensions" title="Object.preventExtensions ( O )"><span class="secnum">20.1.2.20</span> Object.preventExtensions ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype" title="Object.prototype"><span class="secnum">20.1.2.21</span> Object.prototype</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.seal" title="Object.seal ( O )"><span class="secnum">20.1.2.22</span> Object.seal ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.setprototypeof" title="Object.setPrototypeOf ( O, proto )"><span class="secnum">20.1.2.23</span> Object.setPrototypeOf ( <var>O</var>, <var>proto</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.values" title="Object.values ( O )"><span class="secnum">20.1.2.24</span> Object.values ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object" title="Properties of the Object Prototype Object"><span class="secnum">20.1.3</span> Properties of the Object Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.constructor" title="Object.prototype.constructor"><span class="secnum">20.1.3.1</span> Object.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.hasownproperty" title="Object.prototype.hasOwnProperty ( V )"><span class="secnum">20.1.3.2</span> Object.prototype.hasOwnProperty ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.isprototypeof" title="Object.prototype.isPrototypeOf ( V )"><span class="secnum">20.1.3.3</span> Object.prototype.isPrototypeOf ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.propertyisenumerable" title="Object.prototype.propertyIsEnumerable ( V )"><span class="secnum">20.1.3.4</span> Object.prototype.propertyIsEnumerable ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.tolocalestring" title="Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">20.1.3.5</span> Object.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.tostring" title="Object.prototype.toString ( )"><span class="secnum">20.1.3.6</span> Object.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.valueof" title="Object.prototype.valueOf ( )"><span class="secnum">20.1.3.7</span> Object.prototype.valueOf ( )</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object.prototype.__proto__" title="Object.prototype.__proto__"><span class="secnum">20.1.3.8</span> Object.prototype.__proto__</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-get-object.prototype.__proto__" title="get Object.prototype.__proto__"><span class="secnum">20.1.3.8.1</span> get Object.prototype.__proto__</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-set-object.prototype.__proto__" title="set Object.prototype.__proto__"><span class="secnum">20.1.3.8.2</span> set Object.prototype.__proto__</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object.prototype-legacy-accessor-methods" title="Legacy Object.prototype Accessor Methods"><span class="secnum">20.1.3.9</span> Legacy Object.prototype Accessor Methods</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.__defineGetter__" title="Object.prototype.__defineGetter__ ( P, getter )"><span class="secnum">20.1.3.9.1</span> Object.prototype.__defineGetter__ ( <var>P</var>, <var>getter</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.__defineSetter__" title="Object.prototype.__defineSetter__ ( P, setter )"><span class="secnum">20.1.3.9.2</span> Object.prototype.__defineSetter__ ( <var>P</var>, <var>setter</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.__lookupGetter__" title="Object.prototype.__lookupGetter__ ( P )"><span class="secnum">20.1.3.9.3</span> Object.prototype.__lookupGetter__ ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.__lookupSetter__" title="Object.prototype.__lookupSetter__ ( P )"><span class="secnum">20.1.3.9.4</span> Object.prototype.__lookupSetter__ ( <var>P</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-object-instances" title="Properties of Object Instances"><span class="secnum">20.1.4</span> Properties of Object Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-function-objects" title="Function Objects"><span class="secnum">20.2</span> Function Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-function-constructor" title="The Function Constructor"><span class="secnum">20.2.1</span> The Function Constructor</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-function-p1-p2-pn-body" title="Function ( ...parameterArgs, bodyArg )"><span class="secnum">20.2.1.1</span> Function ( ...<var>parameterArgs</var>, <var>bodyArg</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-createdynamicfunction" title="CreateDynamicFunction ( constructor, newTarget, kind, parameterArgs, bodyArg )"><span class="secnum">20.2.1.1.1</span> CreateDynamicFunction ( <var>constructor</var>, <var>newTarget</var>, <var>kind</var>, <var>parameterArgs</var>, <var>bodyArg</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-function-constructor" title="Properties of the Function Constructor"><span class="secnum">20.2.2</span> Properties of the Function Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype" title="Function.prototype"><span class="secnum">20.2.2.1</span> Function.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object" title="Properties of the Function Prototype Object"><span class="secnum">20.2.3</span> Properties of the Function Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype.apply" title="Function.prototype.apply ( thisArg, argArray )"><span class="secnum">20.2.3.1</span> Function.prototype.apply ( <var>thisArg</var>, <var>argArray</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype.bind" title="Function.prototype.bind ( thisArg, ...args )"><span class="secnum">20.2.3.2</span> Function.prototype.bind ( <var>thisArg</var>, ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype.call" title="Function.prototype.call ( thisArg, ...args )"><span class="secnum">20.2.3.3</span> Function.prototype.call ( <var>thisArg</var>, ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype.constructor" title="Function.prototype.constructor"><span class="secnum">20.2.3.4</span> Function.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype.tostring" title="Function.prototype.toString ( )"><span class="secnum">20.2.3.5</span> Function.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype-%symbol.hasinstance%" title="Function.prototype [ %Symbol.hasInstance% ] ( V )"><span class="secnum">20.2.3.6</span> Function.prototype [ %Symbol.hasInstance% ] ( <var>V</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-function-instances" title="Function Instances"><span class="secnum">20.2.4</span> Function Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function-instances-length" title="length"><span class="secnum">20.2.4.1</span> length</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function-instances-name" title="name"><span class="secnum">20.2.4.2</span> name</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function-instances-prototype" title="prototype"><span class="secnum">20.2.4.3</span> prototype</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-hosthassourcetextavailable" title="HostHasSourceTextAvailable ( func )"><span class="secnum">20.2.5</span> HostHasSourceTextAvailable ( <var>func</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-boolean-objects" title="Boolean Objects"><span class="secnum">20.3</span> Boolean Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-boolean-constructor" title="The Boolean Constructor"><span class="secnum">20.3.1</span> The Boolean Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-boolean-constructor-boolean-value" title="Boolean ( value )"><span class="secnum">20.3.1.1</span> Boolean ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-boolean-constructor" title="Properties of the Boolean Constructor"><span class="secnum">20.3.2</span> Properties of the Boolean Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-boolean.prototype" title="Boolean.prototype"><span class="secnum">20.3.2.1</span> Boolean.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-boolean-prototype-object" title="Properties of the Boolean Prototype Object"><span class="secnum">20.3.3</span> Properties of the Boolean Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-boolean.prototype.constructor" title="Boolean.prototype.constructor"><span class="secnum">20.3.3.1</span> Boolean.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-boolean.prototype.tostring" title="Boolean.prototype.toString ( )"><span class="secnum">20.3.3.2</span> Boolean.prototype.toString ( )</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-boolean.prototype.valueof" title="Boolean.prototype.valueOf ( )"><span class="secnum">20.3.3.3</span> Boolean.prototype.valueOf ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-thisbooleanvalue" title="ThisBooleanValue ( value )"><span class="secnum">20.3.3.3.1</span> ThisBooleanValue ( <var>value</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-boolean-instances" title="Properties of Boolean Instances"><span class="secnum">20.3.4</span> Properties of Boolean Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-symbol-objects" title="Symbol Objects"><span class="secnum">20.4</span> Symbol Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-symbol-constructor" title="The Symbol Constructor"><span class="secnum">20.4.1</span> The Symbol Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol-description" title="Symbol ( [ description ] )"><span class="secnum">20.4.1.1</span> Symbol ( [ <var>description</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-symbol-constructor" title="Properties of the Symbol Constructor"><span class="secnum">20.4.2</span> Properties of the Symbol Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.asynciterator" title="Symbol.asyncIterator"><span class="secnum">20.4.2.1</span> Symbol.asyncIterator</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.for" title="Symbol.for ( key )"><span class="secnum">20.4.2.2</span> Symbol.for ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.hasinstance" title="Symbol.hasInstance"><span class="secnum">20.4.2.3</span> Symbol.hasInstance</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.isconcatspreadable" title="Symbol.isConcatSpreadable"><span class="secnum">20.4.2.4</span> Symbol.isConcatSpreadable</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.iterator" title="Symbol.iterator"><span class="secnum">20.4.2.5</span> Symbol.iterator</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.keyfor" title="Symbol.keyFor ( sym )"><span class="secnum">20.4.2.6</span> Symbol.keyFor ( <var>sym</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.match" title="Symbol.match"><span class="secnum">20.4.2.7</span> Symbol.match</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.matchall" title="Symbol.matchAll"><span class="secnum">20.4.2.8</span> Symbol.matchAll</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.prototype" title="Symbol.prototype"><span class="secnum">20.4.2.9</span> Symbol.prototype</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.replace" title="Symbol.replace"><span class="secnum">20.4.2.10</span> Symbol.replace</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.search" title="Symbol.search"><span class="secnum">20.4.2.11</span> Symbol.search</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.species" title="Symbol.species"><span class="secnum">20.4.2.12</span> Symbol.species</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.split" title="Symbol.split"><span class="secnum">20.4.2.13</span> Symbol.split</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.toprimitive" title="Symbol.toPrimitive"><span class="secnum">20.4.2.14</span> Symbol.toPrimitive</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.tostringtag" title="Symbol.toStringTag"><span class="secnum">20.4.2.15</span> Symbol.toStringTag</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.unscopables" title="Symbol.unscopables"><span class="secnum">20.4.2.16</span> Symbol.unscopables</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-symbol-prototype-object" title="Properties of the Symbol Prototype Object"><span class="secnum">20.4.3</span> Properties of the Symbol Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.prototype.constructor" title="Symbol.prototype.constructor"><span class="secnum">20.4.3.1</span> Symbol.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.prototype.description" title="get Symbol.prototype.description"><span class="secnum">20.4.3.2</span> get Symbol.prototype.description</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-symbol.prototype.tostring" title="Symbol.prototype.toString ( )"><span class="secnum">20.4.3.3</span> Symbol.prototype.toString ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symboldescriptivestring" title="SymbolDescriptiveString ( sym )"><span class="secnum">20.4.3.3.1</span> SymbolDescriptiveString ( <var>sym</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-symbol.prototype.valueof" title="Symbol.prototype.valueOf ( )"><span class="secnum">20.4.3.4</span> Symbol.prototype.valueOf ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-thissymbolvalue" title="ThisSymbolValue ( value )"><span class="secnum">20.4.3.4.1</span> ThisSymbolValue ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.prototype-%symbol.toprimitive%" title="Symbol.prototype [ %Symbol.toPrimitive% ] ( hint )"><span class="secnum">20.4.3.5</span> Symbol.prototype [ %Symbol.toPrimitive% ] ( <var>hint</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.prototype-%symbol.tostringtag%" title="Symbol.prototype [ %Symbol.toStringTag% ]"><span class="secnum">20.4.3.6</span> Symbol.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-symbol-instances" title="Properties of Symbol Instances"><span class="secnum">20.4.4</span> Properties of Symbol Instances</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-abstract-operations-for-symbols" title="Abstract Operations for Symbols"><span class="secnum">20.4.5</span> Abstract Operations for Symbols</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-keyforsymbol" title="KeyForSymbol ( sym )"><span class="secnum">20.4.5.1</span> KeyForSymbol ( <var>sym</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-error-objects" title="Error Objects"><span class="secnum">20.5</span> Error Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-error-constructor" title="The Error Constructor"><span class="secnum">20.5.1</span> The Error Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error-message" title="Error ( message [ , options ] )"><span class="secnum">20.5.1.1</span> Error ( <var>message</var> [ , <var>options</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-error-constructor" title="Properties of the Error Constructor"><span class="secnum">20.5.2</span> Properties of the Error Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.iserror" title="Error.isError ( arg )"><span class="secnum">20.5.2.1</span> Error.isError ( <var>arg</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.prototype" title="Error.prototype"><span class="secnum">20.5.2.2</span> Error.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-error-prototype-object" title="Properties of the Error Prototype Object"><span class="secnum">20.5.3</span> Properties of the Error Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.prototype.constructor" title="Error.prototype.constructor"><span class="secnum">20.5.3.1</span> Error.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.prototype.message" title="Error.prototype.message"><span class="secnum">20.5.3.2</span> Error.prototype.message</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.prototype.name" title="Error.prototype.name"><span class="secnum">20.5.3.3</span> Error.prototype.name</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.prototype.tostring" title="Error.prototype.toString ( )"><span class="secnum">20.5.3.4</span> Error.prototype.toString ( )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-error-instances" title="Properties of Error Instances"><span class="secnum">20.5.4</span> Properties of Error Instances</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard" title="Native Error Types Used in This Standard"><span class="secnum">20.5.5</span> Native Error Types Used in This Standard</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-evalerror" title="EvalError"><span class="secnum">20.5.5.1</span> EvalError</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-rangeerror" title="RangeError"><span class="secnum">20.5.5.2</span> RangeError</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-referenceerror" title="ReferenceError"><span class="secnum">20.5.5.3</span> ReferenceError</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-syntaxerror" title="SyntaxError"><span class="secnum">20.5.5.4</span> SyntaxError</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-typeerror" title="TypeError"><span class="secnum">20.5.5.5</span> TypeError</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-urierror" title="URIError"><span class="secnum">20.5.5.6</span> URIError</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-nativeerror-object-structure" title="NativeError Object Structure"><span class="secnum">20.5.6</span> <var>NativeError</var> Object Structure</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-nativeerror-constructors" title="The NativeError Constructors"><span class="secnum">20.5.6.1</span> The <var>NativeError</var> Constructors</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-nativeerror" title="NativeError ( message [ , options ] )"><span class="secnum">20.5.6.1.1</span> <var>NativeError</var> ( <var>message</var> [ , <var>options</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-nativeerror-constructors" title="Properties of the NativeError Constructors"><span class="secnum">20.5.6.2</span> Properties of the <var>NativeError</var> Constructors</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-nativeerror.prototype" title="NativeError.prototype"><span class="secnum">20.5.6.2.1</span> <var>NativeError</var>.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-nativeerror-prototype-objects" title="Properties of the NativeError Prototype Objects"><span class="secnum">20.5.6.3</span> Properties of the <var>NativeError</var> Prototype Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-nativeerror.prototype.constructor" title="NativeError.prototype.constructor"><span class="secnum">20.5.6.3.1</span> <var>NativeError</var>.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-nativeerror.prototype.message" title="NativeError.prototype.message"><span class="secnum">20.5.6.3.2</span> <var>NativeError</var>.prototype.message</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-nativeerror.prototype.name" title="NativeError.prototype.name"><span class="secnum">20.5.6.3.3</span> <var>NativeError</var>.prototype.name</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-nativeerror-instances" title="Properties of NativeError Instances"><span class="secnum">20.5.6.4</span> Properties of <var>NativeError</var> Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-aggregate-error-objects" title="AggregateError Objects"><span class="secnum">20.5.7</span> AggregateError Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-aggregate-error-constructor" title="The AggregateError Constructor"><span class="secnum">20.5.7.1</span> The AggregateError Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-aggregate-error" title="AggregateError ( errors, message [ , options ] )"><span class="secnum">20.5.7.1.1</span> AggregateError ( <var>errors</var>, <var>message</var> [ , <var>options</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-aggregate-error-constructors" title="Properties of the AggregateError Constructor"><span class="secnum">20.5.7.2</span> Properties of the AggregateError Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-aggregate-error.prototype" title="AggregateError.prototype"><span class="secnum">20.5.7.2.1</span> AggregateError.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-aggregate-error-prototype-objects" title="Properties of the AggregateError Prototype Object"><span class="secnum">20.5.7.3</span> Properties of the AggregateError Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-aggregate-error.prototype.constructor" title="AggregateError.prototype.constructor"><span class="secnum">20.5.7.3.1</span> AggregateError.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-aggregate-error.prototype.message" title="AggregateError.prototype.message"><span class="secnum">20.5.7.3.2</span> AggregateError.prototype.message</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-aggregate-error.prototype.name" title="AggregateError.prototype.name"><span class="secnum">20.5.7.3.3</span> AggregateError.prototype.name</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-aggregate-error-instances" title="Properties of AggregateError Instances"><span class="secnum">20.5.7.4</span> Properties of AggregateError Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-abstract-operations-for-error-objects" title="Abstract Operations for Error Objects"><span class="secnum">20.5.8</span> Abstract Operations for Error Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-installerrorcause" title="InstallErrorCause ( O, options )"><span class="secnum">20.5.8.1</span> InstallErrorCause ( <var>O</var>, <var>options</var> )</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-numbers-and-dates" title="Numbers and Dates"><span class="secnum">21</span> Numbers and Dates</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-number-objects" title="Number Objects"><span class="secnum">21.1</span> Number Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-number-constructor" title="The Number Constructor"><span class="secnum">21.1.1</span> The Number Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number-constructor-number-value" title="Number ( value )"><span class="secnum">21.1.1.1</span> Number ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-number-constructor" title="Properties of the Number Constructor"><span class="secnum">21.1.2</span> Properties of the Number Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.epsilon" title="Number.EPSILON"><span class="secnum">21.1.2.1</span> Number.EPSILON</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.isfinite" title="Number.isFinite ( number )"><span class="secnum">21.1.2.2</span> Number.isFinite ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.isinteger" title="Number.isInteger ( number )"><span class="secnum">21.1.2.3</span> Number.isInteger ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.isnan" title="Number.isNaN ( number )"><span class="secnum">21.1.2.4</span> Number.isNaN ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.issafeinteger" title="Number.isSafeInteger ( number )"><span class="secnum">21.1.2.5</span> Number.isSafeInteger ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.max_safe_integer" title="Number.MAX_SAFE_INTEGER"><span class="secnum">21.1.2.6</span> Number.MAX_SAFE_INTEGER</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.max_value" title="Number.MAX_VALUE"><span class="secnum">21.1.2.7</span> Number.MAX_VALUE</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.min_safe_integer" title="Number.MIN_SAFE_INTEGER"><span class="secnum">21.1.2.8</span> Number.MIN_SAFE_INTEGER</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.min_value" title="Number.MIN_VALUE"><span class="secnum">21.1.2.9</span> Number.MIN_VALUE</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.nan" title="Number.NaN"><span class="secnum">21.1.2.10</span> Number.NaN</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.negative_infinity" title="Number.NEGATIVE_INFINITY"><span class="secnum">21.1.2.11</span> Number.NEGATIVE_INFINITY</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.parsefloat" title="Number.parseFloat ( string )"><span class="secnum">21.1.2.12</span> Number.parseFloat ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.parseint" title="Number.parseInt ( string, radix )"><span class="secnum">21.1.2.13</span> Number.parseInt ( <var>string</var>, <var>radix</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.positive_infinity" title="Number.POSITIVE_INFINITY"><span class="secnum">21.1.2.14</span> Number.POSITIVE_INFINITY</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype" title="Number.prototype"><span class="secnum">21.1.2.15</span> Number.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-number-prototype-object" title="Properties of the Number Prototype Object"><span class="secnum">21.1.3</span> Properties of the Number Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.constructor" title="Number.prototype.constructor"><span class="secnum">21.1.3.1</span> Number.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.toexponential" title="Number.prototype.toExponential ( fractionDigits )"><span class="secnum">21.1.3.2</span> Number.prototype.toExponential ( <var>fractionDigits</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.tofixed" title="Number.prototype.toFixed ( fractionDigits )"><span class="secnum">21.1.3.3</span> Number.prototype.toFixed ( <var>fractionDigits</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.tolocalestring" title="Number.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">21.1.3.4</span> Number.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.toprecision" title="Number.prototype.toPrecision ( precision )"><span class="secnum">21.1.3.5</span> Number.prototype.toPrecision ( <var>precision</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.tostring" title="Number.prototype.toString ( [ radix ] )"><span class="secnum">21.1.3.6</span> Number.prototype.toString ( [ <var>radix</var> ] )</a></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-number.prototype.valueof" title="Number.prototype.valueOf ( )"><span class="secnum">21.1.3.7</span> Number.prototype.valueOf ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-thisnumbervalue" title="ThisNumberValue ( value )"><span class="secnum">21.1.3.7.1</span> ThisNumberValue ( <var>value</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-properties-of-number-instances" title="Properties of Number Instances"><span class="secnum">21.1.4</span> Properties of Number Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-bigint-objects" title="BigInt Objects"><span class="secnum">21.2</span> BigInt Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-bigint-constructor" title="The BigInt Constructor"><span class="secnum">21.2.1</span> The BigInt Constructor</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-bigint-constructor-number-value" title="BigInt ( value )"><span class="secnum">21.2.1.1</span> BigInt ( <var>value</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-numbertobigint" title="NumberToBigInt ( number )"><span class="secnum">21.2.1.1.1</span> NumberToBigInt ( <var>number</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-bigint-constructor" title="Properties of the BigInt Constructor"><span class="secnum">21.2.2</span> Properties of the BigInt Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.asintn" title="BigInt.asIntN ( bits, bigint )"><span class="secnum">21.2.2.1</span> BigInt.asIntN ( <var>bits</var>, <var>bigint</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.asuintn" title="BigInt.asUintN ( bits, bigint )"><span class="secnum">21.2.2.2</span> BigInt.asUintN ( <var>bits</var>, <var>bigint</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.prototype" title="BigInt.prototype"><span class="secnum">21.2.2.3</span> BigInt.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-bigint-prototype-object" title="Properties of the BigInt Prototype Object"><span class="secnum">21.2.3</span> Properties of the BigInt Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.prototype.constructor" title="BigInt.prototype.constructor"><span class="secnum">21.2.3.1</span> BigInt.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.prototype.tolocalestring" title="BigInt.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">21.2.3.2</span> BigInt.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.prototype.tostring" title="BigInt.prototype.toString ( [ radix ] )"><span class="secnum">21.2.3.3</span> BigInt.prototype.toString ( [ <var>radix</var> ] )</a></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-bigint.prototype.valueof" title="BigInt.prototype.valueOf ( )"><span class="secnum">21.2.3.4</span> BigInt.prototype.valueOf ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-thisbigintvalue" title="ThisBigIntValue ( value )"><span class="secnum">21.2.3.4.1</span> ThisBigIntValue ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.prototype-%symbol.tostringtag%" title="BigInt.prototype [ %Symbol.toStringTag% ]"><span class="secnum">21.2.3.5</span> BigInt.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-properties-of-bigint-instances" title="Properties of BigInt Instances"><span class="secnum">21.2.4</span> Properties of BigInt Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-math-object" title="The Math Object"><span class="secnum">21.3</span> The Math Object</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-value-properties-of-the-math-object" title="Value Properties of the Math Object"><span class="secnum">21.3.1</span> Value Properties of the Math Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.e" title="Math.E"><span class="secnum">21.3.1.1</span> Math.E</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.ln10" title="Math.LN10"><span class="secnum">21.3.1.2</span> Math.LN10</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.ln2" title="Math.LN2"><span class="secnum">21.3.1.3</span> Math.LN2</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log10e" title="Math.LOG10E"><span class="secnum">21.3.1.4</span> Math.LOG10E</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log2e" title="Math.LOG2E"><span class="secnum">21.3.1.5</span> Math.LOG2E</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.pi" title="Math.PI"><span class="secnum">21.3.1.6</span> Math.PI</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sqrt1_2" title="Math.SQRT1_2"><span class="secnum">21.3.1.7</span> Math.SQRT1_2</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sqrt2" title="Math.SQRT2"><span class="secnum">21.3.1.8</span> Math.SQRT2</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math-%symbol.tostringtag%" title="Math [ %Symbol.toStringTag% ]"><span class="secnum">21.3.1.9</span> Math [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-function-properties-of-the-math-object" title="Function Properties of the Math Object"><span class="secnum">21.3.2</span> Function Properties of the Math Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.abs" title="Math.abs ( x )"><span class="secnum">21.3.2.1</span> Math.abs ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.acos" title="Math.acos ( x )"><span class="secnum">21.3.2.2</span> Math.acos ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.acosh" title="Math.acosh ( x )"><span class="secnum">21.3.2.3</span> Math.acosh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.asin" title="Math.asin ( x )"><span class="secnum">21.3.2.4</span> Math.asin ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.asinh" title="Math.asinh ( x )"><span class="secnum">21.3.2.5</span> Math.asinh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.atan" title="Math.atan ( x )"><span class="secnum">21.3.2.6</span> Math.atan ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.atanh" title="Math.atanh ( x )"><span class="secnum">21.3.2.7</span> Math.atanh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.atan2" title="Math.atan2 ( y, x )"><span class="secnum">21.3.2.8</span> Math.atan2 ( <var>y</var>, <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.cbrt" title="Math.cbrt ( x )"><span class="secnum">21.3.2.9</span> Math.cbrt ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.ceil" title="Math.ceil ( x )"><span class="secnum">21.3.2.10</span> Math.ceil ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.clz32" title="Math.clz32 ( x )"><span class="secnum">21.3.2.11</span> Math.clz32 ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.cos" title="Math.cos ( x )"><span class="secnum">21.3.2.12</span> Math.cos ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.cosh" title="Math.cosh ( x )"><span class="secnum">21.3.2.13</span> Math.cosh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.exp" title="Math.exp ( x )"><span class="secnum">21.3.2.14</span> Math.exp ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.expm1" title="Math.expm1 ( x )"><span class="secnum">21.3.2.15</span> Math.expm1 ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.floor" title="Math.floor ( x )"><span class="secnum">21.3.2.16</span> Math.floor ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.fround" title="Math.fround ( x )"><span class="secnum">21.3.2.17</span> Math.fround ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.f16round" title="Math.f16round ( x )"><span class="secnum">21.3.2.18</span> Math.f16round ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.hypot" title="Math.hypot ( ...args )"><span class="secnum">21.3.2.19</span> Math.hypot ( ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.imul" title="Math.imul ( x, y )"><span class="secnum">21.3.2.20</span> Math.imul ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log" title="Math.log ( x )"><span class="secnum">21.3.2.21</span> Math.log ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log1p" title="Math.log1p ( x )"><span class="secnum">21.3.2.22</span> Math.log1p ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log10" title="Math.log10 ( x )"><span class="secnum">21.3.2.23</span> Math.log10 ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log2" title="Math.log2 ( x )"><span class="secnum">21.3.2.24</span> Math.log2 ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.max" title="Math.max ( ...args )"><span class="secnum">21.3.2.25</span> Math.max ( ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.min" title="Math.min ( ...args )"><span class="secnum">21.3.2.26</span> Math.min ( ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.pow" title="Math.pow ( base, exponent )"><span class="secnum">21.3.2.27</span> Math.pow ( <var>base</var>, <var>exponent</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.random" title="Math.random ( )"><span class="secnum">21.3.2.28</span> Math.random ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.round" title="Math.round ( x )"><span class="secnum">21.3.2.29</span> Math.round ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sign" title="Math.sign ( x )"><span class="secnum">21.3.2.30</span> Math.sign ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sin" title="Math.sin ( x )"><span class="secnum">21.3.2.31</span> Math.sin ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sinh" title="Math.sinh ( x )"><span class="secnum">21.3.2.32</span> Math.sinh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sqrt" title="Math.sqrt ( x )"><span class="secnum">21.3.2.33</span> Math.sqrt ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sumprecise" title="Math.sumPrecise ( items )"><span class="secnum">21.3.2.34</span> Math.sumPrecise ( <var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.tan" title="Math.tan ( x )"><span class="secnum">21.3.2.35</span> Math.tan ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.tanh" title="Math.tanh ( x )"><span class="secnum">21.3.2.36</span> Math.tanh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.trunc" title="Math.trunc ( x )"><span class="secnum">21.3.2.37</span> Math.trunc ( <var>x</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-date-objects" title="Date Objects"><span class="secnum">21.4</span> Date Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-overview-of-date-objects-and-definitions-of-abstract-operations" title="Overview of Date Objects and Definitions of Abstract Operations"><span class="secnum">21.4.1</span> Overview of Date Objects and Definitions of Abstract Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-time-values-and-time-range" title="Time Values and Time Range"><span class="secnum">21.4.1.1</span> Time Values and Time Range</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-time-related-constants" title="Time-related Constants"><span class="secnum">21.4.1.2</span> Time-related Constants</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-day" title="Day ( t )"><span class="secnum">21.4.1.3</span> Day ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-timewithinday" title="TimeWithinDay ( t )"><span class="secnum">21.4.1.4</span> TimeWithinDay ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-daysinyear" title="DaysInYear ( y )"><span class="secnum">21.4.1.5</span> DaysInYear ( <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-dayfromyear" title="DayFromYear ( y )"><span class="secnum">21.4.1.6</span> DayFromYear ( <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-timefromyear" title="TimeFromYear ( y )"><span class="secnum">21.4.1.7</span> TimeFromYear ( <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-yearfromtime" title="YearFromTime ( t )"><span class="secnum">21.4.1.8</span> YearFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-daywithinyear" title="DayWithinYear ( t )"><span class="secnum">21.4.1.9</span> DayWithinYear ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-inleapyear" title="InLeapYear ( t )"><span class="secnum">21.4.1.10</span> InLeapYear ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-monthfromtime" title="MonthFromTime ( t )"><span class="secnum">21.4.1.11</span> MonthFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-datefromtime" title="DateFromTime ( t )"><span class="secnum">21.4.1.12</span> DateFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-weekday" title="WeekDay ( t )"><span class="secnum">21.4.1.13</span> WeekDay ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-hourfromtime" title="HourFromTime ( t )"><span class="secnum">21.4.1.14</span> HourFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-minfromtime" title="MinFromTime ( t )"><span class="secnum">21.4.1.15</span> MinFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-secfromtime" title="SecFromTime ( t )"><span class="secnum">21.4.1.16</span> SecFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-msfromtime" title="msFromTime ( t )"><span class="secnum">21.4.1.17</span> msFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-getutcepochnanoseconds" title="GetUTCEpochNanoseconds ( year, month, day, hour, minute, second, millisecond, microsecond, nanosecond )"><span class="secnum">21.4.1.18</span> GetUTCEpochNanoseconds ( <var>year</var>, <var>month</var>, <var>day</var>, <var>hour</var>, <var>minute</var>, <var>second</var>, <var>millisecond</var>, <var>microsecond</var>, <var>nanosecond</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-time-zone-identifiers" title="Time Zone Identifiers"><span class="secnum">21.4.1.19</span> Time Zone Identifiers</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-getnamedtimezoneepochnanoseconds" title="GetNamedTimeZoneEpochNanoseconds ( timeZoneIdentifier, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond )"><span class="secnum">21.4.1.20</span> GetNamedTimeZoneEpochNanoseconds ( <var>timeZoneIdentifier</var>, <var>year</var>, <var>month</var>, <var>day</var>, <var>hour</var>, <var>minute</var>, <var>second</var>, <var>millisecond</var>, <var>microsecond</var>, <var>nanosecond</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-getnamedtimezoneoffsetnanoseconds" title="GetNamedTimeZoneOffsetNanoseconds ( timeZoneIdentifier, epochNanoseconds )"><span class="secnum">21.4.1.21</span> GetNamedTimeZoneOffsetNanoseconds ( <var>timeZoneIdentifier</var>, <var>epochNanoseconds</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-time-zone-identifier-record" title="Time Zone Identifier Record"><span class="secnum">21.4.1.22</span> Time Zone Identifier Record</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-availablenamedtimezoneidentifiers" title="AvailableNamedTimeZoneIdentifiers ( )"><span class="secnum">21.4.1.23</span> AvailableNamedTimeZoneIdentifiers ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-systemtimezoneidentifier" title="SystemTimeZoneIdentifier ( )"><span class="secnum">21.4.1.24</span> SystemTimeZoneIdentifier ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-localtime" title="LocalTime ( t )"><span class="secnum">21.4.1.25</span> LocalTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-utc-t" title="UTC ( t )"><span class="secnum">21.4.1.26</span> UTC ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-maketime" title="MakeTime ( hour, min, sec, ms )"><span class="secnum">21.4.1.27</span> MakeTime ( <var>hour</var>, <var>min</var>, <var>sec</var>, <var>ms</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-makeday" title="MakeDay ( year, month, date )"><span class="secnum">21.4.1.28</span> MakeDay ( <var>year</var>, <var>month</var>, <var>date</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-makedate" title="MakeDate ( day, time )"><span class="secnum">21.4.1.29</span> MakeDate ( <var>day</var>, <var>time</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-makefullyear" title="MakeFullYear ( year )"><span class="secnum">21.4.1.30</span> MakeFullYear ( <var>year</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-timeclip" title="TimeClip ( time )"><span class="secnum">21.4.1.31</span> TimeClip ( <var>time</var> )</a></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-date-time-string-format" title="Date Time String Format"><span class="secnum">21.4.1.32</span> Date Time String Format</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-expanded-years" title="Expanded Years"><span class="secnum">21.4.1.32.1</span> Expanded Years</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-time-zone-offset-strings" title="Time Zone Offset String Format"><span class="secnum">21.4.1.33</span> Time Zone Offset String Format</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-istimezoneoffsetstring" title="IsTimeZoneOffsetString ( offsetString )"><span class="secnum">21.4.1.33.1</span> IsTimeZoneOffsetString ( <var>offsetString</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-parsetimezoneoffsetstring" title="ParseTimeZoneOffsetString ( offsetString )"><span class="secnum">21.4.1.33.2</span> ParseTimeZoneOffsetString ( <var>offsetString</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-date-constructor" title="The Date Constructor"><span class="secnum">21.4.2</span> The Date Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date" title="Date ( ...values )"><span class="secnum">21.4.2.1</span> Date ( ...<var>values</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-date-constructor" title="Properties of the Date Constructor"><span class="secnum">21.4.3</span> Properties of the Date Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.now" title="Date.now ( )"><span class="secnum">21.4.3.1</span> Date.now ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.parse" title="Date.parse ( string )"><span class="secnum">21.4.3.2</span> Date.parse ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype" title="Date.prototype"><span class="secnum">21.4.3.3</span> Date.prototype</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.utc" title="Date.UTC ( year [ , month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] ] )"><span class="secnum">21.4.3.4</span> Date.UTC ( <var>year</var> [ , <var>month</var> [ , <var>date</var> [ , <var>hours</var> [ , <var>minutes</var> [ , <var>seconds</var> [ , <var>ms</var> ] ] ] ] ] ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-date-prototype-object" title="Properties of the Date Prototype Object"><span class="secnum">21.4.4</span> Properties of the Date Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.constructor" title="Date.prototype.constructor"><span class="secnum">21.4.4.1</span> Date.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getdate" title="Date.prototype.getDate ( )"><span class="secnum">21.4.4.2</span> Date.prototype.getDate ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getday" title="Date.prototype.getDay ( )"><span class="secnum">21.4.4.3</span> Date.prototype.getDay ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getfullyear" title="Date.prototype.getFullYear ( )"><span class="secnum">21.4.4.4</span> Date.prototype.getFullYear ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.gethours" title="Date.prototype.getHours ( )"><span class="secnum">21.4.4.5</span> Date.prototype.getHours ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getmilliseconds" title="Date.prototype.getMilliseconds ( )"><span class="secnum">21.4.4.6</span> Date.prototype.getMilliseconds ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getminutes" title="Date.prototype.getMinutes ( )"><span class="secnum">21.4.4.7</span> Date.prototype.getMinutes ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getmonth" title="Date.prototype.getMonth ( )"><span class="secnum">21.4.4.8</span> Date.prototype.getMonth ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getseconds" title="Date.prototype.getSeconds ( )"><span class="secnum">21.4.4.9</span> Date.prototype.getSeconds ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.gettime" title="Date.prototype.getTime ( )"><span class="secnum">21.4.4.10</span> Date.prototype.getTime ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.gettimezoneoffset" title="Date.prototype.getTimezoneOffset ( )"><span class="secnum">21.4.4.11</span> Date.prototype.getTimezoneOffset ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcdate" title="Date.prototype.getUTCDate ( )"><span class="secnum">21.4.4.12</span> Date.prototype.getUTCDate ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcday" title="Date.prototype.getUTCDay ( )"><span class="secnum">21.4.4.13</span> Date.prototype.getUTCDay ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcfullyear" title="Date.prototype.getUTCFullYear ( )"><span class="secnum">21.4.4.14</span> Date.prototype.getUTCFullYear ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutchours" title="Date.prototype.getUTCHours ( )"><span class="secnum">21.4.4.15</span> Date.prototype.getUTCHours ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcmilliseconds" title="Date.prototype.getUTCMilliseconds ( )"><span class="secnum">21.4.4.16</span> Date.prototype.getUTCMilliseconds ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcminutes" title="Date.prototype.getUTCMinutes ( )"><span class="secnum">21.4.4.17</span> Date.prototype.getUTCMinutes ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcmonth" title="Date.prototype.getUTCMonth ( )"><span class="secnum">21.4.4.18</span> Date.prototype.getUTCMonth ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcseconds" title="Date.prototype.getUTCSeconds ( )"><span class="secnum">21.4.4.19</span> Date.prototype.getUTCSeconds ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setdate" title="Date.prototype.setDate ( date )"><span class="secnum">21.4.4.20</span> Date.prototype.setDate ( <var>date</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setfullyear" title="Date.prototype.setFullYear ( year [ , month [ , date ] ] )"><span class="secnum">21.4.4.21</span> Date.prototype.setFullYear ( <var>year</var> [ , <var>month</var> [ , <var>date</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.sethours" title="Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )"><span class="secnum">21.4.4.22</span> Date.prototype.setHours ( <var>hour</var> [ , <var>min</var> [ , <var>sec</var> [ , <var>ms</var> ] ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setmilliseconds" title="Date.prototype.setMilliseconds ( ms )"><span class="secnum">21.4.4.23</span> Date.prototype.setMilliseconds ( <var>ms</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setminutes" title="Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )"><span class="secnum">21.4.4.24</span> Date.prototype.setMinutes ( <var>min</var> [ , <var>sec</var> [ , <var>ms</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setmonth" title="Date.prototype.setMonth ( month [ , date ] )"><span class="secnum">21.4.4.25</span> Date.prototype.setMonth ( <var>month</var> [ , <var>date</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setseconds" title="Date.prototype.setSeconds ( sec [ , ms ] )"><span class="secnum">21.4.4.26</span> Date.prototype.setSeconds ( <var>sec</var> [ , <var>ms</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.settime" title="Date.prototype.setTime ( time )"><span class="secnum">21.4.4.27</span> Date.prototype.setTime ( <var>time</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcdate" title="Date.prototype.setUTCDate ( date )"><span class="secnum">21.4.4.28</span> Date.prototype.setUTCDate ( <var>date</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcfullyear" title="Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )"><span class="secnum">21.4.4.29</span> Date.prototype.setUTCFullYear ( <var>year</var> [ , <var>month</var> [ , <var>date</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutchours" title="Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )"><span class="secnum">21.4.4.30</span> Date.prototype.setUTCHours ( <var>hour</var> [ , <var>min</var> [ , <var>sec</var> [ , <var>ms</var> ] ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcmilliseconds" title="Date.prototype.setUTCMilliseconds ( ms )"><span class="secnum">21.4.4.31</span> Date.prototype.setUTCMilliseconds ( <var>ms</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcminutes" title="Date.prototype.setUTCMinutes ( min [ , sec [ , ms ] ] )"><span class="secnum">21.4.4.32</span> Date.prototype.setUTCMinutes ( <var>min</var> [ , <var>sec</var> [ , <var>ms</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcmonth" title="Date.prototype.setUTCMonth ( month [ , date ] )"><span class="secnum">21.4.4.33</span> Date.prototype.setUTCMonth ( <var>month</var> [ , <var>date</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcseconds" title="Date.prototype.setUTCSeconds ( sec [ , ms ] )"><span class="secnum">21.4.4.34</span> Date.prototype.setUTCSeconds ( <var>sec</var> [ , <var>ms</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.todatestring" title="Date.prototype.toDateString ( )"><span class="secnum">21.4.4.35</span> Date.prototype.toDateString ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.toisostring" title="Date.prototype.toISOString ( )"><span class="secnum">21.4.4.36</span> Date.prototype.toISOString ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.tojson" title="Date.prototype.toJSON ( key )"><span class="secnum">21.4.4.37</span> Date.prototype.toJSON ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.tolocaledatestring" title="Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">21.4.4.38</span> Date.prototype.toLocaleDateString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.tolocalestring" title="Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">21.4.4.39</span> Date.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.tolocaletimestring" title="Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">21.4.4.40</span> Date.prototype.toLocaleTimeString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-date.prototype.tostring" title="Date.prototype.toString ( )"><span class="secnum">21.4.4.41</span> Date.prototype.toString ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-timestring" title="TimeString ( tv )"><span class="secnum">21.4.4.41.1</span> TimeString ( <var>tv</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-datestring" title="DateString ( tv )"><span class="secnum">21.4.4.41.2</span> DateString ( <var>tv</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-timezoneestring" title="TimeZoneString ( tv )"><span class="secnum">21.4.4.41.3</span> TimeZoneString ( <var>tv</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-todatestring" title="ToDateString ( tv )"><span class="secnum">21.4.4.41.4</span> ToDateString ( <var>tv</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.totimestring" title="Date.prototype.toTimeString ( )"><span class="secnum">21.4.4.42</span> Date.prototype.toTimeString ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.toutcstring" title="Date.prototype.toUTCString ( )"><span class="secnum">21.4.4.43</span> Date.prototype.toUTCString ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.valueof" title="Date.prototype.valueOf ( )"><span class="secnum">21.4.4.44</span> Date.prototype.valueOf ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype-%symbol.toprimitive%" title="Date.prototype [ %Symbol.toPrimitive% ] ( hint )"><span class="secnum">21.4.4.45</span> Date.prototype [ %Symbol.toPrimitive% ] ( <var>hint</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-properties-of-date-instances" title="Properties of Date Instances"><span class="secnum">21.4.5</span> Properties of Date Instances</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-text-processing" title="Text Processing"><span class="secnum">22</span> Text Processing</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string-objects" title="String Objects"><span class="secnum">22.1</span> String Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string-constructor" title="The String Constructor"><span class="secnum">22.1.1</span> The String Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string-constructor-string-value" title="String ( value )"><span class="secnum">22.1.1.1</span> String ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-the-string-constructor" title="Properties of the String Constructor"><span class="secnum">22.1.2</span> Properties of the String Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.fromcharcode" title="String.fromCharCode ( ...codeUnits )"><span class="secnum">22.1.2.1</span> String.fromCharCode ( ...<var>codeUnits</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.fromcodepoint" title="String.fromCodePoint ( ...codePoints )"><span class="secnum">22.1.2.2</span> String.fromCodePoint ( ...<var>codePoints</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype" title="String.prototype"><span class="secnum">22.1.2.3</span> String.prototype</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.raw" title="String.raw ( template, ...substitutions )"><span class="secnum">22.1.2.4</span> String.raw ( <var>template</var>, ...<var>substitutions</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-the-string-prototype-object" title="Properties of the String Prototype Object"><span class="secnum">22.1.3</span> Properties of the String Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.at" title="String.prototype.at ( index )"><span class="secnum">22.1.3.1</span> String.prototype.at ( <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.charat" title="String.prototype.charAt ( pos )"><span class="secnum">22.1.3.2</span> String.prototype.charAt ( <var>pos</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.charcodeat" title="String.prototype.charCodeAt ( pos )"><span class="secnum">22.1.3.3</span> String.prototype.charCodeAt ( <var>pos</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.codepointat" title="String.prototype.codePointAt ( pos )"><span class="secnum">22.1.3.4</span> String.prototype.codePointAt ( <var>pos</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.concat" title="String.prototype.concat ( ...args )"><span class="secnum">22.1.3.5</span> String.prototype.concat ( ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.constructor" title="String.prototype.constructor"><span class="secnum">22.1.3.6</span> String.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.endswith" title="String.prototype.endsWith ( searchString [ , endPosition ] )"><span class="secnum">22.1.3.7</span> String.prototype.endsWith ( <var>searchString</var> [ , <var>endPosition</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.includes" title="String.prototype.includes ( searchString [ , position ] )"><span class="secnum">22.1.3.8</span> String.prototype.includes ( <var>searchString</var> [ , <var>position</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.indexof" title="String.prototype.indexOf ( searchString [ , position ] )"><span class="secnum">22.1.3.9</span> String.prototype.indexOf ( <var>searchString</var> [ , <var>position</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.iswellformed" title="String.prototype.isWellFormed ( )"><span class="secnum">22.1.3.10</span> String.prototype.isWellFormed ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.lastindexof" title="String.prototype.lastIndexOf ( searchString [ , position ] )"><span class="secnum">22.1.3.11</span> String.prototype.lastIndexOf ( <var>searchString</var> [ , <var>position</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.localecompare" title="String.prototype.localeCompare ( that [ , reserved1 [ , reserved2 ] ] )"><span class="secnum">22.1.3.12</span> String.prototype.localeCompare ( <var>that</var> [ , <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.match" title="String.prototype.match ( regexp )"><span class="secnum">22.1.3.13</span> String.prototype.match ( <var>regexp</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.matchall" title="String.prototype.matchAll ( regexp )"><span class="secnum">22.1.3.14</span> String.prototype.matchAll ( <var>regexp</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.normalize" title="String.prototype.normalize ( [ form ] )"><span class="secnum">22.1.3.15</span> String.prototype.normalize ( [ <var>form</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.padend" title="String.prototype.padEnd ( maxLength [ , fillString ] )"><span class="secnum">22.1.3.16</span> String.prototype.padEnd ( <var>maxLength</var> [ , <var>fillString</var> ] )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string.prototype.padstart" title="String.prototype.padStart ( maxLength [ , fillString ] )"><span class="secnum">22.1.3.17</span> String.prototype.padStart ( <var>maxLength</var> [ , <var>fillString</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-stringpaddingbuiltinsimpl" title="StringPaddingBuiltinsImpl ( O, maxLength, fillString, placement )"><span class="secnum">22.1.3.17.1</span> StringPaddingBuiltinsImpl ( <var>O</var>, <var>maxLength</var>, <var>fillString</var>, <var>placement</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-stringpad" title="StringPad ( S, maxLength, fillString, placement )"><span class="secnum">22.1.3.17.2</span> StringPad ( <var>S</var>, <var>maxLength</var>, <var>fillString</var>, <var>placement</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-tozeropaddeddecimalstring" title="ToZeroPaddedDecimalString ( n, minLength )"><span class="secnum">22.1.3.17.3</span> ToZeroPaddedDecimalString ( <var>n</var>, <var>minLength</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.repeat" title="String.prototype.repeat ( count )"><span class="secnum">22.1.3.18</span> String.prototype.repeat ( <var>count</var> )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string.prototype.replace" title="String.prototype.replace ( searchValue, replaceValue )"><span class="secnum">22.1.3.19</span> String.prototype.replace ( <var>searchValue</var>, <var>replaceValue</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-getsubstitution" title="GetSubstitution ( matched, str, position, captures, namedCaptures, replacementTemplate )"><span class="secnum">22.1.3.19.1</span> GetSubstitution ( <var>matched</var>, <var>str</var>, <var>position</var>, <var>captures</var>, <var>namedCaptures</var>, <var>replacementTemplate</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.replaceall" title="String.prototype.replaceAll ( searchValue, replaceValue )"><span class="secnum">22.1.3.20</span> String.prototype.replaceAll ( <var>searchValue</var>, <var>replaceValue</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.search" title="String.prototype.search ( regexp )"><span class="secnum">22.1.3.21</span> String.prototype.search ( <var>regexp</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.slice" title="String.prototype.slice ( start, end )"><span class="secnum">22.1.3.22</span> String.prototype.slice ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.split" title="String.prototype.split ( separator, limit )"><span class="secnum">22.1.3.23</span> String.prototype.split ( <var>separator</var>, <var>limit</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.startswith" title="String.prototype.startsWith ( searchString [ , position ] )"><span class="secnum">22.1.3.24</span> String.prototype.startsWith ( <var>searchString</var> [ , <var>position</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.substring" title="String.prototype.substring ( start, end )"><span class="secnum">22.1.3.25</span> String.prototype.substring ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.tolocalelowercase" title="String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">22.1.3.26</span> String.prototype.toLocaleLowerCase ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.tolocaleuppercase" title="String.prototype.toLocaleUpperCase ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">22.1.3.27</span> String.prototype.toLocaleUpperCase ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.tolowercase" title="String.prototype.toLowerCase ( )"><span class="secnum">22.1.3.28</span> String.prototype.toLowerCase ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.tostring" title="String.prototype.toString ( )"><span class="secnum">22.1.3.29</span> String.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.touppercase" title="String.prototype.toUpperCase ( )"><span class="secnum">22.1.3.30</span> String.prototype.toUpperCase ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.towellformed" title="String.prototype.toWellFormed ( )"><span class="secnum">22.1.3.31</span> String.prototype.toWellFormed ( )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string.prototype.trim" title="String.prototype.trim ( )"><span class="secnum">22.1.3.32</span> String.prototype.trim ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-trimstring" title="TrimString ( string, where )"><span class="secnum">22.1.3.32.1</span> TrimString ( <var>string</var>, <var>where</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.trimend" title="String.prototype.trimEnd ( )"><span class="secnum">22.1.3.33</span> String.prototype.trimEnd ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.trimstart" title="String.prototype.trimStart ( )"><span class="secnum">22.1.3.34</span> String.prototype.trimStart ( )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string.prototype.valueof" title="String.prototype.valueOf ( )"><span class="secnum">22.1.3.35</span> String.prototype.valueOf ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-thisstringvalue" title="ThisStringValue ( value )"><span class="secnum">22.1.3.35.1</span> ThisStringValue ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype-%symbol.iterator%" title="String.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">22.1.3.36</span> String.prototype [ %Symbol.iterator% ] ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-string-instances" title="Properties of String Instances"><span class="secnum">22.1.4</span> Properties of String Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-properties-of-string-instances-length" title="length"><span class="secnum">22.1.4.1</span> length</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string-iterator-objects" title="String Iterator Objects"><span class="secnum">22.1.5</span> String Iterator Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-%stringiteratorprototype%-object" title="The %StringIteratorPrototype% Object"><span class="secnum">22.1.5.1</span> The %StringIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-%stringiteratorprototype%.next" title="%StringIteratorPrototype%.next ( )"><span class="secnum">22.1.5.1.1</span> %StringIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-%stringiteratorprototype%-%symbol.tostringtag%" title="%StringIteratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">22.1.5.1.2</span> %StringIteratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-regexp-regular-expression-objects" title="RegExp (Regular Expression) Objects"><span class="secnum">22.2</span> RegExp (Regular Expression) Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-patterns" title="Patterns"><span class="secnum">22.2.1</span> Patterns</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-patterns-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">22.2.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-countleftcapturingparenswithin" title="Static Semantics: CountLeftCapturingParensWithin ( node )"><span class="secnum">22.2.1.2</span> SS: CountLeftCapturingParensWithin ( <var>node</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-countleftcapturingparensbefore" title="Static Semantics: CountLeftCapturingParensBefore ( node )"><span class="secnum">22.2.1.3</span> SS: CountLeftCapturingParensBefore ( <var>node</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-mightbothparticipate" title="Static Semantics: MightBothParticipate ( x, y )"><span class="secnum">22.2.1.4</span> SS: MightBothParticipate ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-patterns-static-semantics-capturing-group-number" title="Static Semantics: CapturingGroupNumber"><span class="secnum">22.2.1.5</span> SS: CapturingGroupNumber</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-patterns-static-semantics-is-character-class" title="Static Semantics: IsCharacterClass"><span class="secnum">22.2.1.6</span> SS: IsCharacterClass</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-patterns-static-semantics-character-value" title="Static Semantics: CharacterValue"><span class="secnum">22.2.1.7</span> SS: CharacterValue</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-static-semantics-maycontainstrings" title="Static Semantics: MayContainStrings"><span class="secnum">22.2.1.8</span> SS: MayContainStrings</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-groupspecifiersthatmatch" title="Static Semantics: GroupSpecifiersThatMatch ( thisGroupName )"><span class="secnum">22.2.1.9</span> SS: GroupSpecifiersThatMatch ( <var>thisGroupName</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-static-semantics-capturinggroupname" title="Static Semantics: CapturingGroupName"><span class="secnum">22.2.1.10</span> SS: CapturingGroupName</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpidentifiercodepoints" title="Static Semantics: RegExpIdentifierCodePoints"><span class="secnum">22.2.1.11</span> SS: RegExpIdentifierCodePoints</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpidentifiercodepoint" title="Static Semantics: RegExpIdentifierCodePoint"><span class="secnum">22.2.1.12</span> SS: RegExpIdentifierCodePoint</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-pattern-semantics" title="Pattern Semantics"><span class="secnum">22.2.2</span> Pattern Semantics</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-pattern-notation" title="Notation"><span class="secnum">22.2.2.1</span> Notation</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp-records" title="RegExp Records"><span class="secnum">22.2.2.1.1</span> RegExp Records</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-compilepattern" title="Runtime Semantics: CompilePattern"><span class="secnum">22.2.2.2</span> RS: CompilePattern</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-compilesubpattern" title="Runtime Semantics: CompileSubpattern"><span class="secnum">22.2.2.3</span> RS: CompileSubpattern</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-repeatmatcher-abstract-operation" title="RepeatMatcher ( m, min, max, greedy, x, c, parenIndex, parenCount )"><span class="secnum">22.2.2.3.1</span> RepeatMatcher ( <var>m</var>, <var>min</var>, <var>max</var>, <var>greedy</var>, <var>x</var>, <var>c</var>, <var>parenIndex</var>, <var>parenCount</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-emptymatcher" title="EmptyMatcher ( )"><span class="secnum">22.2.2.3.2</span> EmptyMatcher ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-matchtwoalternatives" title="MatchTwoAlternatives ( m1, m2 )"><span class="secnum">22.2.2.3.3</span> MatchTwoAlternatives ( <var>m1</var>, <var>m2</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-matchsequence" title="MatchSequence ( m1, m2, direction )"><span class="secnum">22.2.2.3.4</span> MatchSequence ( <var>m1</var>, <var>m2</var>, <var>direction</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-compileassertion" title="Runtime Semantics: CompileAssertion"><span class="secnum">22.2.2.4</span> RS: CompileAssertion</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-iswordchar-abstract-operation" title="IsWordChar ( rer, Input, e )"><span class="secnum">22.2.2.4.1</span> IsWordChar ( <var>rer</var>, <var>Input</var>, <var>e</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-compilequantifier" title="Runtime Semantics: CompileQuantifier"><span class="secnum">22.2.2.5</span> RS: CompileQuantifier</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-compilequantifierprefix" title="Runtime Semantics: CompileQuantifierPrefix"><span class="secnum">22.2.2.6</span> RS: CompileQuantifierPrefix</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-compileatom" title="Runtime Semantics: CompileAtom"><span class="secnum">22.2.2.7</span> RS: CompileAtom</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-charactersetmatcher-abstract-operation" title="CharacterSetMatcher ( rer, A, invert, direction )"><span class="secnum">22.2.2.7.1</span> CharacterSetMatcher ( <var>rer</var>, <var>A</var>, <var>invert</var>, <var>direction</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-backreference-matcher" title="BackreferenceMatcher ( rer, ns, direction )"><span class="secnum">22.2.2.7.2</span> BackreferenceMatcher ( <var>rer</var>, <var>ns</var>, <var>direction</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-canonicalize-ch" title="Canonicalize ( rer, ch )"><span class="secnum">22.2.2.7.3</span> Canonicalize ( <var>rer</var>, <var>ch</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-updatemodifiers" title="UpdateModifiers ( rer, add, remove )"><span class="secnum">22.2.2.7.4</span> UpdateModifiers ( <var>rer</var>, <var>add</var>, <var>remove</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-compilecharacterclass" title="Runtime Semantics: CompileCharacterClass"><span class="secnum">22.2.2.8</span> RS: CompileCharacterClass</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-compiletocharset" title="Runtime Semantics: CompileToCharSet"><span class="secnum">22.2.2.9</span> RS: CompileToCharSet</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-characterrange-abstract-operation" title="CharacterRange ( A, B )"><span class="secnum">22.2.2.9.1</span> CharacterRange ( <var>A</var>, <var>B</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-haseitherunicodeflag-abstract-operation" title="HasEitherUnicodeFlag ( rer )"><span class="secnum">22.2.2.9.2</span> HasEitherUnicodeFlag ( <var>rer</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-wordcharacters" title="WordCharacters ( rer )"><span class="secnum">22.2.2.9.3</span> WordCharacters ( <var>rer</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-allcharacters" title="AllCharacters ( rer )"><span class="secnum">22.2.2.9.4</span> AllCharacters ( <var>rer</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-maybesimplecasefolding" title="MaybeSimpleCaseFolding ( rer, A )"><span class="secnum">22.2.2.9.5</span> MaybeSimpleCaseFolding ( <var>rer</var>, <var>A</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-charactercomplement" title="CharacterComplement ( rer, S )"><span class="secnum">22.2.2.9.6</span> CharacterComplement ( <var>rer</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-unicodematchproperty-p" title="UnicodeMatchProperty ( rer, p )"><span class="secnum">22.2.2.9.7</span> UnicodeMatchProperty ( <var>rer</var>, <var>p</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-unicodematchpropertyvalue-p-v" title="UnicodeMatchPropertyValue ( p, v )"><span class="secnum">22.2.2.9.8</span> UnicodeMatchPropertyValue ( <var>p</var>, <var>v</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-compileclasssetstring" title="Runtime Semantics: CompileClassSetString"><span class="secnum">22.2.2.10</span> RS: CompileClassSetString</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-abstract-operations-for-regexp-creation" title="Abstract Operations for RegExp Creation"><span class="secnum">22.2.3</span> Abstract Operations for RegExp Creation</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpcreate" title="RegExpCreate ( P, F )"><span class="secnum">22.2.3.1</span> RegExpCreate ( <var>P</var>, <var>F</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpalloc" title="RegExpAlloc ( newTarget )"><span class="secnum">22.2.3.2</span> RegExpAlloc ( <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpinitialize" title="RegExpInitialize ( obj, pattern, flags )"><span class="secnum">22.2.3.3</span> RegExpInitialize ( <var>obj</var>, <var>pattern</var>, <var>flags</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-parsepattern" title="Static Semantics: ParsePattern ( patternText, u, v )"><span class="secnum">22.2.3.4</span> SS: ParsePattern ( <var>patternText</var>, <var>u</var>, <var>v</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-regexp-constructor" title="The RegExp Constructor"><span class="secnum">22.2.4</span> The RegExp Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp-pattern-flags" title="RegExp ( pattern, flags )"><span class="secnum">22.2.4.1</span> RegExp ( <var>pattern</var>, <var>flags</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-the-regexp-constructor" title="Properties of the RegExp Constructor"><span class="secnum">22.2.5</span> Properties of the RegExp Constructor</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-regexp.escape" title="RegExp.escape ( S )"><span class="secnum">22.2.5.1</span> RegExp.escape ( <var>S</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-encodeforregexpescape" title="EncodeForRegExpEscape ( cp )"><span class="secnum">22.2.5.1.1</span> EncodeForRegExpEscape ( <var>cp</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype" title="RegExp.prototype"><span class="secnum">22.2.5.2</span> RegExp.prototype</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp-%symbol.species%" title="get RegExp [ %Symbol.species% ]"><span class="secnum">22.2.5.3</span> get RegExp [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-the-regexp-prototype-object" title="Properties of the RegExp Prototype Object"><span class="secnum">22.2.6</span> Properties of the RegExp Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype.constructor" title="RegExp.prototype.constructor"><span class="secnum">22.2.6.1</span> RegExp.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype.exec" title="RegExp.prototype.exec ( string )"><span class="secnum">22.2.6.2</span> RegExp.prototype.exec ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.dotAll" title="get RegExp.prototype.dotAll"><span class="secnum">22.2.6.3</span> get RegExp.prototype.dotAll</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-get-regexp.prototype.flags" title="get RegExp.prototype.flags"><span class="secnum">22.2.6.4</span> get RegExp.prototype.flags</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexphasflag" title="RegExpHasFlag ( R, codeUnit )"><span class="secnum">22.2.6.4.1</span> RegExpHasFlag ( <var>R</var>, <var>codeUnit</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.global" title="get RegExp.prototype.global"><span class="secnum">22.2.6.5</span> get RegExp.prototype.global</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.hasIndices" title="get RegExp.prototype.hasIndices"><span class="secnum">22.2.6.6</span> get RegExp.prototype.hasIndices</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.ignorecase" title="get RegExp.prototype.ignoreCase"><span class="secnum">22.2.6.7</span> get RegExp.prototype.ignoreCase</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype-%symbol.match%" title="RegExp.prototype [ %Symbol.match% ] ( string )"><span class="secnum">22.2.6.8</span> RegExp.prototype [ %Symbol.match% ] ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp-prototype-%symbol.matchall%" title="RegExp.prototype [ %Symbol.matchAll% ] ( string )"><span class="secnum">22.2.6.9</span> RegExp.prototype [ %Symbol.matchAll% ] ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.multiline" title="get RegExp.prototype.multiline"><span class="secnum">22.2.6.10</span> get RegExp.prototype.multiline</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype-%symbol.replace%" title="RegExp.prototype [ %Symbol.replace% ] ( string, replaceValue )"><span class="secnum">22.2.6.11</span> RegExp.prototype [ %Symbol.replace% ] ( <var>string</var>, <var>replaceValue</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype-%symbol.search%" title="RegExp.prototype [ %Symbol.search% ] ( string )"><span class="secnum">22.2.6.12</span> RegExp.prototype [ %Symbol.search% ] ( <var>string</var> )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-get-regexp.prototype.source" title="get RegExp.prototype.source"><span class="secnum">22.2.6.13</span> get RegExp.prototype.source</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-escaperegexppattern" title="EscapeRegExpPattern ( P, F )"><span class="secnum">22.2.6.13.1</span> EscapeRegExpPattern ( <var>P</var>, <var>F</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype-%symbol.split%" title="RegExp.prototype [ %Symbol.split% ] ( string, limit )"><span class="secnum">22.2.6.14</span> RegExp.prototype [ %Symbol.split% ] ( <var>string</var>, <var>limit</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.sticky" title="get RegExp.prototype.sticky"><span class="secnum">22.2.6.15</span> get RegExp.prototype.sticky</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype.test" title="RegExp.prototype.test ( S )"><span class="secnum">22.2.6.16</span> RegExp.prototype.test ( <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype.tostring" title="RegExp.prototype.toString ( )"><span class="secnum">22.2.6.17</span> RegExp.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.unicode" title="get RegExp.prototype.unicode"><span class="secnum">22.2.6.18</span> get RegExp.prototype.unicode</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.unicodesets" title="get RegExp.prototype.unicodeSets"><span class="secnum">22.2.6.19</span> get RegExp.prototype.unicodeSets</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-abstract-operations-for-regexp-matching" title="Abstract Operations for RegExp Matching"><span class="secnum">22.2.7</span> Abstract Operations for RegExp Matching</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpexec" title="RegExpExec ( R, S )"><span class="secnum">22.2.7.1</span> RegExpExec ( <var>R</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpbuiltinexec" title="RegExpBuiltinExec ( R, S )"><span class="secnum">22.2.7.2</span> RegExpBuiltinExec ( <var>R</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-advancestringindex" title="AdvanceStringIndex ( S, index, unicode )"><span class="secnum">22.2.7.3</span> AdvanceStringIndex ( <var>S</var>, <var>index</var>, <var>unicode</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-getstringindex" title="GetStringIndex ( S, codePointIndex )"><span class="secnum">22.2.7.4</span> GetStringIndex ( <var>S</var>, <var>codePointIndex</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-match-records" title="Match Records"><span class="secnum">22.2.7.5</span> Match Records</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-getmatchstring" title="GetMatchString ( S, match )"><span class="secnum">22.2.7.6</span> GetMatchString ( <var>S</var>, <var>match</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-getmatchindexpair" title="GetMatchIndexPair ( S, match )"><span class="secnum">22.2.7.7</span> GetMatchIndexPair ( <var>S</var>, <var>match</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-makematchindicesindexpairarray" title="MakeMatchIndicesIndexPairArray ( S, indices, groupNames, hasGroups )"><span class="secnum">22.2.7.8</span> MakeMatchIndicesIndexPairArray ( <var>S</var>, <var>indices</var>, <var>groupNames</var>, <var>hasGroups</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-regexp-instances" title="Properties of RegExp Instances"><span class="secnum">22.2.8</span> Properties of RegExp Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-lastindex" title="lastIndex"><span class="secnum">22.2.8.1</span> lastIndex</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-regexp-string-iterator-objects" title="RegExp String Iterator Objects"><span class="secnum">22.2.9</span> RegExp String Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-createregexpstringiterator" title="CreateRegExpStringIterator ( R, S, global, fullUnicode )"><span class="secnum">22.2.9.1</span> CreateRegExpStringIterator ( <var>R</var>, <var>S</var>, <var>global</var>, <var>fullUnicode</var> )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-%regexpstringiteratorprototype%-object" title="The %RegExpStringIteratorPrototype% Object"><span class="secnum">22.2.9.2</span> The %RegExpStringIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-%regexpstringiteratorprototype%.next" title="%RegExpStringIteratorPrototype%.next ( )"><span class="secnum">22.2.9.2.1</span> %RegExpStringIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-%regexpstringiteratorprototype%-%symbol.tostringtag%" title="%RegExpStringIteratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">22.2.9.2.2</span> %RegExpStringIteratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-properties-of-regexp-string-iterator-instances" title="Properties of RegExp String Iterator Instances"><span class="secnum">22.2.9.3</span> Properties of RegExp String Iterator Instances</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-indexed-collections" title="Indexed Collections"><span class="secnum">23</span> Indexed Collections</a><ol class="toc"><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array-objects" title="Array Objects"><span class="secnum">23.1</span> Array Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array-constructor" title="The Array Constructor"><span class="secnum">23.1.1</span> The Array Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array" title="Array ( ...values )"><span class="secnum">23.1.1.1</span> Array ( ...<var>values</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-the-array-constructor" title="Properties of the Array Constructor"><span class="secnum">23.1.2</span> Properties of the Array Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.from" title="Array.from ( items [ , mapper [ , thisArg ] ] )"><span class="secnum">23.1.2.1</span> Array.from ( <var>items</var> [ , <var>mapper</var> [ , <var>thisArg</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.fromasync" title="Array.fromAsync ( items [ , mapper [ , thisArg ] ] )"><span class="secnum">23.1.2.2</span> Array.fromAsync ( <var>items</var> [ , <var>mapper</var> [ , <var>thisArg</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.isarray" title="Array.isArray ( arg )"><span class="secnum">23.1.2.3</span> Array.isArray ( <var>arg</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.of" title="Array.of ( ...items )"><span class="secnum">23.1.2.4</span> Array.of ( ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype" title="Array.prototype"><span class="secnum">23.1.2.5</span> Array.prototype</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-array-%symbol.species%" title="get Array [ %Symbol.species% ]"><span class="secnum">23.1.2.6</span> get Array [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-the-array-prototype-object" title="Properties of the Array Prototype Object"><span class="secnum">23.1.3</span> Properties of the Array Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.at" title="Array.prototype.at ( index )"><span class="secnum">23.1.3.1</span> Array.prototype.at ( <var>index</var> )</a></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array.prototype.concat" title="Array.prototype.concat ( ...items )"><span class="secnum">23.1.3.2</span> Array.prototype.concat ( ...<var>items</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-isconcatspreadable" title="IsConcatSpreadable ( O )"><span class="secnum">23.1.3.2.1</span> IsConcatSpreadable ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.constructor" title="Array.prototype.constructor"><span class="secnum">23.1.3.3</span> Array.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.copywithin" title="Array.prototype.copyWithin ( target, start [ , end ] )"><span class="secnum">23.1.3.4</span> Array.prototype.copyWithin ( <var>target</var>, <var>start</var> [ , <var>end</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.entries" title="Array.prototype.entries ( )"><span class="secnum">23.1.3.5</span> Array.prototype.entries ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.every" title="Array.prototype.every ( callback [ , thisArg ] )"><span class="secnum">23.1.3.6</span> Array.prototype.every ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.fill" title="Array.prototype.fill ( value [ , start [ , end ] ] )"><span class="secnum">23.1.3.7</span> Array.prototype.fill ( <var>value</var> [ , <var>start</var> [ , <var>end</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.filter" title="Array.prototype.filter ( callback [ , thisArg ] )"><span class="secnum">23.1.3.8</span> Array.prototype.filter ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.find" title="Array.prototype.find ( predicate [ , thisArg ] )"><span class="secnum">23.1.3.9</span> Array.prototype.find ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.findindex" title="Array.prototype.findIndex ( predicate [ , thisArg ] )"><span class="secnum">23.1.3.10</span> Array.prototype.findIndex ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.findlast" title="Array.prototype.findLast ( predicate [ , thisArg ] )"><span class="secnum">23.1.3.11</span> Array.prototype.findLast ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array.prototype.findlastindex" title="Array.prototype.findLastIndex ( predicate [ , thisArg ] )"><span class="secnum">23.1.3.12</span> Array.prototype.findLastIndex ( <var>predicate</var> [ , <var>thisArg</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-findviapredicate" title="FindViaPredicate ( O, len, direction, predicate, thisArg )"><span class="secnum">23.1.3.12.1</span> FindViaPredicate ( <var>O</var>, <var>len</var>, <var>direction</var>, <var>predicate</var>, <var>thisArg</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array.prototype.flat" title="Array.prototype.flat ( [ depth ] )"><span class="secnum">23.1.3.13</span> Array.prototype.flat ( [ <var>depth</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-flattenintoarray" title="FlattenIntoArray ( target, source, sourceLen, start, depth [ , mapperFunction [ , thisArg ] ] )"><span class="secnum">23.1.3.13.1</span> FlattenIntoArray ( <var>target</var>, <var>source</var>, <var>sourceLen</var>, <var>start</var>, <var>depth</var> [ , <var>mapperFunction</var> [ , <var>thisArg</var> ] ] )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.flatmap" title="Array.prototype.flatMap ( mapperFunction [ , thisArg ] )"><span class="secnum">23.1.3.14</span> Array.prototype.flatMap ( <var>mapperFunction</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.foreach" title="Array.prototype.forEach ( callback [ , thisArg ] )"><span class="secnum">23.1.3.15</span> Array.prototype.forEach ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.includes" title="Array.prototype.includes ( searchElement [ , fromIndex ] )"><span class="secnum">23.1.3.16</span> Array.prototype.includes ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.indexof" title="Array.prototype.indexOf ( searchElement [ , fromIndex ] )"><span class="secnum">23.1.3.17</span> Array.prototype.indexOf ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.join" title="Array.prototype.join ( separator )"><span class="secnum">23.1.3.18</span> Array.prototype.join ( <var>separator</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.keys" title="Array.prototype.keys ( )"><span class="secnum">23.1.3.19</span> Array.prototype.keys ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.lastindexof" title="Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )"><span class="secnum">23.1.3.20</span> Array.prototype.lastIndexOf ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.map" title="Array.prototype.map ( callback [ , thisArg ] )"><span class="secnum">23.1.3.21</span> Array.prototype.map ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.pop" title="Array.prototype.pop ( )"><span class="secnum">23.1.3.22</span> Array.prototype.pop ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.push" title="Array.prototype.push ( ...items )"><span class="secnum">23.1.3.23</span> Array.prototype.push ( ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.reduce" title="Array.prototype.reduce ( callback [ , initialValue ] )"><span class="secnum">23.1.3.24</span> Array.prototype.reduce ( <var>callback</var> [ , <var>initialValue</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.reduceright" title="Array.prototype.reduceRight ( callback [ , initialValue ] )"><span class="secnum">23.1.3.25</span> Array.prototype.reduceRight ( <var>callback</var> [ , <var>initialValue</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.reverse" title="Array.prototype.reverse ( )"><span class="secnum">23.1.3.26</span> Array.prototype.reverse ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.shift" title="Array.prototype.shift ( )"><span class="secnum">23.1.3.27</span> Array.prototype.shift ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.slice" title="Array.prototype.slice ( start, end )"><span class="secnum">23.1.3.28</span> Array.prototype.slice ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.some" title="Array.prototype.some ( callback [ , thisArg ] )"><span class="secnum">23.1.3.29</span> Array.prototype.some ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array.prototype.sort" title="Array.prototype.sort ( comparator )"><span class="secnum">23.1.3.30</span> Array.prototype.sort ( <var>comparator</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-sortindexedproperties" title="SortIndexedProperties ( obj, len, SortCompare, holes )"><span class="secnum">23.1.3.30.1</span> SortIndexedProperties ( <var>obj</var>, <var>len</var>, <var>SortCompare</var>, <var>holes</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-comparearrayelements" title="CompareArrayElements ( x, y, comparator )"><span class="secnum">23.1.3.30.2</span> CompareArrayElements ( <var>x</var>, <var>y</var>, <var>comparator</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.splice" title="Array.prototype.splice ( start, deleteCount, ...items )"><span class="secnum">23.1.3.31</span> Array.prototype.splice ( <var>start</var>, <var>deleteCount</var>, ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.tolocalestring" title="Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">23.1.3.32</span> Array.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.toreversed" title="Array.prototype.toReversed ( )"><span class="secnum">23.1.3.33</span> Array.prototype.toReversed ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.tosorted" title="Array.prototype.toSorted ( comparator )"><span class="secnum">23.1.3.34</span> Array.prototype.toSorted ( <var>comparator</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.tospliced" title="Array.prototype.toSpliced ( start, skipCount, ...items )"><span class="secnum">23.1.3.35</span> Array.prototype.toSpliced ( <var>start</var>, <var>skipCount</var>, ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.tostring" title="Array.prototype.toString ( )"><span class="secnum">23.1.3.36</span> Array.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.unshift" title="Array.prototype.unshift ( ...items )"><span class="secnum">23.1.3.37</span> Array.prototype.unshift ( ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.values" title="Array.prototype.values ( )"><span class="secnum">23.1.3.38</span> Array.prototype.values ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.with" title="Array.prototype.with ( index, value )"><span class="secnum">23.1.3.39</span> Array.prototype.with ( <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype-%symbol.iterator%" title="Array.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">23.1.3.40</span> Array.prototype [ %Symbol.iterator% ] ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype-%symbol.unscopables%" title="Array.prototype [ %Symbol.unscopables% ]"><span class="secnum">23.1.3.41</span> Array.prototype [ %Symbol.unscopables% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-array-instances" title="Properties of Array Instances"><span class="secnum">23.1.4</span> Properties of Array Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-properties-of-array-instances-length" title="length"><span class="secnum">23.1.4.1</span> length</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array-iterator-objects" title="Array Iterator Objects"><span class="secnum">23.1.5</span> Array Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-createarrayiterator" title="CreateArrayIterator ( array, kind )"><span class="secnum">23.1.5.1</span> CreateArrayIterator ( <var>array</var>, <var>kind</var> )</a></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-%arrayiteratorprototype%-object" title="The %ArrayIteratorPrototype% Object"><span class="secnum">23.1.5.2</span> The %ArrayIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%arrayiteratorprototype%.next" title="%ArrayIteratorPrototype%.next ( )"><span class="secnum">23.1.5.2.1</span> %ArrayIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%arrayiteratorprototype%-%symbol.tostringtag%" title="%ArrayIteratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">23.1.5.2.2</span> %ArrayIteratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-properties-of-array-iterator-instances" title="Properties of Array Iterator Instances"><span class="secnum">23.1.5.3</span> Properties of Array Iterator Instances</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-typedarray-objects" title="TypedArray Objects"><span class="secnum">23.2</span> TypedArray Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-%typedarray%-intrinsic-object" title="The %TypedArray% Intrinsic Object"><span class="secnum">23.2.1</span> The %TypedArray% Intrinsic Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%" title="%TypedArray% ( )"><span class="secnum">23.2.1.1</span> %TypedArray% ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-the-%typedarray%-intrinsic-object" title="Properties of the %TypedArray% Intrinsic Object"><span class="secnum">23.2.2</span> Properties of the %TypedArray% Intrinsic Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.from" title="%TypedArray%.from ( source [ , mapper [ , thisArg ] ] )"><span class="secnum">23.2.2.1</span> %TypedArray%.from ( <var>source</var> [ , <var>mapper</var> [ , <var>thisArg</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.of" title="%TypedArray%.of ( ...items )"><span class="secnum">23.2.2.2</span> %TypedArray%.of ( ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype" title="%TypedArray%.prototype"><span class="secnum">23.2.2.3</span> %TypedArray%.prototype</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%-%symbol.species%" title="get %TypedArray% [ %Symbol.species% ]"><span class="secnum">23.2.2.4</span> get %TypedArray% [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-the-%typedarrayprototype%-object" title="Properties of the %TypedArray% Prototype Object"><span class="secnum">23.2.3</span> Properties of the %TypedArray% Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.at" title="%TypedArray%.prototype.at ( index )"><span class="secnum">23.2.3.1</span> %TypedArray%.prototype.at ( <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%.prototype.buffer" title="get %TypedArray%.prototype.buffer"><span class="secnum">23.2.3.2</span> get %TypedArray%.prototype.buffer</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%.prototype.bytelength" title="get %TypedArray%.prototype.byteLength"><span class="secnum">23.2.3.3</span> get %TypedArray%.prototype.byteLength</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%.prototype.byteoffset" title="get %TypedArray%.prototype.byteOffset"><span class="secnum">23.2.3.4</span> get %TypedArray%.prototype.byteOffset</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.constructor" title="%TypedArray%.prototype.constructor"><span class="secnum">23.2.3.5</span> %TypedArray%.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.copywithin" title="%TypedArray%.prototype.copyWithin ( target, start [ , end ] )"><span class="secnum">23.2.3.6</span> %TypedArray%.prototype.copyWithin ( <var>target</var>, <var>start</var> [ , <var>end</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.entries" title="%TypedArray%.prototype.entries ( )"><span class="secnum">23.2.3.7</span> %TypedArray%.prototype.entries ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.every" title="%TypedArray%.prototype.every ( callback [ , thisArg ] )"><span class="secnum">23.2.3.8</span> %TypedArray%.prototype.every ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.fill" title="%TypedArray%.prototype.fill ( value [ , start [ , end ] ] )"><span class="secnum">23.2.3.9</span> %TypedArray%.prototype.fill ( <var>value</var> [ , <var>start</var> [ , <var>end</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.filter" title="%TypedArray%.prototype.filter ( callback [ , thisArg ] )"><span class="secnum">23.2.3.10</span> %TypedArray%.prototype.filter ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.find" title="%TypedArray%.prototype.find ( predicate [ , thisArg ] )"><span class="secnum">23.2.3.11</span> %TypedArray%.prototype.find ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.findindex" title="%TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )"><span class="secnum">23.2.3.12</span> %TypedArray%.prototype.findIndex ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.findlast" title="%TypedArray%.prototype.findLast ( predicate [ , thisArg ] )"><span class="secnum">23.2.3.13</span> %TypedArray%.prototype.findLast ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.findlastindex" title="%TypedArray%.prototype.findLastIndex ( predicate [ , thisArg ] )"><span class="secnum">23.2.3.14</span> %TypedArray%.prototype.findLastIndex ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.foreach" title="%TypedArray%.prototype.forEach ( callback [ , thisArg ] )"><span class="secnum">23.2.3.15</span> %TypedArray%.prototype.forEach ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.includes" title="%TypedArray%.prototype.includes ( searchElement [ , fromIndex ] )"><span class="secnum">23.2.3.16</span> %TypedArray%.prototype.includes ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.indexof" title="%TypedArray%.prototype.indexOf ( searchElement [ , fromIndex ] )"><span class="secnum">23.2.3.17</span> %TypedArray%.prototype.indexOf ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.join" title="%TypedArray%.prototype.join ( separator )"><span class="secnum">23.2.3.18</span> %TypedArray%.prototype.join ( <var>separator</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.keys" title="%TypedArray%.prototype.keys ( )"><span class="secnum">23.2.3.19</span> %TypedArray%.prototype.keys ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.lastindexof" title="%TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )"><span class="secnum">23.2.3.20</span> %TypedArray%.prototype.lastIndexOf ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%.prototype.length" title="get %TypedArray%.prototype.length"><span class="secnum">23.2.3.21</span> get %TypedArray%.prototype.length</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.map" title="%TypedArray%.prototype.map ( callback [ , thisArg ] )"><span class="secnum">23.2.3.22</span> %TypedArray%.prototype.map ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.reduce" title="%TypedArray%.prototype.reduce ( callback [ , initialValue ] )"><span class="secnum">23.2.3.23</span> %TypedArray%.prototype.reduce ( <var>callback</var> [ , <var>initialValue</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.reduceright" title="%TypedArray%.prototype.reduceRight ( callback [ , initialValue ] )"><span class="secnum">23.2.3.24</span> %TypedArray%.prototype.reduceRight ( <var>callback</var> [ , <var>initialValue</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.reverse" title="%TypedArray%.prototype.reverse ( )"><span class="secnum">23.2.3.25</span> %TypedArray%.prototype.reverse ( )</a></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-%typedarray%.prototype.set" title="%TypedArray%.prototype.set ( source [ , offset ] )"><span class="secnum">23.2.3.26</span> %TypedArray%.prototype.set ( <var>source</var> [ , <var>offset</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-settypedarrayfromarraylike" title="SetTypedArrayFromArrayLike ( target, targetOffset, source )"><span class="secnum">23.2.3.26.1</span> SetTypedArrayFromArrayLike ( <var>target</var>, <var>targetOffset</var>, <var>source</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-settypedarrayfromtypedarray" title="SetTypedArrayFromTypedArray ( target, targetOffset, source )"><span class="secnum">23.2.3.26.2</span> SetTypedArrayFromTypedArray ( <var>target</var>, <var>targetOffset</var>, <var>source</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.slice" title="%TypedArray%.prototype.slice ( start, end )"><span class="secnum">23.2.3.27</span> %TypedArray%.prototype.slice ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.some" title="%TypedArray%.prototype.some ( callback [ , thisArg ] )"><span class="secnum">23.2.3.28</span> %TypedArray%.prototype.some ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.sort" title="%TypedArray%.prototype.sort ( comparator )"><span class="secnum">23.2.3.29</span> %TypedArray%.prototype.sort ( <var>comparator</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.subarray" title="%TypedArray%.prototype.subarray ( start, end )"><span class="secnum">23.2.3.30</span> %TypedArray%.prototype.subarray ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.tolocalestring" title="%TypedArray%.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">23.2.3.31</span> %TypedArray%.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.toreversed" title="%TypedArray%.prototype.toReversed ( )"><span class="secnum">23.2.3.32</span> %TypedArray%.prototype.toReversed ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.tosorted" title="%TypedArray%.prototype.toSorted ( comparator )"><span class="secnum">23.2.3.33</span> %TypedArray%.prototype.toSorted ( <var>comparator</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.tostring" title="%TypedArray%.prototype.toString ( )"><span class="secnum">23.2.3.34</span> %TypedArray%.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.values" title="%TypedArray%.prototype.values ( )"><span class="secnum">23.2.3.35</span> %TypedArray%.prototype.values ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.with" title="%TypedArray%.prototype.with ( index, value )"><span class="secnum">23.2.3.36</span> %TypedArray%.prototype.with ( <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype-%symbol.iterator%" title="%TypedArray%.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">23.2.3.37</span> %TypedArray%.prototype [ %Symbol.iterator% ] ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%.prototype-%symbol.tostringtag%" title="get %TypedArray%.prototype [ %Symbol.toStringTag% ]"><span class="secnum">23.2.3.38</span> get %TypedArray%.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-abstract-operations-for-typedarray-objects" title="Abstract Operations for TypedArray Objects"><span class="secnum">23.2.4</span> Abstract Operations for TypedArray Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarraycreatefromconstructor" title="TypedArrayCreateFromConstructor ( constructor, argumentList )"><span class="secnum">23.2.4.1</span> TypedArrayCreateFromConstructor ( <var>constructor</var>, <var>argumentList</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarray-create-same-type" title="TypedArrayCreateSameType ( exemplar, length )"><span class="secnum">23.2.4.2</span> TypedArrayCreateSameType ( <var>exemplar</var>, <var>length</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#typedarray-species-create" title="TypedArraySpeciesCreate ( exemplar, argumentList )"><span class="secnum">23.2.4.3</span> TypedArraySpeciesCreate ( <var>exemplar</var>, <var>argumentList</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-validatetypedarray" title="ValidateTypedArray ( O, order )"><span class="secnum">23.2.4.4</span> ValidateTypedArray ( <var>O</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarrayelementsize" title="TypedArrayElementSize ( O )"><span class="secnum">23.2.4.5</span> TypedArrayElementSize ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarrayelementtype" title="TypedArrayElementType ( O )"><span class="secnum">23.2.4.6</span> TypedArrayElementType ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-comparetypedarrayelements" title="CompareTypedArrayElements ( x, y, comparator )"><span class="secnum">23.2.4.7</span> CompareTypedArrayElements ( <var>x</var>, <var>y</var>, <var>comparator</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-typedarray-constructors" title="The TypedArray Constructors"><span class="secnum">23.2.5</span> The <var>TypedArray</var> Constructors</a><ol class="toc"><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-typedarray" title="TypedArray ( ...args )"><span class="secnum">23.2.5.1</span> <var>TypedArray</var> ( ...<var>args</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-allocatetypedarray" title="AllocateTypedArray ( constructorName, newTarget, defaultProto [ , length ] )"><span class="secnum">23.2.5.1.1</span> AllocateTypedArray ( <var>constructorName</var>, <var>newTarget</var>, <var>defaultProto</var> [ , <var>length</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-initializetypedarrayfromtypedarray" title="InitializeTypedArrayFromTypedArray ( O, srcArray )"><span class="secnum">23.2.5.1.2</span> InitializeTypedArrayFromTypedArray ( <var>O</var>, <var>srcArray</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-initializetypedarrayfromarraybuffer" title="InitializeTypedArrayFromArrayBuffer ( O, buffer, byteOffset, length )"><span class="secnum">23.2.5.1.3</span> InitializeTypedArrayFromArrayBuffer ( <var>O</var>, <var>buffer</var>, <var>byteOffset</var>, <var>length</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-initializetypedarrayfromlist" title="InitializeTypedArrayFromList ( O, values )"><span class="secnum">23.2.5.1.4</span> InitializeTypedArrayFromList ( <var>O</var>, <var>values</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-initializetypedarrayfromarraylike" title="InitializeTypedArrayFromArrayLike ( O, arrayLike )"><span class="secnum">23.2.5.1.5</span> InitializeTypedArrayFromArrayLike ( <var>O</var>, <var>arrayLike</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-allocatetypedarraybuffer" title="AllocateTypedArrayBuffer ( O, length )"><span class="secnum">23.2.5.1.6</span> AllocateTypedArrayBuffer ( <var>O</var>, <var>length</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-the-typedarray-constructors" title="Properties of the TypedArray Constructors"><span class="secnum">23.2.6</span> Properties of the <var>TypedArray</var> Constructors</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarray.bytes_per_element" title="TypedArray.BYTES_PER_ELEMENT"><span class="secnum">23.2.6.1</span> <var>TypedArray</var>.BYTES_PER_ELEMENT</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarray.prototype" title="TypedArray.prototype"><span class="secnum">23.2.6.2</span> <var>TypedArray</var>.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-typedarray-prototype-objects" title="Properties of the TypedArray Prototype Objects"><span class="secnum">23.2.7</span> Properties of the <var>TypedArray</var> Prototype Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarray.prototype.bytes_per_element" title="TypedArray.prototype.BYTES_PER_ELEMENT"><span class="secnum">23.2.7.1</span> <var>TypedArray</var>.prototype.BYTES_PER_ELEMENT</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarray.prototype.constructor" title="TypedArray.prototype.constructor"><span class="secnum">23.2.7.2</span> <var>TypedArray</var>.prototype.constructor</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-properties-of-typedarray-instances" title="Properties of TypedArray Instances"><span class="secnum">23.2.8</span> Properties of <var>TypedArray</var> Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-uint8array" title="Uint8Array Objects"><span class="secnum">23.3</span> Uint8Array Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-additional-properties-of-the-uint8array-constructor" title="Additional Properties of the Uint8Array Constructor"><span class="secnum">23.3.1</span> Additional Properties of the Uint8Array Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.frombase64" title="Uint8Array.fromBase64 ( string [ , options ] )"><span class="secnum">23.3.1.1</span> Uint8Array.fromBase64 ( <var>string</var> [ , <var>options</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.fromhex" title="Uint8Array.fromHex ( string )"><span class="secnum">23.3.1.2</span> Uint8Array.fromHex ( <var>string</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-additional-properties-of-the-uint8array-prototype-object" title="Additional Properties of the Uint8Array Prototype Object"><span class="secnum">23.3.2</span> Additional Properties of the Uint8Array Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.prototype.setfrombase64" title="Uint8Array.prototype.setFromBase64 ( string [ , options ] )"><span class="secnum">23.3.2.1</span> Uint8Array.prototype.setFromBase64 ( <var>string</var> [ , <var>options</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.prototype.setfromhex" title="Uint8Array.prototype.setFromHex ( string )"><span class="secnum">23.3.2.2</span> Uint8Array.prototype.setFromHex ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.prototype.tobase64" title="Uint8Array.prototype.toBase64 ( [ options ] )"><span class="secnum">23.3.2.3</span> Uint8Array.prototype.toBase64 ( [ <var>options</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.prototype.tohex" title="Uint8Array.prototype.toHex ( )"><span class="secnum">23.3.2.4</span> Uint8Array.prototype.toHex ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-abstract-operations-for-uint8array-objects" title="Abstract Operations for Uint8Array Objects"><span class="secnum">23.3.3</span> Abstract Operations for Uint8Array Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-validateuint8array" title="ValidateUint8Array ( ta )"><span class="secnum">23.3.3.1</span> ValidateUint8Array ( <var>ta</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-getuint8arraybytes" title="GetUint8ArrayBytes ( ta )"><span class="secnum">23.3.3.2</span> GetUint8ArrayBytes ( <var>ta</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-setuint8arraybytes" title="SetUint8ArrayBytes ( into, bytes )"><span class="secnum">23.3.3.3</span> SetUint8ArrayBytes ( <var>into</var>, <var>bytes</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-skipasciiwhitespace" title="SkipAsciiWhitespace ( string, index )"><span class="secnum">23.3.3.4</span> SkipAsciiWhitespace ( <var>string</var>, <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-decodefinalbase64chunk" title="DecodeFinalBase64Chunk ( chunk, throwOnExtraBits )"><span class="secnum">23.3.3.5</span> DecodeFinalBase64Chunk ( <var>chunk</var>, <var>throwOnExtraBits</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-decodefulllengthbase64chunk" title="DecodeFullLengthBase64Chunk ( chunk )"><span class="secnum">23.3.3.6</span> DecodeFullLengthBase64Chunk ( <var>chunk</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-frombase64" title="FromBase64 ( string, alphabet, lastChunkHandling [ , maxLength ] )"><span class="secnum">23.3.3.7</span> FromBase64 ( <var>string</var>, <var>alphabet</var>, <var>lastChunkHandling</var> [ , <var>maxLength</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-fromhex" title="FromHex ( string [ , maxLength ] )"><span class="secnum">23.3.3.8</span> FromHex ( <var>string</var> [ , <var>maxLength</var> ] )</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-keyed-collections" title="Keyed Collections"><span class="secnum">24</span> Keyed Collections</a><ol class="toc"><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-map-objects" title="Map Objects"><span class="secnum">24.1</span> Map Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-map-constructor" title="The Map Constructor"><span class="secnum">24.1.1</span> The Map Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map-iterable" title="Map ( [ iterable ] )"><span class="secnum">24.1.1.1</span> Map ( [ <var>iterable</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-add-entries-from-iterable" title="AddEntriesFromIterable ( target, iterable, adder )"><span class="secnum">24.1.1.2</span> AddEntriesFromIterable ( <var>target</var>, <var>iterable</var>, <var>adder</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-map-constructor" title="Properties of the Map Constructor"><span class="secnum">24.1.2</span> Properties of the Map Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.groupby" title="Map.groupBy ( items, callback )"><span class="secnum">24.1.2.1</span> Map.groupBy ( <var>items</var>, <var>callback</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype" title="Map.prototype"><span class="secnum">24.1.2.2</span> Map.prototype</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-get-map-%symbol.species%" title="get Map [ %Symbol.species% ]"><span class="secnum">24.1.2.3</span> get Map [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-map-prototype-object" title="Properties of the Map Prototype Object"><span class="secnum">24.1.3</span> Properties of the Map Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.clear" title="Map.prototype.clear ( )"><span class="secnum">24.1.3.1</span> Map.prototype.clear ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.constructor" title="Map.prototype.constructor"><span class="secnum">24.1.3.2</span> Map.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.delete" title="Map.prototype.delete ( key )"><span class="secnum">24.1.3.3</span> Map.prototype.delete ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.entries" title="Map.prototype.entries ( )"><span class="secnum">24.1.3.4</span> Map.prototype.entries ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.foreach" title="Map.prototype.forEach ( callback [ , thisArg ] )"><span class="secnum">24.1.3.5</span> Map.prototype.forEach ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.get" title="Map.prototype.get ( key )"><span class="secnum">24.1.3.6</span> Map.prototype.get ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.getorinsert" title="Map.prototype.getOrInsert ( key, value )"><span class="secnum">24.1.3.7</span> Map.prototype.getOrInsert ( <var>key</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.getorinsertcomputed" title="Map.prototype.getOrInsertComputed ( key, callback )"><span class="secnum">24.1.3.8</span> Map.prototype.getOrInsertComputed ( <var>key</var>, <var>callback</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.has" title="Map.prototype.has ( key )"><span class="secnum">24.1.3.9</span> Map.prototype.has ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.keys" title="Map.prototype.keys ( )"><span class="secnum">24.1.3.10</span> Map.prototype.keys ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.set" title="Map.prototype.set ( key, value )"><span class="secnum">24.1.3.11</span> Map.prototype.set ( <var>key</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-get-map.prototype.size" title="get Map.prototype.size"><span class="secnum">24.1.3.12</span> get Map.prototype.size</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.values" title="Map.prototype.values ( )"><span class="secnum">24.1.3.13</span> Map.prototype.values ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype-%symbol.iterator%" title="Map.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">24.1.3.14</span> Map.prototype [ %Symbol.iterator% ] ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype-%symbol.tostringtag%" title="Map.prototype [ %Symbol.toStringTag% ]"><span class="secnum">24.1.3.15</span> Map.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-properties-of-map-instances" title="Properties of Map Instances"><span class="secnum">24.1.4</span> Properties of Map Instances</a></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-map-iterator-objects" title="Map Iterator Objects"><span class="secnum">24.1.5</span> Map Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-createmapiterator" title="CreateMapIterator ( map, kind )"><span class="secnum">24.1.5.1</span> CreateMapIterator ( <var>map</var>, <var>kind</var> )</a></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-%mapiteratorprototype%-object" title="The %MapIteratorPrototype% Object"><span class="secnum">24.1.5.2</span> The %MapIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-%mapiteratorprototype%.next" title="%MapIteratorPrototype%.next ( )"><span class="secnum">24.1.5.2.1</span> %MapIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-%mapiteratorprototype%-%symbol.tostringtag%" title="%MapIteratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">24.1.5.2.2</span> %MapIteratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-set-objects" title="Set Objects"><span class="secnum">24.2</span> Set Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-abstract-operations-for-set-objects" title="Abstract Operations For Set Objects"><span class="secnum">24.2.1</span> Abstract Operations For Set Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set-records" title="Set Records"><span class="secnum">24.2.1.1</span> Set Records</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-getsetrecord" title="GetSetRecord ( obj )"><span class="secnum">24.2.1.2</span> GetSetRecord ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-setdatahas" title="SetDataHas ( setData, value )"><span class="secnum">24.2.1.3</span> SetDataHas ( <var>setData</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-setdataindex" title="SetDataIndex ( setData, value )"><span class="secnum">24.2.1.4</span> SetDataIndex ( <var>setData</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-setdatasize" title="SetDataSize ( setData )"><span class="secnum">24.2.1.5</span> SetDataSize ( <var>setData</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-set-constructor" title="The Set Constructor"><span class="secnum">24.2.2</span> The Set Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set-iterable" title="Set ( [ iterable ] )"><span class="secnum">24.2.2.1</span> Set ( [ <var>iterable</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-set-constructor" title="Properties of the Set Constructor"><span class="secnum">24.2.3</span> Properties of the Set Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype" title="Set.prototype"><span class="secnum">24.2.3.1</span> Set.prototype</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-get-set-%symbol.species%" title="get Set [ %Symbol.species% ]"><span class="secnum">24.2.3.2</span> get Set [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-set-prototype-object" title="Properties of the Set Prototype Object"><span class="secnum">24.2.4</span> Properties of the Set Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.add" title="Set.prototype.add ( value )"><span class="secnum">24.2.4.1</span> Set.prototype.add ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.clear" title="Set.prototype.clear ( )"><span class="secnum">24.2.4.2</span> Set.prototype.clear ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.constructor" title="Set.prototype.constructor"><span class="secnum">24.2.4.3</span> Set.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.delete" title="Set.prototype.delete ( value )"><span class="secnum">24.2.4.4</span> Set.prototype.delete ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.difference" title="Set.prototype.difference ( other )"><span class="secnum">24.2.4.5</span> Set.prototype.difference ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.entries" title="Set.prototype.entries ( )"><span class="secnum">24.2.4.6</span> Set.prototype.entries ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.foreach" title="Set.prototype.forEach ( callback [ , thisArg ] )"><span class="secnum">24.2.4.7</span> Set.prototype.forEach ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.has" title="Set.prototype.has ( value )"><span class="secnum">24.2.4.8</span> Set.prototype.has ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.intersection" title="Set.prototype.intersection ( other )"><span class="secnum">24.2.4.9</span> Set.prototype.intersection ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.isdisjointfrom" title="Set.prototype.isDisjointFrom ( other )"><span class="secnum">24.2.4.10</span> Set.prototype.isDisjointFrom ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.issubsetof" title="Set.prototype.isSubsetOf ( other )"><span class="secnum">24.2.4.11</span> Set.prototype.isSubsetOf ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.issupersetof" title="Set.prototype.isSupersetOf ( other )"><span class="secnum">24.2.4.12</span> Set.prototype.isSupersetOf ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.keys" title="Set.prototype.keys ( )"><span class="secnum">24.2.4.13</span> Set.prototype.keys ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-get-set.prototype.size" title="get Set.prototype.size"><span class="secnum">24.2.4.14</span> get Set.prototype.size</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.symmetricdifference" title="Set.prototype.symmetricDifference ( other )"><span class="secnum">24.2.4.15</span> Set.prototype.symmetricDifference ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.union" title="Set.prototype.union ( other )"><span class="secnum">24.2.4.16</span> Set.prototype.union ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.values" title="Set.prototype.values ( )"><span class="secnum">24.2.4.17</span> Set.prototype.values ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype-%symbol.iterator%" title="Set.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">24.2.4.18</span> Set.prototype [ %Symbol.iterator% ] ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype-%symbol.tostringtag%" title="Set.prototype [ %Symbol.toStringTag% ]"><span class="secnum">24.2.4.19</span> Set.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-properties-of-set-instances" title="Properties of Set Instances"><span class="secnum">24.2.5</span> Properties of Set Instances</a></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-set-iterator-objects" title="Set Iterator Objects"><span class="secnum">24.2.6</span> Set Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-createsetiterator" title="CreateSetIterator ( set, kind )"><span class="secnum">24.2.6.1</span> CreateSetIterator ( <var>set</var>, <var>kind</var> )</a></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-%setiteratorprototype%-object" title="The %SetIteratorPrototype% Object"><span class="secnum">24.2.6.2</span> The %SetIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-%setiteratorprototype%.next" title="%SetIteratorPrototype%.next ( )"><span class="secnum">24.2.6.2.1</span> %SetIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-%setiteratorprototype%-%symbol.tostringtag%" title="%SetIteratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">24.2.6.2.2</span> %SetIteratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-weakmap-objects" title="WeakMap Objects"><span class="secnum">24.3</span> WeakMap Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-weakmap-constructor" title="The WeakMap Constructor"><span class="secnum">24.3.1</span> The WeakMap Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap-iterable" title="WeakMap ( [ iterable ] )"><span class="secnum">24.3.1.1</span> WeakMap ( [ <var>iterable</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-weakmap-constructor" title="Properties of the WeakMap Constructor"><span class="secnum">24.3.2</span> Properties of the WeakMap Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype" title="WeakMap.prototype"><span class="secnum">24.3.2.1</span> WeakMap.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-weakmap-prototype-object" title="Properties of the WeakMap Prototype Object"><span class="secnum">24.3.3</span> Properties of the WeakMap Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.constructor" title="WeakMap.prototype.constructor"><span class="secnum">24.3.3.1</span> WeakMap.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.delete" title="WeakMap.prototype.delete ( key )"><span class="secnum">24.3.3.2</span> WeakMap.prototype.delete ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.get" title="WeakMap.prototype.get ( key )"><span class="secnum">24.3.3.3</span> WeakMap.prototype.get ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.getorinsert" title="WeakMap.prototype.getOrInsert ( key, value )"><span class="secnum">24.3.3.4</span> WeakMap.prototype.getOrInsert ( <var>key</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.getorinsertcomputed" title="WeakMap.prototype.getOrInsertComputed ( key, callback )"><span class="secnum">24.3.3.5</span> WeakMap.prototype.getOrInsertComputed ( <var>key</var>, <var>callback</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.has" title="WeakMap.prototype.has ( key )"><span class="secnum">24.3.3.6</span> WeakMap.prototype.has ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.set" title="WeakMap.prototype.set ( key, value )"><span class="secnum">24.3.3.7</span> WeakMap.prototype.set ( <var>key</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype-%symbol.tostringtag%" title="WeakMap.prototype [ %Symbol.toStringTag% ]"><span class="secnum">24.3.3.8</span> WeakMap.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-properties-of-weakmap-instances" title="Properties of WeakMap Instances"><span class="secnum">24.3.4</span> Properties of WeakMap Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-weakset-objects" title="WeakSet Objects"><span class="secnum">24.4</span> WeakSet Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-weakset-constructor" title="The WeakSet Constructor"><span class="secnum">24.4.1</span> The WeakSet Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset-iterable" title="WeakSet ( [ iterable ] )"><span class="secnum">24.4.1.1</span> WeakSet ( [ <var>iterable</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-weakset-constructor" title="Properties of the WeakSet Constructor"><span class="secnum">24.4.2</span> Properties of the WeakSet Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype" title="WeakSet.prototype"><span class="secnum">24.4.2.1</span> WeakSet.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-weakset-prototype-object" title="Properties of the WeakSet Prototype Object"><span class="secnum">24.4.3</span> Properties of the WeakSet Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype.add" title="WeakSet.prototype.add ( value )"><span class="secnum">24.4.3.1</span> WeakSet.prototype.add ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype.constructor" title="WeakSet.prototype.constructor"><span class="secnum">24.4.3.2</span> WeakSet.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype.delete" title="WeakSet.prototype.delete ( value )"><span class="secnum">24.4.3.3</span> WeakSet.prototype.delete ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype.has" title="WeakSet.prototype.has ( value )"><span class="secnum">24.4.3.4</span> WeakSet.prototype.has ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype-%symbol.tostringtag%" title="WeakSet.prototype [ %Symbol.toStringTag% ]"><span class="secnum">24.4.3.5</span> WeakSet.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-properties-of-weakset-instances" title="Properties of WeakSet Instances"><span class="secnum">24.4.4</span> Properties of WeakSet Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-abstract-operations-for-keyed-collections" title="Abstract Operations for Keyed Collections"><span class="secnum">24.5</span> Abstract Operations for Keyed Collections</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-canonicalizekeyedcollectionkey" title="CanonicalizeKeyedCollectionKey ( key )"><span class="secnum">24.5.1</span> CanonicalizeKeyedCollectionKey ( <var>key</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-structured-data" title="Structured Data"><span class="secnum">25</span> Structured Data</a><ol class="toc"><li><span class="item-toggle">+</span><a href="structured-data.html#sec-arraybuffer-objects" title="ArrayBuffer Objects"><span class="secnum">25.1</span> ArrayBuffer Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer-notation" title="Notation"><span class="secnum">25.1.1</span> Notation</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-fixed-length-and-resizable-arraybuffer-objects" title="Fixed-length and Resizable ArrayBuffer Objects"><span class="secnum">25.1.2</span> Fixed-length and Resizable ArrayBuffer Objects</a></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-abstract-operations-for-arraybuffer-objects" title="Abstract Operations For ArrayBuffer Objects"><span class="secnum">25.1.3</span> Abstract Operations For ArrayBuffer Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-allocatearraybuffer" title="AllocateArrayBuffer ( constructor, byteLength [ , maxByteLength ] )"><span class="secnum">25.1.3.1</span> AllocateArrayBuffer ( <var>constructor</var>, <var>byteLength</var> [ , <var>maxByteLength</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybufferbytelength" title="ArrayBufferByteLength ( arrayBuffer, order )"><span class="secnum">25.1.3.2</span> ArrayBufferByteLength ( <var>arrayBuffer</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffercopyanddetach" title="ArrayBufferCopyAndDetach ( arrayBuffer, newLength, preserveResizability )"><span class="secnum">25.1.3.3</span> ArrayBufferCopyAndDetach ( <var>arrayBuffer</var>, <var>newLength</var>, <var>preserveResizability</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isdetachedbuffer" title="IsDetachedBuffer ( arrayBuffer )"><span class="secnum">25.1.3.4</span> IsDetachedBuffer ( <var>arrayBuffer</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-detacharraybuffer" title="DetachArrayBuffer ( arrayBuffer [ , key ] )"><span class="secnum">25.1.3.5</span> DetachArrayBuffer ( <var>arrayBuffer</var> [ , <var>key</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-clonearraybuffer" title="CloneArrayBuffer ( srcBuffer, srcByteOffset, srcLength )"><span class="secnum">25.1.3.6</span> CloneArrayBuffer ( <var>srcBuffer</var>, <var>srcByteOffset</var>, <var>srcLength</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getarraybuffermaxbytelengthoption" title="GetArrayBufferMaxByteLengthOption ( options )"><span class="secnum">25.1.3.7</span> GetArrayBufferMaxByteLengthOption ( <var>options</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-hostresizearraybuffer" title="HostResizeArrayBuffer ( buffer, newByteLength )"><span class="secnum">25.1.3.8</span> HostResizeArrayBuffer ( <var>buffer</var>, <var>newByteLength</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isfixedlengtharraybuffer" title="IsFixedLengthArrayBuffer ( arrayBuffer )"><span class="secnum">25.1.3.9</span> IsFixedLengthArrayBuffer ( <var>arrayBuffer</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isunsignedelementtype" title="IsUnsignedElementType ( type )"><span class="secnum">25.1.3.10</span> IsUnsignedElementType ( <var>type</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isunclampedintegerelementtype" title="IsUnclampedIntegerElementType ( type )"><span class="secnum">25.1.3.11</span> IsUnclampedIntegerElementType ( <var>type</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isbigintelementtype" title="IsBigIntElementType ( type )"><span class="secnum">25.1.3.12</span> IsBigIntElementType ( <var>type</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isnotearconfiguration" title="IsNoTearConfiguration ( type, order )"><span class="secnum">25.1.3.13</span> IsNoTearConfiguration ( <var>type</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-rawbytestonumeric" title="RawBytesToNumeric ( type, rawBytes, isLittleEndian )"><span class="secnum">25.1.3.14</span> RawBytesToNumeric ( <var>type</var>, <var>rawBytes</var>, <var>isLittleEndian</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getrawbytesfromsharedblock" title="GetRawBytesFromSharedBlock ( block, byteIndex, type, isTypedArray, order )"><span class="secnum">25.1.3.15</span> GetRawBytesFromSharedBlock ( <var>block</var>, <var>byteIndex</var>, <var>type</var>, <var>isTypedArray</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getvaluefrombuffer" title="GetValueFromBuffer ( arrayBuffer, byteIndex, type, isTypedArray, order [ , isLittleEndian ] )"><span class="secnum">25.1.3.16</span> GetValueFromBuffer ( <var>arrayBuffer</var>, <var>byteIndex</var>, <var>type</var>, <var>isTypedArray</var>, <var>order</var> [ , <var>isLittleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-numerictorawbytes" title="NumericToRawBytes ( type, value, isLittleEndian )"><span class="secnum">25.1.3.17</span> NumericToRawBytes ( <var>type</var>, <var>value</var>, <var>isLittleEndian</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-setvalueinbuffer" title="SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isTypedArray, order [ , isLittleEndian ] )"><span class="secnum">25.1.3.18</span> SetValueInBuffer ( <var>arrayBuffer</var>, <var>byteIndex</var>, <var>type</var>, <var>value</var>, <var>isTypedArray</var>, <var>order</var> [ , <var>isLittleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getmodifysetvalueinbuffer" title="GetModifySetValueInBuffer ( arrayBuffer, byteIndex, type, value, op )"><span class="secnum">25.1.3.19</span> GetModifySetValueInBuffer ( <var>arrayBuffer</var>, <var>byteIndex</var>, <var>type</var>, <var>value</var>, <var>op</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-arraybuffer-constructor" title="The ArrayBuffer Constructor"><span class="secnum">25.1.4</span> The ArrayBuffer Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer-length" title="ArrayBuffer ( length [ , options ] )"><span class="secnum">25.1.4.1</span> ArrayBuffer ( <var>length</var> [ , <var>options</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-arraybuffer-constructor" title="Properties of the ArrayBuffer Constructor"><span class="secnum">25.1.5</span> Properties of the ArrayBuffer Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.isview" title="ArrayBuffer.isView ( arg )"><span class="secnum">25.1.5.1</span> ArrayBuffer.isView ( <var>arg</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype" title="ArrayBuffer.prototype"><span class="secnum">25.1.5.2</span> ArrayBuffer.prototype</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-arraybuffer-%symbol.species%" title="get ArrayBuffer [ %Symbol.species% ]"><span class="secnum">25.1.5.3</span> get ArrayBuffer [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-arraybuffer-prototype-object" title="Properties of the ArrayBuffer Prototype Object"><span class="secnum">25.1.6</span> Properties of the ArrayBuffer Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-arraybuffer.prototype.bytelength" title="get ArrayBuffer.prototype.byteLength"><span class="secnum">25.1.6.1</span> get ArrayBuffer.prototype.byteLength</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype.constructor" title="ArrayBuffer.prototype.constructor"><span class="secnum">25.1.6.2</span> ArrayBuffer.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-arraybuffer.prototype.detached" title="get ArrayBuffer.prototype.detached"><span class="secnum">25.1.6.3</span> get ArrayBuffer.prototype.detached</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-arraybuffer.prototype.maxbytelength" title="get ArrayBuffer.prototype.maxByteLength"><span class="secnum">25.1.6.4</span> get ArrayBuffer.prototype.maxByteLength</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-arraybuffer.prototype.resizable" title="get ArrayBuffer.prototype.resizable"><span class="secnum">25.1.6.5</span> get ArrayBuffer.prototype.resizable</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype.resize" title="ArrayBuffer.prototype.resize ( newLength )"><span class="secnum">25.1.6.6</span> ArrayBuffer.prototype.resize ( <var>newLength</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype.slice" title="ArrayBuffer.prototype.slice ( start, end )"><span class="secnum">25.1.6.7</span> ArrayBuffer.prototype.slice ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype.transfer" title="ArrayBuffer.prototype.transfer ( [ newLength ] )"><span class="secnum">25.1.6.8</span> ArrayBuffer.prototype.transfer ( [ <var>newLength</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype.transfertofixedlength" title="ArrayBuffer.prototype.transferToFixedLength ( [ newLength ] )"><span class="secnum">25.1.6.9</span> ArrayBuffer.prototype.transferToFixedLength ( [ <var>newLength</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype-%symbol.tostringtag%" title="ArrayBuffer.prototype [ %Symbol.toStringTag% ]"><span class="secnum">25.1.6.10</span> ArrayBuffer.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-properties-of-the-arraybuffer-instances" title="Properties of ArrayBuffer Instances"><span class="secnum">25.1.7</span> Properties of ArrayBuffer Instances</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-resizable-arraybuffer-guidelines" title="Resizable ArrayBuffer Guidelines"><span class="secnum">25.1.8</span> Resizable ArrayBuffer Guidelines</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-sharedarraybuffer-objects" title="SharedArrayBuffer Objects"><span class="secnum">25.2</span> SharedArrayBuffer Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-fixed-length-and-growable-sharedarraybuffer-objects" title="Fixed-length and Growable SharedArrayBuffer Objects"><span class="secnum">25.2.1</span> Fixed-length and Growable SharedArrayBuffer Objects</a></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-abstract-operations-for-sharedarraybuffer-objects" title="Abstract Operations for SharedArrayBuffer Objects"><span class="secnum">25.2.2</span> Abstract Operations for SharedArrayBuffer Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-allocatesharedarraybuffer" title="AllocateSharedArrayBuffer ( constructor, byteLength [ , maxByteLength ] )"><span class="secnum">25.2.2.1</span> AllocateSharedArrayBuffer ( <var>constructor</var>, <var>byteLength</var> [ , <var>maxByteLength</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-issharedarraybuffer" title="IsSharedArrayBuffer ( obj )"><span class="secnum">25.2.2.2</span> IsSharedArrayBuffer ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isgrowablesharedarraybuffer" title="IsGrowableSharedArrayBuffer ( obj )"><span class="secnum">25.2.2.3</span> IsGrowableSharedArrayBuffer ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-hostgrowsharedarraybuffer" title="HostGrowSharedArrayBuffer ( buffer, newByteLength )"><span class="secnum">25.2.2.4</span> HostGrowSharedArrayBuffer ( <var>buffer</var>, <var>newByteLength</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-sharedarraybuffer-constructor" title="The SharedArrayBuffer Constructor"><span class="secnum">25.2.3</span> The SharedArrayBuffer Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer-length" title="SharedArrayBuffer ( length [ , options ] )"><span class="secnum">25.2.3.1</span> SharedArrayBuffer ( <var>length</var> [ , <var>options</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-sharedarraybuffer-constructor" title="Properties of the SharedArrayBuffer Constructor"><span class="secnum">25.2.4</span> Properties of the SharedArrayBuffer Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer.prototype" title="SharedArrayBuffer.prototype"><span class="secnum">25.2.4.1</span> SharedArrayBuffer.prototype</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer-%symbol.species%" title="get SharedArrayBuffer [ %Symbol.species% ]"><span class="secnum">25.2.4.2</span> get SharedArrayBuffer [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-sharedarraybuffer-prototype-object" title="Properties of the SharedArrayBuffer Prototype Object"><span class="secnum">25.2.5</span> Properties of the SharedArrayBuffer Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-sharedarraybuffer.prototype.bytelength" title="get SharedArrayBuffer.prototype.byteLength"><span class="secnum">25.2.5.1</span> get SharedArrayBuffer.prototype.byteLength</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer.prototype.constructor" title="SharedArrayBuffer.prototype.constructor"><span class="secnum">25.2.5.2</span> SharedArrayBuffer.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer.prototype.grow" title="SharedArrayBuffer.prototype.grow ( newLength )"><span class="secnum">25.2.5.3</span> SharedArrayBuffer.prototype.grow ( <var>newLength</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-sharedarraybuffer.prototype.growable" title="get SharedArrayBuffer.prototype.growable"><span class="secnum">25.2.5.4</span> get SharedArrayBuffer.prototype.growable</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-sharedarraybuffer.prototype.maxbytelength" title="get SharedArrayBuffer.prototype.maxByteLength"><span class="secnum">25.2.5.5</span> get SharedArrayBuffer.prototype.maxByteLength</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer.prototype.slice" title="SharedArrayBuffer.prototype.slice ( start, end )"><span class="secnum">25.2.5.6</span> SharedArrayBuffer.prototype.slice ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer.prototype-%symbol.tostringtag%" title="SharedArrayBuffer.prototype [ %Symbol.toStringTag% ]"><span class="secnum">25.2.5.7</span> SharedArrayBuffer.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-properties-of-the-sharedarraybuffer-instances" title="Properties of SharedArrayBuffer Instances"><span class="secnum">25.2.6</span> Properties of SharedArrayBuffer Instances</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-growable-sharedarraybuffer-guidelines" title="Growable SharedArrayBuffer Guidelines"><span class="secnum">25.2.7</span> Growable SharedArrayBuffer Guidelines</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-dataview-objects" title="DataView Objects"><span class="secnum">25.3</span> DataView Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="structured-data.html#sec-abstract-operations-for-dataview-objects" title="Abstract Operations For DataView Objects"><span class="secnum">25.3.1</span> Abstract Operations For DataView Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview-with-buffer-witness-records" title="DataView With Buffer Witness Records"><span class="secnum">25.3.1.1</span> DataView With Buffer Witness Records</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-makedataviewwithbufferwitnessrecord" title="MakeDataViewWithBufferWitnessRecord ( obj, order )"><span class="secnum">25.3.1.2</span> MakeDataViewWithBufferWitnessRecord ( <var>obj</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getviewbytelength" title="GetViewByteLength ( viewRecord )"><span class="secnum">25.3.1.3</span> GetViewByteLength ( <var>viewRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isviewoutofbounds" title="IsViewOutOfBounds ( viewRecord )"><span class="secnum">25.3.1.4</span> IsViewOutOfBounds ( <var>viewRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getviewvalue" title="GetViewValue ( view, requestIndex, isLittleEndian, type )"><span class="secnum">25.3.1.5</span> GetViewValue ( <var>view</var>, <var>requestIndex</var>, <var>isLittleEndian</var>, <var>type</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-setviewvalue" title="SetViewValue ( view, requestIndex, isLittleEndian, type, value )"><span class="secnum">25.3.1.6</span> SetViewValue ( <var>view</var>, <var>requestIndex</var>, <var>isLittleEndian</var>, <var>type</var>, <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-dataview-constructor" title="The DataView Constructor"><span class="secnum">25.3.2</span> The DataView Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview-buffer-byteoffset-bytelength" title="DataView ( buffer [ , byteOffset [ , byteLength ] ] )"><span class="secnum">25.3.2.1</span> DataView ( <var>buffer</var> [ , <var>byteOffset</var> [ , <var>byteLength</var> ] ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-dataview-constructor" title="Properties of the DataView Constructor"><span class="secnum">25.3.3</span> Properties of the DataView Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype" title="DataView.prototype"><span class="secnum">25.3.3.1</span> DataView.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-dataview-prototype-object" title="Properties of the DataView Prototype Object"><span class="secnum">25.3.4</span> Properties of the DataView Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-dataview.prototype.buffer" title="get DataView.prototype.buffer"><span class="secnum">25.3.4.1</span> get DataView.prototype.buffer</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-dataview.prototype.bytelength" title="get DataView.prototype.byteLength"><span class="secnum">25.3.4.2</span> get DataView.prototype.byteLength</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-dataview.prototype.byteoffset" title="get DataView.prototype.byteOffset"><span class="secnum">25.3.4.3</span> get DataView.prototype.byteOffset</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.constructor" title="DataView.prototype.constructor"><span class="secnum">25.3.4.4</span> DataView.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getbigint64" title="DataView.prototype.getBigInt64 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.5</span> DataView.prototype.getBigInt64 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getbiguint64" title="DataView.prototype.getBigUint64 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.6</span> DataView.prototype.getBigUint64 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getfloat16" title="DataView.prototype.getFloat16 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.7</span> DataView.prototype.getFloat16 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getfloat32" title="DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.8</span> DataView.prototype.getFloat32 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getfloat64" title="DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.9</span> DataView.prototype.getFloat64 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getint8" title="DataView.prototype.getInt8 ( byteOffset )"><span class="secnum">25.3.4.10</span> DataView.prototype.getInt8 ( <var>byteOffset</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getint16" title="DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.11</span> DataView.prototype.getInt16 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getint32" title="DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.12</span> DataView.prototype.getInt32 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getuint8" title="DataView.prototype.getUint8 ( byteOffset )"><span class="secnum">25.3.4.13</span> DataView.prototype.getUint8 ( <var>byteOffset</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getuint16" title="DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.14</span> DataView.prototype.getUint16 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getuint32" title="DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.15</span> DataView.prototype.getUint32 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setbigint64" title="DataView.prototype.setBigInt64 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.16</span> DataView.prototype.setBigInt64 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setbiguint64" title="DataView.prototype.setBigUint64 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.17</span> DataView.prototype.setBigUint64 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setfloat16" title="DataView.prototype.setFloat16 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.18</span> DataView.prototype.setFloat16 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setfloat32" title="DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.19</span> DataView.prototype.setFloat32 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setfloat64" title="DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.20</span> DataView.prototype.setFloat64 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setint8" title="DataView.prototype.setInt8 ( byteOffset, value )"><span class="secnum">25.3.4.21</span> DataView.prototype.setInt8 ( <var>byteOffset</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setint16" title="DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.22</span> DataView.prototype.setInt16 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setint32" title="DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.23</span> DataView.prototype.setInt32 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setuint8" title="DataView.prototype.setUint8 ( byteOffset, value )"><span class="secnum">25.3.4.24</span> DataView.prototype.setUint8 ( <var>byteOffset</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setuint16" title="DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.25</span> DataView.prototype.setUint16 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setuint32" title="DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.26</span> DataView.prototype.setUint32 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype-%symbol.tostringtag%" title="DataView.prototype [ %Symbol.toStringTag% ]"><span class="secnum">25.3.4.27</span> DataView.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-properties-of-dataview-instances" title="Properties of DataView Instances"><span class="secnum">25.3.5</span> Properties of DataView Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-atomics-object" title="The Atomics Object"><span class="secnum">25.4</span> The Atomics Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-waiter-record" title="Waiter Record"><span class="secnum">25.4.1</span> Waiter Record</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-waiterlist-records" title="WaiterList Records"><span class="secnum">25.4.2</span> WaiterList Records</a></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-abstract-operations-for-atomics" title="Abstract Operations for Atomics"><span class="secnum">25.4.3</span> Abstract Operations for Atomics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-validateintegertypedarray" title="ValidateIntegerTypedArray ( typedArray, waitable )"><span class="secnum">25.4.3.1</span> ValidateIntegerTypedArray ( <var>typedArray</var>, <var>waitable</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-validateatomicaccess" title="ValidateAtomicAccess ( taRecord, requestIndex )"><span class="secnum">25.4.3.2</span> ValidateAtomicAccess ( <var>taRecord</var>, <var>requestIndex</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-validateatomicaccessonintegertypedarray" title="ValidateAtomicAccessOnIntegerTypedArray ( typedArray, requestIndex )"><span class="secnum">25.4.3.3</span> ValidateAtomicAccessOnIntegerTypedArray ( <var>typedArray</var>, <var>requestIndex</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-revalidateatomicaccess" title="RevalidateAtomicAccess ( typedArray, byteIndexInBuffer )"><span class="secnum">25.4.3.4</span> RevalidateAtomicAccess ( <var>typedArray</var>, <var>byteIndexInBuffer</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getwaiterlist" title="GetWaiterList ( block, i )"><span class="secnum">25.4.3.5</span> GetWaiterList ( <var>block</var>, <var>i</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-entercriticalsection" title="EnterCriticalSection ( WL )"><span class="secnum">25.4.3.6</span> EnterCriticalSection ( <var>WL</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-leavecriticalsection" title="LeaveCriticalSection ( WL )"><span class="secnum">25.4.3.7</span> LeaveCriticalSection ( <var>WL</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-addwaiter" title="AddWaiter ( WL, waiterRecord )"><span class="secnum">25.4.3.8</span> AddWaiter ( <var>WL</var>, <var>waiterRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-removewaiter" title="RemoveWaiter ( WL, waiterRecord )"><span class="secnum">25.4.3.9</span> RemoveWaiter ( <var>WL</var>, <var>waiterRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-removewaiters" title="RemoveWaiters ( WL, c )"><span class="secnum">25.4.3.10</span> RemoveWaiters ( <var>WL</var>, <var>c</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-suspendthisagent" title="SuspendThisAgent ( WL, waiterRecord )"><span class="secnum">25.4.3.11</span> SuspendThisAgent ( <var>WL</var>, <var>waiterRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-notifywaiter" title="NotifyWaiter ( WL, waiterRecord )"><span class="secnum">25.4.3.12</span> NotifyWaiter ( <var>WL</var>, <var>waiterRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-enqueueresolveinagentjob" title="EnqueueResolveInAgentJob ( agentSignifier, promiseCapability, resolution )"><span class="secnum">25.4.3.13</span> EnqueueResolveInAgentJob ( <var>agentSignifier</var>, <var>promiseCapability</var>, <var>resolution</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dowait" title="DoWait ( mode, typedArray, index, value, timeout )"><span class="secnum">25.4.3.14</span> DoWait ( <var>mode</var>, <var>typedArray</var>, <var>index</var>, <var>value</var>, <var>timeout</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-enqueueatomicswaitasynctimeoutjob" title="EnqueueAtomicsWaitAsyncTimeoutJob ( WL, waiterRecord )"><span class="secnum">25.4.3.15</span> EnqueueAtomicsWaitAsyncTimeoutJob ( <var>WL</var>, <var>waiterRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomiccompareexchangeinsharedblock" title="AtomicCompareExchangeInSharedBlock ( block, byteIndexInBuffer, elementSize, expectedBytes, replacementBytes )"><span class="secnum">25.4.3.16</span> AtomicCompareExchangeInSharedBlock ( <var>block</var>, <var>byteIndexInBuffer</var>, <var>elementSize</var>, <var>expectedBytes</var>, <var>replacementBytes</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomicreadmodifywrite" title="AtomicReadModifyWrite ( typedArray, index, value, op )"><span class="secnum">25.4.3.17</span> AtomicReadModifyWrite ( <var>typedArray</var>, <var>index</var>, <var>value</var>, <var>op</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-bytelistbitwiseop" title="ByteListBitwiseOp ( op, xBytes, yBytes )"><span class="secnum">25.4.3.18</span> ByteListBitwiseOp ( <var>op</var>, <var>xBytes</var>, <var>yBytes</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-bytelistequal" title="ByteListEqual ( xBytes, yBytes )"><span class="secnum">25.4.3.19</span> ByteListEqual ( <var>xBytes</var>, <var>yBytes</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.add" title="Atomics.add ( typedArray, index, value )"><span class="secnum">25.4.4</span> Atomics.add ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.and" title="Atomics.and ( typedArray, index, value )"><span class="secnum">25.4.5</span> Atomics.and ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.compareexchange" title="Atomics.compareExchange ( typedArray, index, expectedValue, replacementValue )"><span class="secnum">25.4.6</span> Atomics.compareExchange ( <var>typedArray</var>, <var>index</var>, <var>expectedValue</var>, <var>replacementValue</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.exchange" title="Atomics.exchange ( typedArray, index, value )"><span class="secnum">25.4.7</span> Atomics.exchange ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.islockfree" title="Atomics.isLockFree ( size )"><span class="secnum">25.4.8</span> Atomics.isLockFree ( <var>size</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.load" title="Atomics.load ( typedArray, index )"><span class="secnum">25.4.9</span> Atomics.load ( <var>typedArray</var>, <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.or" title="Atomics.or ( typedArray, index, value )"><span class="secnum">25.4.10</span> Atomics.or ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.store" title="Atomics.store ( typedArray, index, value )"><span class="secnum">25.4.11</span> Atomics.store ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.sub" title="Atomics.sub ( typedArray, index, value )"><span class="secnum">25.4.12</span> Atomics.sub ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.wait" title="Atomics.wait ( typedArray, index, value, timeout )"><span class="secnum">25.4.13</span> Atomics.wait ( <var>typedArray</var>, <var>index</var>, <var>value</var>, <var>timeout</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.waitasync" title="Atomics.waitAsync ( typedArray, index, value, timeout )"><span class="secnum">25.4.14</span> Atomics.waitAsync ( <var>typedArray</var>, <var>index</var>, <var>value</var>, <var>timeout</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.notify" title="Atomics.notify ( typedArray, index, count )"><span class="secnum">25.4.15</span> Atomics.notify ( <var>typedArray</var>, <var>index</var>, <var>count</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.xor" title="Atomics.xor ( typedArray, index, value )"><span class="secnum">25.4.16</span> Atomics.xor ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics-%symbol.tostringtag%" title="Atomics [ %Symbol.toStringTag% ]"><span class="secnum">25.4.17</span> Atomics [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-json-object" title="The JSON Object"><span class="secnum">25.5</span> The JSON Object</a><ol class="toc"><li><span class="item-toggle">+</span><a href="structured-data.html#sec-json.parse" title="JSON.parse ( text [ , reviver ] )"><span class="secnum">25.5.1</span> JSON.parse ( <var>text</var> [ , <var>reviver</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-ParseJSON" title="ParseJSON ( text )"><span class="secnum">25.5.1.1</span> ParseJSON ( <var>text</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-internalizejsonproperty" title="InternalizeJSONProperty ( holder, name, reviver )"><span class="secnum">25.5.1.2</span> InternalizeJSONProperty ( <var>holder</var>, <var>name</var>, <var>reviver</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-json.stringify" title="JSON.stringify ( value [ , replacer [ , space ] ] )"><span class="secnum">25.5.2</span> JSON.stringify ( <var>value</var> [ , <var>replacer</var> [ , <var>space</var> ] ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-json-serialization-record" title="JSON Serialization Record"><span class="secnum">25.5.2.1</span> JSON Serialization Record</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-serializejsonproperty" title="SerializeJSONProperty ( state, key, holder )"><span class="secnum">25.5.2.2</span> SerializeJSONProperty ( <var>state</var>, <var>key</var>, <var>holder</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-quotejsonstring" title="QuoteJSONString ( value )"><span class="secnum">25.5.2.3</span> QuoteJSONString ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-unicodeescape" title="UnicodeEscape ( C )"><span class="secnum">25.5.2.4</span> UnicodeEscape ( <var>C</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-serializejsonobject" title="SerializeJSONObject ( state, value )"><span class="secnum">25.5.2.5</span> SerializeJSONObject ( <var>state</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-serializejsonarray" title="SerializeJSONArray ( state, value )"><span class="secnum">25.5.2.6</span> SerializeJSONArray ( <var>state</var>, <var>value</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-json-%symbol.tostringtag%" title="JSON [ %Symbol.toStringTag% ]"><span class="secnum">25.5.3</span> JSON [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-managing-memory" title="Managing Memory"><span class="secnum">26</span> Managing Memory</a><ol class="toc"><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-weak-ref-objects" title="WeakRef Objects"><span class="secnum">26.1</span> WeakRef Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-weak-ref-constructor" title="The WeakRef Constructor"><span class="secnum">26.1.1</span> The WeakRef Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weak-ref-target" title="WeakRef ( target )"><span class="secnum">26.1.1.1</span> WeakRef ( <var>target</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-properties-of-the-weak-ref-constructor" title="Properties of the WeakRef Constructor"><span class="secnum">26.1.2</span> Properties of the WeakRef Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weak-ref.prototype" title="WeakRef.prototype"><span class="secnum">26.1.2.1</span> WeakRef.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-properties-of-the-weak-ref-prototype-object" title="Properties of the WeakRef Prototype Object"><span class="secnum">26.1.3</span> Properties of the WeakRef Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weak-ref.prototype.constructor" title="WeakRef.prototype.constructor"><span class="secnum">26.1.3.1</span> WeakRef.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weak-ref.prototype.deref" title="WeakRef.prototype.deref ( )"><span class="secnum">26.1.3.2</span> WeakRef.prototype.deref ( )</a></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weak-ref.prototype-%symbol.tostringtag%" title="WeakRef.prototype [ %Symbol.toStringTag% ]"><span class="secnum">26.1.3.3</span> WeakRef.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-weakref-abstract-operations" title="WeakRef Abstract Operations"><span class="secnum">26.1.4</span> WeakRef Abstract Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weakrefderef" title="WeakRefDeref ( weakRef )"><span class="secnum">26.1.4.1</span> WeakRefDeref ( <var>weakRef</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-properties-of-weak-ref-instances" title="Properties of WeakRef Instances"><span class="secnum">26.1.5</span> Properties of WeakRef Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-finalization-registry-objects" title="FinalizationRegistry Objects"><span class="secnum">26.2</span> FinalizationRegistry Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-finalization-registry-constructor" title="The FinalizationRegistry Constructor"><span class="secnum">26.2.1</span> The FinalizationRegistry Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry-cleanup-callback" title="FinalizationRegistry ( cleanupCallback )"><span class="secnum">26.2.1.1</span> FinalizationRegistry ( <var>cleanupCallback</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-properties-of-the-finalization-registry-constructor" title="Properties of the FinalizationRegistry Constructor"><span class="secnum">26.2.2</span> Properties of the FinalizationRegistry Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry.prototype" title="FinalizationRegistry.prototype"><span class="secnum">26.2.2.1</span> FinalizationRegistry.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-properties-of-the-finalization-registry-prototype-object" title="Properties of the FinalizationRegistry Prototype Object"><span class="secnum">26.2.3</span> Properties of the FinalizationRegistry Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry.prototype.constructor" title="FinalizationRegistry.prototype.constructor"><span class="secnum">26.2.3.1</span> FinalizationRegistry.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry.prototype.register" title="FinalizationRegistry.prototype.register ( target, heldValue [ , unregisterToken ] )"><span class="secnum">26.2.3.2</span> FinalizationRegistry.prototype.register ( <var>target</var>, <var>heldValue</var> [ , <var>unregisterToken</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry.prototype.unregister" title="FinalizationRegistry.prototype.unregister ( unregisterToken )"><span class="secnum">26.2.3.3</span> FinalizationRegistry.prototype.unregister ( <var>unregisterToken</var> )</a></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry.prototype-%symbol.tostringtag%" title="FinalizationRegistry.prototype [ %Symbol.toStringTag% ]"><span class="secnum">26.2.3.4</span> FinalizationRegistry.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-properties-of-finalization-registry-instances" title="Properties of FinalizationRegistry Instances"><span class="secnum">26.2.4</span> Properties of FinalizationRegistry Instances</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-control-abstraction-objects" title="Control Abstraction Objects"><span class="secnum">27</span> Control Abstraction Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iteration" title="Iteration"><span class="secnum">27.1</span> Iteration</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-common-iteration-interfaces" title="Common Iteration Interfaces"><span class="secnum">27.1.1</span> Common Iteration Interfaces</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterable-interface" title="The Iterable Interface"><span class="secnum">27.1.1.1</span> The Iterable Interface</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator-interface" title="The Iterator Interface"><span class="secnum">27.1.1.2</span> The Iterator Interface</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asynciterable-interface" title="The Async Iterable Interface"><span class="secnum">27.1.1.3</span> The Async Iterable Interface</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asynciterator-interface" title="The Async Iterator Interface"><span class="secnum">27.1.1.4</span> The Async Iterator Interface</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iteratorresult-interface" title="The IteratorResult Interface"><span class="secnum">27.1.1.5</span> The IteratorResult Interface</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator-helper-objects" title="Iterator Helper Objects"><span class="secnum">27.1.2</span> Iterator Helper Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-%iteratorhelperprototype%-object" title="The %IteratorHelperPrototype% Object"><span class="secnum">27.1.2.1</span> The %IteratorHelperPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%iteratorhelperprototype%.next" title="%IteratorHelperPrototype%.next ( )"><span class="secnum">27.1.2.1.1</span> %IteratorHelperPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%iteratorhelperprototype%.return" title="%IteratorHelperPrototype%.return ( )"><span class="secnum">27.1.2.1.2</span> %IteratorHelperPrototype%.return ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%iteratorhelperprototype%-%symbol.tostringtag%" title="%IteratorHelperPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">27.1.2.1.3</span> %IteratorHelperPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator-objects" title="Iterator Objects"><span class="secnum">27.1.3</span> Iterator Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator-constructor" title="The Iterator Constructor"><span class="secnum">27.1.3.1</span> The Iterator Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator" title="Iterator ( )"><span class="secnum">27.1.3.1.1</span> Iterator ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-the-iterator-constructor" title="Properties of the Iterator Constructor"><span class="secnum">27.1.3.2</span> Properties of the Iterator Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.concat" title="Iterator.concat ( ...items )"><span class="secnum">27.1.3.2.1</span> Iterator.concat ( ...<var>items</var> )</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator.from" title="Iterator.from ( O )"><span class="secnum">27.1.3.2.2</span> Iterator.from ( <var>O</var> )</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-%wrapforvaliditeratorprototype%-object" title="The %WrapForValidIteratorPrototype% Object"><span class="secnum">27.1.3.2.2.1</span> The %WrapForValidIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%wrapforvaliditeratorprototype%.next" title="%WrapForValidIteratorPrototype%.next ( )"><span class="secnum">27.1.3.2.2.1.1</span> %WrapForValidIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%wrapforvaliditeratorprototype%.return" title="%WrapForValidIteratorPrototype%.return ( )"><span class="secnum">27.1.3.2.2.1.2</span> %WrapForValidIteratorPrototype%.return ( )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype" title="Iterator.prototype"><span class="secnum">27.1.3.2.3</span> Iterator.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-%iterator.prototype%-object" title="Properties of the Iterator Prototype Object"><span class="secnum">27.1.3.3</span> Properties of the Iterator Prototype Object</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator.prototype.constructor" title="Iterator.prototype.constructor"><span class="secnum">27.1.3.3.1</span> Iterator.prototype.constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-get-iterator.prototype.constructor" title="get Iterator.prototype.constructor"><span class="secnum">27.1.3.3.1.1</span> get Iterator.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-set-iterator.prototype.constructor" title="set Iterator.prototype.constructor"><span class="secnum">27.1.3.3.1.2</span> set Iterator.prototype.constructor</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.drop" title="Iterator.prototype.drop ( limit )"><span class="secnum">27.1.3.3.2</span> Iterator.prototype.drop ( <var>limit</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.every" title="Iterator.prototype.every ( predicate )"><span class="secnum">27.1.3.3.3</span> Iterator.prototype.every ( <var>predicate</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.filter" title="Iterator.prototype.filter ( predicate )"><span class="secnum">27.1.3.3.4</span> Iterator.prototype.filter ( <var>predicate</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.find" title="Iterator.prototype.find ( predicate )"><span class="secnum">27.1.3.3.5</span> Iterator.prototype.find ( <var>predicate</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.flatmap" title="Iterator.prototype.flatMap ( mapper )"><span class="secnum">27.1.3.3.6</span> Iterator.prototype.flatMap ( <var>mapper</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.foreach" title="Iterator.prototype.forEach ( procedure )"><span class="secnum">27.1.3.3.7</span> Iterator.prototype.forEach ( <var>procedure</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.map" title="Iterator.prototype.map ( mapper )"><span class="secnum">27.1.3.3.8</span> Iterator.prototype.map ( <var>mapper</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.reduce" title="Iterator.prototype.reduce ( reducer [ , initialValue ] )"><span class="secnum">27.1.3.3.9</span> Iterator.prototype.reduce ( <var>reducer</var> [ , <var>initialValue</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.some" title="Iterator.prototype.some ( predicate )"><span class="secnum">27.1.3.3.10</span> Iterator.prototype.some ( <var>predicate</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.take" title="Iterator.prototype.take ( limit )"><span class="secnum">27.1.3.3.11</span> Iterator.prototype.take ( <var>limit</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.toarray" title="Iterator.prototype.toArray ( )"><span class="secnum">27.1.3.3.12</span> Iterator.prototype.toArray ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype-%symbol.iterator%" title="Iterator.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">27.1.3.3.13</span> Iterator.prototype [ %Symbol.iterator% ] ( )</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator.prototype-%symbol.tostringtag%" title="Iterator.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.1.3.3.14</span> Iterator.prototype [ %Symbol.toStringTag% ]</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-get-iterator.prototype-%symbol.tostringtag%" title="get Iterator.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.1.3.3.14.1</span> get Iterator.prototype [ %Symbol.toStringTag% ]</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-set-iterator.prototype-%symbol.tostringtag%" title="set Iterator.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.1.3.3.14.2</span> set Iterator.prototype [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asynciteratorprototype" title="The %AsyncIteratorPrototype% Object"><span class="secnum">27.1.4</span> The %AsyncIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%asynciteratorprototype%-%symbol.asynciterator%" title="%AsyncIteratorPrototype% [ %Symbol.asyncIterator% ] ( )"><span class="secnum">27.1.4.1</span> %AsyncIteratorPrototype% [ %Symbol.asyncIterator% ] ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-from-sync-iterator-objects" title="Async-from-Sync Iterator Objects"><span class="secnum">27.1.5</span> Async-from-Sync Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-createasyncfromsynciterator" title="CreateAsyncFromSyncIterator ( syncIteratorRecord )"><span class="secnum">27.1.5.1</span> CreateAsyncFromSyncIterator ( <var>syncIteratorRecord</var> )</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-%asyncfromsynciteratorprototype%-object" title="The %AsyncFromSyncIteratorPrototype% Object"><span class="secnum">27.1.5.2</span> The %AsyncFromSyncIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%asyncfromsynciteratorprototype%.next" title="%AsyncFromSyncIteratorPrototype%.next ( [ value ] )"><span class="secnum">27.1.5.2.1</span> %AsyncFromSyncIteratorPrototype%.next ( [ <var>value</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%asyncfromsynciteratorprototype%.return" title="%AsyncFromSyncIteratorPrototype%.return ( [ value ] )"><span class="secnum">27.1.5.2.2</span> %AsyncFromSyncIteratorPrototype%.return ( [ <var>value</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%asyncfromsynciteratorprototype%.throw" title="%AsyncFromSyncIteratorPrototype%.throw ( [ value ] )"><span class="secnum">27.1.5.2.3</span> %AsyncFromSyncIteratorPrototype%.throw ( [ <var>value</var> ] )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-properties-of-async-from-sync-iterator-instances" title="Properties of Async-from-Sync Iterator Instances"><span class="secnum">27.1.5.3</span> Properties of Async-from-Sync Iterator Instances</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncfromsynciteratorcontinuation" title="AsyncFromSyncIteratorContinuation ( result, promiseCapability, syncIteratorRecord, closeOnRejection )"><span class="secnum">27.1.5.4</span> AsyncFromSyncIteratorContinuation ( <var>result</var>, <var>promiseCapability</var>, <var>syncIteratorRecord</var>, <var>closeOnRejection</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise-objects" title="Promise Objects"><span class="secnum">27.2</span> Promise Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise-abstract-operations" title="Promise Abstract Operations"><span class="secnum">27.2.1</span> Promise Abstract Operations</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promisecapability-records" title="PromiseCapability Records"><span class="secnum">27.2.1.1</span> PromiseCapability Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-ifabruptrejectpromise" title="IfAbruptRejectPromise ( value, capability )"><span class="secnum">27.2.1.1.1</span> IfAbruptRejectPromise ( <var>value</var>, <var>capability</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promisereaction-records" title="PromiseReaction Records"><span class="secnum">27.2.1.2</span> PromiseReaction Records</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-createresolvingfunctions" title="CreateResolvingFunctions ( toResolve )"><span class="secnum">27.2.1.3</span> CreateResolvingFunctions ( <var>toResolve</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-fulfillpromise" title="FulfillPromise ( promise, value )"><span class="secnum">27.2.1.4</span> FulfillPromise ( <var>promise</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-newpromisecapability" title="NewPromiseCapability ( C )"><span class="secnum">27.2.1.5</span> NewPromiseCapability ( <var>C</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-ispromise" title="IsPromise ( x )"><span class="secnum">27.2.1.6</span> IsPromise ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-rejectpromise" title="RejectPromise ( promise, reason )"><span class="secnum">27.2.1.7</span> RejectPromise ( <var>promise</var>, <var>reason</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-triggerpromisereactions" title="TriggerPromiseReactions ( reactions, argument )"><span class="secnum">27.2.1.8</span> TriggerPromiseReactions ( <var>reactions</var>, <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-host-promise-rejection-tracker" title="HostPromiseRejectionTracker ( promise, operation )"><span class="secnum">27.2.1.9</span> HostPromiseRejectionTracker ( <var>promise</var>, <var>operation</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise-jobs" title="Promise Jobs"><span class="secnum">27.2.2</span> Promise Jobs</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-newpromisereactionjob" title="NewPromiseReactionJob ( reaction, argument )"><span class="secnum">27.2.2.1</span> NewPromiseReactionJob ( <var>reaction</var>, <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-newpromiseresolvethenablejob" title="NewPromiseResolveThenableJob ( promiseToResolve, thenable, then )"><span class="secnum">27.2.2.2</span> NewPromiseResolveThenableJob ( <var>promiseToResolve</var>, <var>thenable</var>, <var>then</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise-constructor" title="The Promise Constructor"><span class="secnum">27.2.3</span> The Promise Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise-executor" title="Promise ( executor )"><span class="secnum">27.2.3.1</span> Promise ( <var>executor</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-the-promise-constructor" title="Properties of the Promise Constructor"><span class="secnum">27.2.4</span> Properties of the Promise Constructor</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.all" title="Promise.all ( iterable )"><span class="secnum">27.2.4.1</span> Promise.all ( <var>iterable</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-getpromiseresolve" title="GetPromiseResolve ( promiseConstructor )"><span class="secnum">27.2.4.1.1</span> GetPromiseResolve ( <var>promiseConstructor</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-performpromiseall" title="PerformPromiseAll ( iteratorRecord, constructor, resultCapability, promiseResolve )"><span class="secnum">27.2.4.1.2</span> PerformPromiseAll ( <var>iteratorRecord</var>, <var>constructor</var>, <var>resultCapability</var>, <var>promiseResolve</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.allsettled" title="Promise.allSettled ( iterable )"><span class="secnum">27.2.4.2</span> Promise.allSettled ( <var>iterable</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-performpromiseallsettled" title="PerformPromiseAllSettled ( iteratorRecord, constructor, resultCapability, promiseResolve )"><span class="secnum">27.2.4.2.1</span> PerformPromiseAllSettled ( <var>iteratorRecord</var>, <var>constructor</var>, <var>resultCapability</var>, <var>promiseResolve</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.any" title="Promise.any ( iterable )"><span class="secnum">27.2.4.3</span> Promise.any ( <var>iterable</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-performpromiseany" title="PerformPromiseAny ( iteratorRecord, constructor, resultCapability, promiseResolve )"><span class="secnum">27.2.4.3.1</span> PerformPromiseAny ( <var>iteratorRecord</var>, <var>constructor</var>, <var>resultCapability</var>, <var>promiseResolve</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.prototype" title="Promise.prototype"><span class="secnum">27.2.4.4</span> Promise.prototype</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.race" title="Promise.race ( iterable )"><span class="secnum">27.2.4.5</span> Promise.race ( <var>iterable</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-performpromiserace" title="PerformPromiseRace ( iteratorRecord, constructor, resultCapability, promiseResolve )"><span class="secnum">27.2.4.5.1</span> PerformPromiseRace ( <var>iteratorRecord</var>, <var>constructor</var>, <var>resultCapability</var>, <var>promiseResolve</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.reject" title="Promise.reject ( r )"><span class="secnum">27.2.4.6</span> Promise.reject ( <var>r</var> )</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.resolve" title="Promise.resolve ( x )"><span class="secnum">27.2.4.7</span> Promise.resolve ( <var>x</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise-resolve" title="PromiseResolve ( C, x )"><span class="secnum">27.2.4.7.1</span> PromiseResolve ( <var>C</var>, <var>x</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.try" title="Promise.try ( callback, ...args )"><span class="secnum">27.2.4.8</span> Promise.try ( <var>callback</var>, ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.withResolvers" title="Promise.withResolvers ( )"><span class="secnum">27.2.4.9</span> Promise.withResolvers ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-get-promise-%symbol.species%" title="get Promise [ %Symbol.species% ]"><span class="secnum">27.2.4.10</span> get Promise [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-the-promise-prototype-object" title="Properties of the Promise Prototype Object"><span class="secnum">27.2.5</span> Properties of the Promise Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.prototype.catch" title="Promise.prototype.catch ( onRejected )"><span class="secnum">27.2.5.1</span> Promise.prototype.catch ( <var>onRejected</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.prototype.constructor" title="Promise.prototype.constructor"><span class="secnum">27.2.5.2</span> Promise.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.prototype.finally" title="Promise.prototype.finally ( onFinally )"><span class="secnum">27.2.5.3</span> Promise.prototype.finally ( <var>onFinally</var> )</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.prototype.then" title="Promise.prototype.then ( onFulfilled, onRejected )"><span class="secnum">27.2.5.4</span> Promise.prototype.then ( <var>onFulfilled</var>, <var>onRejected</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-performpromisethen" title="PerformPromiseThen ( promise, onFulfilled, onRejected [ , resultCapability ] )"><span class="secnum">27.2.5.4.1</span> PerformPromiseThen ( <var>promise</var>, <var>onFulfilled</var>, <var>onRejected</var> [ , <var>resultCapability</var> ] )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.prototype-%symbol.tostringtag%" title="Promise.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.2.5.5</span> Promise.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-properties-of-promise-instances" title="Properties of Promise Instances"><span class="secnum">27.2.6</span> Properties of Promise Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-generatorfunction-objects" title="GeneratorFunction Objects"><span class="secnum">27.3</span> GeneratorFunction Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-generatorfunction-constructor" title="The GeneratorFunction Constructor"><span class="secnum">27.3.1</span> The GeneratorFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction" title="GeneratorFunction ( ...parameterArgs, bodyArg )"><span class="secnum">27.3.1.1</span> GeneratorFunction ( ...<var>parameterArgs</var>, <var>bodyArg</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-the-generatorfunction-constructor" title="Properties of the GeneratorFunction Constructor"><span class="secnum">27.3.2</span> Properties of the GeneratorFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction.prototype" title="GeneratorFunction.prototype"><span class="secnum">27.3.2.1</span> GeneratorFunction.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-the-generatorfunction-prototype-object" title="Properties of the GeneratorFunction Prototype Object"><span class="secnum">27.3.3</span> Properties of the GeneratorFunction Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction.prototype.constructor" title="GeneratorFunction.prototype.constructor"><span class="secnum">27.3.3.1</span> GeneratorFunction.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction.prototype.prototype" title="GeneratorFunction.prototype.prototype"><span class="secnum">27.3.3.2</span> GeneratorFunction.prototype.prototype</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction.prototype-%symbol.tostringtag%" title="GeneratorFunction.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.3.3.3</span> GeneratorFunction.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-generatorfunction-instances" title="GeneratorFunction Instances"><span class="secnum">27.3.4</span> GeneratorFunction Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction-instances-length" title="length"><span class="secnum">27.3.4.1</span> length</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction-instances-name" title="name"><span class="secnum">27.3.4.2</span> name</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction-instances-prototype" title="prototype"><span class="secnum">27.3.4.3</span> prototype</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-objects" title="AsyncGeneratorFunction Objects"><span class="secnum">27.4</span> AsyncGeneratorFunction Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-constructor" title="The AsyncGeneratorFunction Constructor"><span class="secnum">27.4.1</span> The AsyncGeneratorFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction" title="AsyncGeneratorFunction ( ...parameterArgs, bodyArg )"><span class="secnum">27.4.1.1</span> AsyncGeneratorFunction ( ...<var>parameterArgs</var>, <var>bodyArg</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-asyncgeneratorfunction" title="Properties of the AsyncGeneratorFunction Constructor"><span class="secnum">27.4.2</span> Properties of the AsyncGeneratorFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-prototype" title="AsyncGeneratorFunction.prototype"><span class="secnum">27.4.2.1</span> AsyncGeneratorFunction.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-asyncgeneratorfunction-prototype" title="Properties of the AsyncGeneratorFunction Prototype Object"><span class="secnum">27.4.3</span> Properties of the AsyncGeneratorFunction Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-prototype-constructor" title="AsyncGeneratorFunction.prototype.constructor"><span class="secnum">27.4.3.1</span> AsyncGeneratorFunction.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-prototype-prototype" title="AsyncGeneratorFunction.prototype.prototype"><span class="secnum">27.4.3.2</span> AsyncGeneratorFunction.prototype.prototype</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-prototype-%symbol.tostringtag%" title="AsyncGeneratorFunction.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.4.3.3</span> AsyncGeneratorFunction.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-instances" title="AsyncGeneratorFunction Instances"><span class="secnum">27.4.4</span> AsyncGeneratorFunction Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-instance-length" title="length"><span class="secnum">27.4.4.1</span> length</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-instance-name" title="name"><span class="secnum">27.4.4.2</span> name</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-instance-prototype" title="prototype"><span class="secnum">27.4.4.3</span> prototype</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-generator-objects" title="Generator Objects"><span class="secnum">27.5</span> Generator Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-generator-prototype" title="The %GeneratorPrototype% Object"><span class="secnum">27.5.1</span> The %GeneratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generator.prototype.constructor" title="%GeneratorPrototype%.constructor"><span class="secnum">27.5.1.1</span> %GeneratorPrototype%.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generator.prototype.next" title="%GeneratorPrototype%.next ( value )"><span class="secnum">27.5.1.2</span> %GeneratorPrototype%.next ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generator.prototype.return" title="%GeneratorPrototype%.return ( value )"><span class="secnum">27.5.1.3</span> %GeneratorPrototype%.return ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generator.prototype.throw" title="%GeneratorPrototype%.throw ( exception )"><span class="secnum">27.5.1.4</span> %GeneratorPrototype%.throw ( <var>exception</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generator.prototype-%symbol.tostringtag%" title="%GeneratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">27.5.1.5</span> %GeneratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-properties-of-generator-instances" title="Properties of Generator Instances"><span class="secnum">27.5.2</span> Properties of Generator Instances</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-generator-abstract-operations" title="Generator Abstract Operations"><span class="secnum">27.5.3</span> Generator Abstract Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorstart" title="GeneratorStart ( generator, generatorBody )"><span class="secnum">27.5.3.1</span> GeneratorStart ( <var>generator</var>, <var>generatorBody</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorvalidate" title="GeneratorValidate ( generator, generatorBrand )"><span class="secnum">27.5.3.2</span> GeneratorValidate ( <var>generator</var>, <var>generatorBrand</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorresume" title="GeneratorResume ( generator, value, generatorBrand )"><span class="secnum">27.5.3.3</span> GeneratorResume ( <var>generator</var>, <var>value</var>, <var>generatorBrand</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorresumeabrupt" title="GeneratorResumeAbrupt ( generator, abruptCompletion, generatorBrand )"><span class="secnum">27.5.3.4</span> GeneratorResumeAbrupt ( <var>generator</var>, <var>abruptCompletion</var>, <var>generatorBrand</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-getgeneratorkind" title="GetGeneratorKind ( )"><span class="secnum">27.5.3.5</span> GetGeneratorKind ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatoryield" title="GeneratorYield ( iteratorResult )"><span class="secnum">27.5.3.6</span> GeneratorYield ( <var>iteratorResult</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-yield" title="Yield ( value )"><span class="secnum">27.5.3.7</span> Yield ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-createiteratorfromclosure" title="CreateIteratorFromClosure ( closure, generatorBrand, generatorPrototype [ , extraSlots ] )"><span class="secnum">27.5.3.8</span> CreateIteratorFromClosure ( <var>closure</var>, <var>generatorBrand</var>, <var>generatorPrototype</var> [ , <var>extraSlots</var> ] )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asyncgenerator-objects" title="AsyncGenerator Objects"><span class="secnum">27.6</span> AsyncGenerator Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-asyncgenerator-prototype" title="The %AsyncGeneratorPrototype% Object"><span class="secnum">27.6.1</span> The %AsyncGeneratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgenerator-prototype-constructor" title="%AsyncGeneratorPrototype%.constructor"><span class="secnum">27.6.1.1</span> %AsyncGeneratorPrototype%.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgenerator-prototype-next" title="%AsyncGeneratorPrototype%.next ( value )"><span class="secnum">27.6.1.2</span> %AsyncGeneratorPrototype%.next ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgenerator-prototype-return" title="%AsyncGeneratorPrototype%.return ( value )"><span class="secnum">27.6.1.3</span> %AsyncGeneratorPrototype%.return ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgenerator-prototype-throw" title="%AsyncGeneratorPrototype%.throw ( exception )"><span class="secnum">27.6.1.4</span> %AsyncGeneratorPrototype%.throw ( <var>exception</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgenerator-prototype-%symbol.tostringtag%" title="%AsyncGeneratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">27.6.1.5</span> %AsyncGeneratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-properties-of-asyncgenerator-intances" title="Properties of AsyncGenerator Instances"><span class="secnum">27.6.2</span> Properties of AsyncGenerator Instances</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asyncgenerator-abstract-operations" title="AsyncGenerator Abstract Operations"><span class="secnum">27.6.3</span> AsyncGenerator Abstract Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorrequest-records" title="AsyncGeneratorRequest Records"><span class="secnum">27.6.3.1</span> AsyncGeneratorRequest Records</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorstart" title="AsyncGeneratorStart ( generator, generatorBody )"><span class="secnum">27.6.3.2</span> AsyncGeneratorStart ( <var>generator</var>, <var>generatorBody</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorvalidate" title="AsyncGeneratorValidate ( generator, generatorBrand )"><span class="secnum">27.6.3.3</span> AsyncGeneratorValidate ( <var>generator</var>, <var>generatorBrand</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorenqueue" title="AsyncGeneratorEnqueue ( generator, completion, promiseCapability )"><span class="secnum">27.6.3.4</span> AsyncGeneratorEnqueue ( <var>generator</var>, <var>completion</var>, <var>promiseCapability</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorcompletestep" title="AsyncGeneratorCompleteStep ( generator, completion, done [ , realm ] )"><span class="secnum">27.6.3.5</span> AsyncGeneratorCompleteStep ( <var>generator</var>, <var>completion</var>, <var>done</var> [ , <var>realm</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorresume" title="AsyncGeneratorResume ( generator, completion )"><span class="secnum">27.6.3.6</span> AsyncGeneratorResume ( <var>generator</var>, <var>completion</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorunwrapyieldresumption" title="AsyncGeneratorUnwrapYieldResumption ( resumptionValue )"><span class="secnum">27.6.3.7</span> AsyncGeneratorUnwrapYieldResumption ( <var>resumptionValue</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratoryield" title="AsyncGeneratorYield ( value )"><span class="secnum">27.6.3.8</span> AsyncGeneratorYield ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorawaitreturn" title="AsyncGeneratorAwaitReturn ( generator )"><span class="secnum">27.6.3.9</span> AsyncGeneratorAwaitReturn ( <var>generator</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratordrainqueue" title="AsyncGeneratorDrainQueue ( generator )"><span class="secnum">27.6.3.10</span> AsyncGeneratorDrainQueue ( <var>generator</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-function-objects" title="AsyncFunction Objects"><span class="secnum">27.7</span> AsyncFunction Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-function-constructor" title="The AsyncFunction Constructor"><span class="secnum">27.7.1</span> The AsyncFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-constructor-arguments" title="AsyncFunction ( ...parameterArgs, bodyArg )"><span class="secnum">27.7.1.1</span> AsyncFunction ( ...<var>parameterArgs</var>, <var>bodyArg</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-function-constructor-properties" title="Properties of the AsyncFunction Constructor"><span class="secnum">27.7.2</span> Properties of the AsyncFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-constructor-prototype" title="AsyncFunction.prototype"><span class="secnum">27.7.2.1</span> AsyncFunction.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-function-prototype-properties" title="Properties of the AsyncFunction Prototype Object"><span class="secnum">27.7.3</span> Properties of the AsyncFunction Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-prototype-properties-constructor" title="AsyncFunction.prototype.constructor"><span class="secnum">27.7.3.1</span> AsyncFunction.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-prototype-%symbol.tostringtag%" title="AsyncFunction.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.7.3.2</span> AsyncFunction.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-function-instances" title="AsyncFunction Instances"><span class="secnum">27.7.4</span> AsyncFunction Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-instances-length" title="length"><span class="secnum">27.7.4.1</span> length</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-instances-name" title="name"><span class="secnum">27.7.4.2</span> name</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-functions-abstract-operations" title="Async Functions Abstract Operations"><span class="secnum">27.7.5</span> Async Functions Abstract Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-functions-abstract-operations-async-function-start" title="AsyncFunctionStart ( promiseCapability, asyncFunctionBody )"><span class="secnum">27.7.5.1</span> AsyncFunctionStart ( <var>promiseCapability</var>, <var>asyncFunctionBody</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncblockstart" title="AsyncBlockStart ( promiseCapability, asyncBody, asyncContext )"><span class="secnum">27.7.5.2</span> AsyncBlockStart ( <var>promiseCapability</var>, <var>asyncBody</var>, <var>asyncContext</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#await" title="Await ( value )"><span class="secnum">27.7.5.3</span> Await ( <var>value</var> )</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="reflection.html#sec-reflection" title="Reflection"><span class="secnum">28</span> Reflection</a><ol class="toc"><li><span class="item-toggle">+</span><a href="reflection.html#sec-reflect-object" title="The Reflect Object"><span class="secnum">28.1</span> The Reflect Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.apply" title="Reflect.apply ( target, thisArgument, argumentsList )"><span class="secnum">28.1.1</span> Reflect.apply ( <var>target</var>, <var>thisArgument</var>, <var>argumentsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.construct" title="Reflect.construct ( target, argumentsList [ , newTarget ] )"><span class="secnum">28.1.2</span> Reflect.construct ( <var>target</var>, <var>argumentsList</var> [ , <var>newTarget</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.defineproperty" title="Reflect.defineProperty ( target, propertyKey, attributes )"><span class="secnum">28.1.3</span> Reflect.defineProperty ( <var>target</var>, <var>propertyKey</var>, <var>attributes</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.deleteproperty" title="Reflect.deleteProperty ( target, propertyKey )"><span class="secnum">28.1.4</span> Reflect.deleteProperty ( <var>target</var>, <var>propertyKey</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.get" title="Reflect.get ( target, propertyKey [ , receiver ] )"><span class="secnum">28.1.5</span> Reflect.get ( <var>target</var>, <var>propertyKey</var> [ , <var>receiver</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.getownpropertydescriptor" title="Reflect.getOwnPropertyDescriptor ( target, propertyKey )"><span class="secnum">28.1.6</span> Reflect.getOwnPropertyDescriptor ( <var>target</var>, <var>propertyKey</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.getprototypeof" title="Reflect.getPrototypeOf ( target )"><span class="secnum">28.1.7</span> Reflect.getPrototypeOf ( <var>target</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.has" title="Reflect.has ( target, propertyKey )"><span class="secnum">28.1.8</span> Reflect.has ( <var>target</var>, <var>propertyKey</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.isextensible" title="Reflect.isExtensible ( target )"><span class="secnum">28.1.9</span> Reflect.isExtensible ( <var>target</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.ownkeys" title="Reflect.ownKeys ( target )"><span class="secnum">28.1.10</span> Reflect.ownKeys ( <var>target</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.preventextensions" title="Reflect.preventExtensions ( target )"><span class="secnum">28.1.11</span> Reflect.preventExtensions ( <var>target</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.set" title="Reflect.set ( target, propertyKey, V [ , receiver ] )"><span class="secnum">28.1.12</span> Reflect.set ( <var>target</var>, <var>propertyKey</var>, <var>V</var> [ , <var>receiver</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.setprototypeof" title="Reflect.setPrototypeOf ( target, proto )"><span class="secnum">28.1.13</span> Reflect.setPrototypeOf ( <var>target</var>, <var>proto</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect-%symbol.tostringtag%" title="Reflect [ %Symbol.toStringTag% ]"><span class="secnum">28.1.14</span> Reflect [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="reflection.html#sec-proxy-objects" title="Proxy Objects"><span class="secnum">28.2</span> Proxy Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="reflection.html#sec-proxy-constructor" title="The Proxy Constructor"><span class="secnum">28.2.1</span> The Proxy Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="reflection.html#sec-proxy-target-handler" title="Proxy ( target, handler )"><span class="secnum">28.2.1.1</span> Proxy ( <var>target</var>, <var>handler</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="reflection.html#sec-properties-of-the-proxy-constructor" title="Properties of the Proxy Constructor"><span class="secnum">28.2.2</span> Properties of the Proxy Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="reflection.html#sec-proxy.revocable" title="Proxy.revocable ( target, handler )"><span class="secnum">28.2.2.1</span> Proxy.revocable ( <var>target</var>, <var>handler</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="reflection.html#sec-module-namespace-objects" title="Module Namespace Objects"><span class="secnum">28.3</span> Module Namespace Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="reflection.html#sec-%symbol.tostringtag%" title="%Symbol.toStringTag%"><span class="secnum">28.3.1</span> %Symbol.toStringTag%</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="memory-model.html#sec-memory-model" title="Memory Model"><span class="secnum">29</span> Memory Model</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-memory-model-fundamentals" title="Memory Model Fundamentals"><span class="secnum">29.1</span> Memory Model Fundamentals</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-agent-event-records" title="Agent Events Records"><span class="secnum">29.2</span> Agent Events Records</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-chosen-value-records" title="Chosen Value Records"><span class="secnum">29.3</span> Chosen Value Records</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-candidate-executions" title="Candidate Executions"><span class="secnum">29.4</span> Candidate Executions</a></li><li><span class="item-toggle">+</span><a href="memory-model.html#sec-abstract-operations-for-the-memory-model" title="Abstract Operations for the Memory Model"><span class="secnum">29.5</span> Abstract Operations for the Memory Model</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-event-set" title="EventSet ( execution )"><span class="secnum">29.5.1</span> EventSet ( <var>execution</var> )</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-sharedatablockeventset" title="SharedDataBlockEventSet ( execution )"><span class="secnum">29.5.2</span> SharedDataBlockEventSet ( <var>execution</var> )</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-hosteventset" title="HostEventSet ( execution )"><span class="secnum">29.5.3</span> HostEventSet ( <var>execution</var> )</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-composewriteeventbytes" title="ComposeWriteEventBytes ( execution, byteIndex, Ws )"><span class="secnum">29.5.4</span> ComposeWriteEventBytes ( <var>execution</var>, <var>byteIndex</var>, <var>Ws</var> )</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-valueofreadevent" title="ValueOfReadEvent ( execution, R )"><span class="secnum">29.5.5</span> ValueOfReadEvent ( <var>execution</var>, <var>R</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="memory-model.html#sec-relations-of-candidate-executions" title="Relations of Candidate Executions"><span class="secnum">29.6</span> Relations of Candidate Executions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-agent-order" title="is-agent-order-before"><span class="secnum">29.6.1</span> is-agent-order-before</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-reads-bytes-from" title="reads-bytes-from"><span class="secnum">29.6.2</span> reads-bytes-from</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-reads-from" title="reads-from"><span class="secnum">29.6.3</span> reads-from</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-host-synchronizes-with" title="host-synchronizes-with"><span class="secnum">29.6.4</span> host-synchronizes-with</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-synchronizes-with" title="synchronizes-with"><span class="secnum">29.6.5</span> synchronizes-with</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-happens-before" title="happens-before"><span class="secnum">29.6.6</span> happens-before</a></li></ol></li><li><span class="item-toggle">+</span><a href="memory-model.html#sec-properties-of-valid-executions" title="Properties of Valid Executions"><span class="secnum">29.7</span> Properties of Valid Executions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-valid-chosen-reads" title="Valid Chosen Reads"><span class="secnum">29.7.1</span> Valid Chosen Reads</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-coherent-reads" title="Coherent Reads"><span class="secnum">29.7.2</span> Coherent Reads</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-tear-free-aligned-reads" title="Tear Free Reads"><span class="secnum">29.7.3</span> Tear Free Reads</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-memory-order" title="Sequentially Consistent Atomics"><span class="secnum">29.7.4</span> Sequentially Consistent Atomics</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-valid-executions" title="Valid Executions"><span class="secnum">29.7.5</span> Valid Executions</a></li></ol></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-races" title="Races"><span class="secnum">29.8</span> Races</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-data-races" title="Data Races"><span class="secnum">29.9</span> Data Races</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-data-race-freedom" title="Data Race Freedom"><span class="secnum">29.10</span> Data Race Freedom</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-shared-memory-guidelines" title="Shared Memory Guidelines"><span class="secnum">29.11</span> Shared Memory Guidelines</a></li></ol></li><li><span class="item-toggle">+</span><a href="grammar-summary.html#sec-grammar-summary" title="Grammar Summary"><span class="secnum">Annex A <span class="annex-kind">(informative)</span></span> Grammar Summary</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-lexical-grammar" title="Lexical Grammar"><span class="secnum">A.1</span> Lexical Grammar</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-expressions" title="Expressions"><span class="secnum">A.2</span> Expressions</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-statements" title="Statements"><span class="secnum">A.3</span> Statements</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-functions-and-classes" title="Functions and Classes"><span class="secnum">A.4</span> Functions and Classes</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-scripts-and-modules" title="Scripts and Modules"><span class="secnum">A.5</span> Scripts and Modules</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-number-conversions" title="Number Conversions"><span class="secnum">A.6</span> Number Conversions</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-time-zone-offset-string-format" title="Time Zone Offset String Format"><span class="secnum">A.7</span> Time Zone Offset String Format</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-regular-expressions" title="Regular Expressions"><span class="secnum">A.8</span> Regular Expressions</a></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-ecmascript-features-for-web-browsers" title="Additional ECMAScript Features for Web Browsers"><span class="secnum">Annex B <span class="annex-kind">(normative)</span></span> Additional ECMAScript Features for Web Browsers</a><ol class="toc"><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-syntax" title="Additional Syntax"><span class="secnum">B.1</span> Additional Syntax</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-html-like-comments" title="HTML-like Comments"><span class="secnum">B.1.1</span> HTML-like Comments</a></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-regular-expressions-patterns" title="Regular Expressions Patterns"><span class="secnum">B.1.2</span> Regular Expressions Patterns</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-patterns-static-semantics-early-errors-annexb" title="Static Semantics: Early Errors"><span class="secnum">B.1.2.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-countleftcapturingparens-annexb" title="Static Semantics: CountLeftCapturingParensWithin and CountLeftCapturingParensBefore"><span class="secnum">B.1.2.2</span> SS: CountLeftCapturingParensWithin and CountLeftCapturingParensBefore</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-patterns-static-semantics-is-character-class-annexb" title="Static Semantics: IsCharacterClass"><span class="secnum">B.1.2.3</span> SS: IsCharacterClass</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-patterns-static-semantics-character-value-annexb" title="Static Semantics: CharacterValue"><span class="secnum">B.1.2.4</span> SS: CharacterValue</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-compilesubpattern-annexb" title="Runtime Semantics: CompileSubpattern"><span class="secnum">B.1.2.5</span> RS: CompileSubpattern</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-compileassertion-annexb" title="Runtime Semantics: CompileAssertion"><span class="secnum">B.1.2.6</span> RS: CompileAssertion</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-compileatom-annexb" title="Runtime Semantics: CompileAtom"><span class="secnum">B.1.2.7</span> RS: CompileAtom</a></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-compiletocharset-annexb" title="Runtime Semantics: CompileToCharSet"><span class="secnum">B.1.2.8</span> RS: CompileToCharSet</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-runtime-semantics-characterrangeorunion-abstract-operation" title="CharacterRangeOrUnion ( rer, A, B )"><span class="secnum">B.1.2.8.1</span> CharacterRangeOrUnion ( <var>rer</var>, <var>A</var>, <var>B</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-parsepattern-annexb" title="Static Semantics: ParsePattern ( patternText, u, v )"><span class="secnum">B.1.2.9</span> SS: ParsePattern ( <var>patternText</var>, <var>u</var>, <var>v</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-built-in-properties" title="Additional Built-in Properties"><span class="secnum">B.2</span> Additional Built-in Properties</a><ol class="toc"><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-properties-of-the-global-object" title="Additional Properties of the Global Object"><span class="secnum">B.2.1</span> Additional Properties of the Global Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-escape-string" title="escape ( string )"><span class="secnum">B.2.1.1</span> escape ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-unescape-string" title="unescape ( string )"><span class="secnum">B.2.1.2</span> unescape ( <var>string</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-properties-of-the-string.prototype-object" title="Additional Properties of the String.prototype Object"><span class="secnum">B.2.2</span> Additional Properties of the String.prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.substr" title="String.prototype.substr ( start, length )"><span class="secnum">B.2.2.1</span> String.prototype.substr ( <var>start</var>, <var>length</var> )</a></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.anchor" title="String.prototype.anchor ( name )"><span class="secnum">B.2.2.2</span> String.prototype.anchor ( <var>name</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-createhtml" title="CreateHTML ( string, tag, attribute, value )"><span class="secnum">B.2.2.2.1</span> CreateHTML ( <var>string</var>, <var>tag</var>, <var>attribute</var>, <var>value</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.big" title="String.prototype.big ( )"><span class="secnum">B.2.2.3</span> String.prototype.big ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.blink" title="String.prototype.blink ( )"><span class="secnum">B.2.2.4</span> String.prototype.blink ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.bold" title="String.prototype.bold ( )"><span class="secnum">B.2.2.5</span> String.prototype.bold ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.fixed" title="String.prototype.fixed ( )"><span class="secnum">B.2.2.6</span> String.prototype.fixed ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.fontcolor" title="String.prototype.fontcolor ( colour )"><span class="secnum">B.2.2.7</span> String.prototype.fontcolor ( <var>colour</var> )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.fontsize" title="String.prototype.fontsize ( size )"><span class="secnum">B.2.2.8</span> String.prototype.fontsize ( <var>size</var> )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.italics" title="String.prototype.italics ( )"><span class="secnum">B.2.2.9</span> String.prototype.italics ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.link" title="String.prototype.link ( url )"><span class="secnum">B.2.2.10</span> String.prototype.link ( <var>url</var> )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.small" title="String.prototype.small ( )"><span class="secnum">B.2.2.11</span> String.prototype.small ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.strike" title="String.prototype.strike ( )"><span class="secnum">B.2.2.12</span> String.prototype.strike ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.sub" title="String.prototype.sub ( )"><span class="secnum">B.2.2.13</span> String.prototype.sub ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.sup" title="String.prototype.sup ( )"><span class="secnum">B.2.2.14</span> String.prototype.sup ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#String.prototype.trimleft" title="String.prototype.trimLeft ( )"><span class="secnum">B.2.2.15</span> String.prototype.trimLeft ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#String.prototype.trimright" title="String.prototype.trimRight ( )"><span class="secnum">B.2.2.16</span> String.prototype.trimRight ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-properties-of-the-date.prototype-object" title="Additional Properties of the Date.prototype Object"><span class="secnum">B.2.3</span> Additional Properties of the Date.prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-date.prototype.getyear" title="Date.prototype.getYear ( )"><span class="secnum">B.2.3.1</span> Date.prototype.getYear ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-date.prototype.setyear" title="Date.prototype.setYear ( year )"><span class="secnum">B.2.3.2</span> Date.prototype.setYear ( <var>year</var> )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-date.prototype.togmtstring" title="Date.prototype.toGMTString ( )"><span class="secnum">B.2.3.3</span> Date.prototype.toGMTString ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-properties-of-the-regexp.prototype-object" title="Additional Properties of the RegExp.prototype Object"><span class="secnum">B.2.4</span> Additional Properties of the RegExp.prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-regexp.prototype.compile" title="RegExp.prototype.compile ( pattern, flags )"><span class="secnum">B.2.4.1</span> RegExp.prototype.compile ( <var>pattern</var>, <var>flags</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-other-additional-features" title="Other Additional Features"><span class="secnum">B.3</span> Other Additional Features</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-labelled-function-declarations" title="Labelled Function Declarations"><span class="secnum">B.3.1</span> Labelled Function Declarations</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-block-level-function-declarations-web-legacy-compatibility-semantics" title="Block-Level Function Declarations Web Legacy Compatibility Semantics"><span class="secnum">B.3.2</span> Block-Level Function Declarations Web Legacy Compatibility Semantics</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-functiondeclarations-in-ifstatement-statement-clauses" title="FunctionDeclarations in IfStatement Statement Clauses"><span class="secnum">B.3.3</span> FunctionDeclarations in IfStatement Statement Clauses</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-variablestatements-in-catch-blocks" title="VariableStatements in Catch Blocks"><span class="secnum">B.3.4</span> VariableStatements in Catch Blocks</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-initializers-in-forin-statement-heads" title="Initializers in ForIn Statement Heads"><span class="secnum">B.3.5</span> Initializers in ForIn Statement Heads</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-IsHTMLDDA-internal-slot" title="The [[IsHTMLDDA]] Internal Slot"><span class="secnum">B.3.6</span> The <var class="field">[[IsHTMLDDA]]</var> Internal Slot</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-web-compat-host-make-job-callback" title="Non-default behaviour in HostMakeJobCallback"><span class="secnum">B.3.7</span> Non-default behaviour in HostMakeJobCallback</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-web-compat-host-ensure-can-add-private-field" title="Non-default behaviour in HostEnsureCanAddPrivateElement"><span class="secnum">B.3.8</span> Non-default behaviour in HostEnsureCanAddPrivateElement</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-runtime-errors-for-function-call-assignment-targets" title="Runtime Errors for Function Call Assignment Targets"><span class="secnum">B.3.9</span> Runtime Errors for Function Call Assignment Targets</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="strict-mode-of-ecmascript.html#sec-strict-mode-of-ecmascript" title="The Strict Mode of ECMAScript"><span class="secnum">Annex C <span class="annex-kind">(informative)</span></span> The Strict Mode of ECMAScript</a></li><li><span class="item-toggle">+</span><a href="host-layering-points.html#sec-host-layering-points" title="Host Layering Points"><span class="secnum">Annex D <span class="annex-kind">(informative)</span></span> Host Layering Points</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-hooks-summary" title="Host Hooks"><span class="secnum">D.1</span> Host Hooks</a></li><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-defined-fields-summary" title="Host-defined Fields"><span class="secnum">D.2</span> Host-defined Fields</a></li><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-defined-objects-summary" title="Host-defined Objects"><span class="secnum">D.3</span> Host-defined Objects</a></li><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-running-jobs" title="Running Jobs"><span class="secnum">D.4</span> Running Jobs</a></li><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-internal-methods-of-exotic-objects" title="Internal Methods of Exotic Objects"><span class="secnum">D.5</span> Internal Methods of Exotic Objects</a></li><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-built-in-objects-and-methods" title="Built-in Objects and Methods"><span class="secnum">D.6</span> Built-in Objects and Methods</a></li></ol></li><li><span class="item-toggle-none"></span><a href="corrections-and-clarifications-in-ecmascript-2015-with-possible-compatibility-impact.html#sec-corrections-and-clarifications-in-ecmascript-2015-with-possible-compatibility-impact" title="Corrections and Clarifications in ECMAScript 2015 with Possible Compatibility Impact"><span class="secnum">Annex E <span class="annex-kind">(informative)</span></span> Corrections and Clarifications in ECMAScript 2015 with Possible Compatibility Impact</a></li><li><span class="item-toggle-none"></span><a href="additions-and-changes-that-introduce-incompatibilities-with-prior-editions.html#sec-additions-and-changes-that-introduce-incompatibilities-with-prior-editions" title="Additions and Changes That Introduce Incompatibilities with Prior Editions"><span class="secnum">Annex F <span class="annex-kind">(informative)</span></span> Additions and Changes That Introduce Incompatibilities with Prior Editions</a></li><li><span class="item-toggle-none"></span><a href="bibliography.html#sec-bibliography" title="Bibliography">Bibliography</a></li><li><span class="item-toggle-none"></span><a href="colophon.html#sec-colophon" title="Colophon">Colophon</a></li><li><span class="item-toggle-none"></span><a href="copyright-and-software-license.html#sec-copyright-and-software-license" title="Copyright & Software License">Copyright & Software License</a></li></ol></div></div>
|
|
<div id="menu-spacer" class="menu-spacer"></div>
|
|
<div id="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" style="width:100%; height:100%; stroke:currentColor" viewBox="0 0 120 120" width="54" height="54">
|
|
<title>Menu</title>
|
|
<path stroke-width="10" stroke-linecap="round" d="M30,60 h60 M30,30 m0,5 h60 M30,90 m0,-5 h60"></path>
|
|
</svg></div>
|
|
<div id="shortcuts-help">
|
|
<ul>
|
|
<li><span>Toggle shortcuts help</span><code>?</code></li>
|
|
<li><span>Toggle "can call user code" annotations</span><code>u</code></li>
|
|
<li><span>Navigate to/from multipage</span><code>m</code></li>
|
|
<li><span>Jump to search box</span><code>/</code></li>
|
|
<li><span>Toggle pinning of the current clause</span><code>p</code></li>
|
|
<li><span>Jump to the <i>n</i><sup>th</sup> pin</span><code>1-9</code></li>
|
|
<li><span>Jump to the 10<sup>th</sup> pin</span><code>0</code></li>
|
|
<li><span>Jump to the most recent link target</span><code>`</code></li>
|
|
</ul></div><div id='spec-container'><emu-clause id="sec-ecmascript-language-scripts-and-modules">
|
|
<h1><span class="secnum">16</span> ECMAScript Language: Scripts and Modules</h1>
|
|
|
|
<emu-clause id="sec-scripts">
|
|
<h1><span class="secnum">16.1</span> Scripts</h1>
|
|
<h2>Syntax</h2>
|
|
<emu-grammar type="definition"><emu-production name="Script" id="prod-Script">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-Script">Script</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cmjfjhkc" id="prod-JhWenwzh">
|
|
<emu-nt optional="" id="_ref_23384"><a href="ecmascript-language-scripts-and-modules.html#prod-ScriptBody">ScriptBody</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="ScriptBody" id="prod-ScriptBody">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ScriptBody">ScriptBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mn4pemzx" id="prod-0cNJefq0">
|
|
<emu-nt params="~Yield, ~Await, ~Return" id="_ref_23385"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a><emu-mods><emu-params>[~Yield, ~Await, ~Return]</emu-params></emu-mods></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
|
|
<emu-clause id="sec-scripts-static-semantics-early-errors">
|
|
<h1><span class="secnum">16.1.1</span> Static Semantics: Early Errors</h1>
|
|
<emu-grammar><emu-production name="Script" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-Script">Script</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="t4-zzfei"><emu-nt id="_ref_23386"><a href="ecmascript-language-scripts-and-modules.html#prod-ScriptBody">ScriptBody</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<ul>
|
|
<li>
|
|
It is a Syntax Error if the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_8383"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_23387"><a href="ecmascript-language-scripts-and-modules.html#prod-ScriptBody">ScriptBody</a></emu-nt> contains any duplicate entries.
|
|
</li>
|
|
<li>
|
|
It is a Syntax Error if any element of the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_8384"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_23388"><a href="ecmascript-language-scripts-and-modules.html#prod-ScriptBody">ScriptBody</a></emu-nt> also occurs in the <emu-xref aoid="VarDeclaredNames" id="_ref_8385"><a href="syntax-directed-operations.html#sec-static-semantics-vardeclarednames">VarDeclaredNames</a></emu-xref> of <emu-nt id="_ref_23389"><a href="ecmascript-language-scripts-and-modules.html#prod-ScriptBody">ScriptBody</a></emu-nt>.
|
|
</li>
|
|
</ul>
|
|
<emu-grammar><emu-production name="ScriptBody" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ScriptBody">ScriptBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="z0a6dhkf"><emu-nt id="_ref_23390"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<ul>
|
|
<li>
|
|
It is a Syntax Error if <emu-nt id="_ref_23391"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a></emu-nt> <emu-xref aoid="Contains" id="_ref_8386"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <code>super</code> unless the source text containing <code>super</code> is eval code that is being processed by a <emu-xref href="#sec-function-calls-runtime-semantics-evaluation" id="_ref_8387"><a href="ecmascript-language-expressions.html#sec-function-calls-runtime-semantics-evaluation">direct eval</a></emu-xref>. Additional <emu-xref href="#early-error" id="_ref_8388"><a href="error-handling-and-language-extensions.html#early-error">early error</a></emu-xref> rules for <code>super</code> within <emu-xref href="#sec-function-calls-runtime-semantics-evaluation" id="_ref_8389"><a href="ecmascript-language-expressions.html#sec-function-calls-runtime-semantics-evaluation">direct eval</a></emu-xref> are defined in <emu-xref href="#sec-performeval" id="_ref_473"><a href="global-object.html#sec-performeval">19.2.1.1</a></emu-xref>.
|
|
</li>
|
|
<li>
|
|
It is a Syntax Error if <emu-nt id="_ref_23392"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a></emu-nt> <emu-xref aoid="Contains" id="_ref_8390"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_23393"><a href="ecmascript-language-expressions.html#prod-NewTarget">NewTarget</a></emu-nt> unless the source text containing <emu-nt id="_ref_23394"><a href="ecmascript-language-expressions.html#prod-NewTarget">NewTarget</a></emu-nt> is eval code that is being processed by a <emu-xref href="#sec-function-calls-runtime-semantics-evaluation" id="_ref_8391"><a href="ecmascript-language-expressions.html#sec-function-calls-runtime-semantics-evaluation">direct eval</a></emu-xref>. Additional <emu-xref href="#early-error" id="_ref_8392"><a href="error-handling-and-language-extensions.html#early-error">early error</a></emu-xref> rules for <emu-nt id="_ref_23395"><a href="ecmascript-language-expressions.html#prod-NewTarget">NewTarget</a></emu-nt> in <emu-xref href="#sec-function-calls-runtime-semantics-evaluation" id="_ref_8393"><a href="ecmascript-language-expressions.html#sec-function-calls-runtime-semantics-evaluation">direct eval</a></emu-xref> are defined in <emu-xref href="#sec-performeval" id="_ref_474"><a href="global-object.html#sec-performeval">19.2.1.1</a></emu-xref>.
|
|
</li>
|
|
<li>
|
|
It is a Syntax Error if <emu-xref aoid="ContainsDuplicateLabels" id="_ref_8394"><a href="syntax-directed-operations.html#sec-static-semantics-containsduplicatelabels">ContainsDuplicateLabels</a></emu-xref> of <emu-nt id="_ref_23396"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a></emu-nt> with argument « » is <emu-val>true</emu-val>.
|
|
</li>
|
|
<li>
|
|
It is a Syntax Error if <emu-xref aoid="ContainsUndefinedBreakTarget" id="_ref_8395"><a href="syntax-directed-operations.html#sec-static-semantics-containsundefinedbreaktarget">ContainsUndefinedBreakTarget</a></emu-xref> of <emu-nt id="_ref_23397"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a></emu-nt> with argument « » is <emu-val>true</emu-val>.
|
|
</li>
|
|
<li>
|
|
It is a Syntax Error if <emu-xref aoid="ContainsUndefinedContinueTarget" id="_ref_8396"><a href="syntax-directed-operations.html#sec-static-semantics-containsundefinedcontinuetarget">ContainsUndefinedContinueTarget</a></emu-xref> of <emu-nt id="_ref_23398"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a></emu-nt> with arguments « » and « » is <emu-val>true</emu-val>.
|
|
</li>
|
|
<li>
|
|
It is a Syntax Error if <emu-xref aoid="AllPrivateIdentifiersValid" id="_ref_8397"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-allprivateidentifiersvalid">AllPrivateIdentifiersValid</a></emu-xref> of <emu-nt id="_ref_23399"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a></emu-nt> with argument « » is <emu-val>false</emu-val> unless the source text containing <emu-nt id="_ref_23400"><a href="ecmascript-language-scripts-and-modules.html#prod-ScriptBody">ScriptBody</a></emu-nt> is eval code that is being processed by a <emu-xref href="#sec-function-calls-runtime-semantics-evaluation" id="_ref_8398"><a href="ecmascript-language-expressions.html#sec-function-calls-runtime-semantics-evaluation">direct eval</a></emu-xref>.
|
|
</li>
|
|
</ul>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-scriptisstrict" oldids="sec-static-semantics-isstrict" type="sdo" aoid="ScriptIsStrict"><span id="sec-static-semantics-isstrict"></span>
|
|
<h1><span class="secnum">16.1.2</span> Static Semantics: ScriptIsStrict</h1>
|
|
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8399"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ScriptIsStrict takes no arguments and returns a Boolean. It is defined piecewise over the following productions:</p>
|
|
<emu-grammar><emu-production name="Script" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-Script">Script</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cmjfjhkc" id="prod-R9SMhYlS"><emu-nt optional="" id="_ref_23401"><a href="ecmascript-language-scripts-and-modules.html#prod-ScriptBody">ScriptBody</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>If <emu-nt id="_ref_23402"><a href="ecmascript-language-scripts-and-modules.html#prod-ScriptBody">ScriptBody</a></emu-nt> is present and the <emu-xref href="#directive-prologue" id="_ref_8400"><a href="ecmascript-language-source-code.html#directive-prologue">Directive Prologue</a></emu-xref> of <emu-nt id="_ref_23403"><a href="ecmascript-language-scripts-and-modules.html#prod-ScriptBody">ScriptBody</a></emu-nt> contains a <emu-xref href="#use-strict-directive" id="_ref_8401"><a href="ecmascript-language-source-code.html#use-strict-directive">Use Strict Directive</a></emu-xref>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-script-semantics-runtime-semantics-evaluation" type="sdo">
|
|
<h1><span class="secnum">16.1.3</span> Runtime Semantics: Evaluation</h1>
|
|
<emu-grammar><emu-production name="Script" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-Script">Script</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n7nathbb" id="prod-L8JYzsWQ"><emu-gann>[empty]</emu-gann></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return <emu-val>undefined</emu-val>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-script-records">
|
|
<h1><span class="secnum">16.1.4</span> Script Records</h1>
|
|
|
|
<p>A <dfn id="script-record" variants="Script Records" tabindex="-1">Script Record</dfn> encapsulates information about a script being evaluated. Each script record contains the fields listed in <emu-xref href="#table-script-records" id="_ref_475"><a href="ecmascript-language-scripts-and-modules.html#table-script-records">Table 34</a></emu-xref>.</p>
|
|
|
|
<emu-table id="table-script-records" caption="Script Record Fields"><figure><figcaption>Table 34: <emu-xref href="#script-record" id="_ref_8402"><a href="ecmascript-language-scripts-and-modules.html#script-record">Script Record</a></emu-xref> Fields</figcaption>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>
|
|
Field Name
|
|
</th>
|
|
<th>
|
|
Value Type
|
|
</th>
|
|
<th>
|
|
Meaning
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<td>
|
|
<var class="field">[[Realm]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#realm-record" id="_ref_8403"><a href="executable-code-and-execution-contexts.html#realm-record">Realm Record</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
The <emu-xref href="#realm" id="_ref_8404"><a href="executable-code-and-execution-contexts.html#realm">realm</a></emu-xref> within which this script was created.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[ECMAScriptCode]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-nt id="_ref_23404"><a href="ecmascript-language-scripts-and-modules.html#prod-Script">Script</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_8405"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
The result of parsing the source text of this script.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[LoadedModules]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8406"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#loadedmodulerequest-record" id="_ref_8407"><a href="ecmascript-language-scripts-and-modules.html#loadedmodulerequest-record">LoadedModuleRequest Records</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
A map from the specifier strings imported by this script to the resolved <emu-xref href="#sec-abstract-module-records" id="_ref_8408"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>. The list does not contain two different <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8409"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Records</a></emu-xref> <var>r1</var> and <var>r2</var> such that <emu-xref aoid="ModuleRequestsEqual" id="_ref_8410"><a href="ecmascript-language-scripts-and-modules.html#sec-ModuleRequestsEqual">ModuleRequestsEqual</a></emu-xref>(<var>r1</var>, <var>r2</var>) is <emu-val>true</emu-val>.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[HostDefined]]</var>
|
|
</td>
|
|
<td>
|
|
anything (default value is <emu-const>empty</emu-const>)
|
|
</td>
|
|
<td>
|
|
Field reserved for use by <emu-xref href="#host-environment" id="_ref_8411"><a href="overview.html#host-environment">host environments</a></emu-xref> that need to associate additional information with a script.
|
|
</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-parse-script" type="abstract operation" aoid="ParseScript">
|
|
<h1><span class="secnum">16.1.5</span> ParseScript ( <var>sourceText</var>, <var>realm</var>, <var>hostDefined</var> )</h1>
|
|
<p>The abstract operation ParseScript takes arguments <var>sourceText</var> (<emu-xref href="#sec-source-text" id="_ref_8412"><a href="ecmascript-language-source-code.html#sec-source-text">ECMAScript source text</a></emu-xref>), <var>realm</var> (a <emu-xref href="#realm-record" id="_ref_8413"><a href="executable-code-and-execution-contexts.html#realm-record">Realm Record</a></emu-xref>), and <var>hostDefined</var> (anything) and returns a <emu-xref href="#script-record" id="_ref_8414"><a href="ecmascript-language-scripts-and-modules.html#script-record">Script Record</a></emu-xref> or a non-empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8415"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-val>SyntaxError</emu-val> objects. It creates a <emu-xref href="#script-record" id="_ref_8416"><a href="ecmascript-language-scripts-and-modules.html#script-record">Script Record</a></emu-xref> based upon the result of parsing <var>sourceText</var> as a <emu-nt id="_ref_23405"><a href="ecmascript-language-scripts-and-modules.html#prod-Script">Script</a></emu-nt>. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li>Let <var>script</var> be <emu-xref aoid="ParseText" id="_ref_8417"><a href="ecmascript-language-source-code.html#sec-parsetext">ParseText</a></emu-xref>(<var>sourceText</var>, <emu-nt id="_ref_23406"><a href="ecmascript-language-scripts-and-modules.html#prod-Script">Script</a></emu-nt>).</li><li>If <var>script</var> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8418"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of errors, return <var>script</var>.</li><li>Return <emu-xref href="#script-record" id="_ref_8419"><a href="ecmascript-language-scripts-and-modules.html#script-record">Script Record</a></emu-xref> { <var class="field">[[Realm]]</var>: <var>realm</var>, <var class="field">[[ECMAScriptCode]]</var>: <var>script</var>, <var class="field">[[LoadedModules]]</var>: « », <var class="field">[[HostDefined]]</var>: <var>hostDefined</var> }.</li></ol></emu-alg>
|
|
<emu-note><span class="note">Note</span><div class="note-contents">
|
|
<p>An implementation may parse script source text and analyse it for Early Error conditions prior to evaluation of ParseScript for that script source text. However, the reporting of any errors must be deferred until the point where this specification actually performs ParseScript upon that source text.</p>
|
|
</div></emu-note>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-runtime-semantics-scriptevaluation" type="abstract operation" aoid="ScriptEvaluation">
|
|
<h1><span class="secnum">16.1.6</span> ScriptEvaluation ( <var>scriptRecord</var> )</h1>
|
|
<p>The abstract operation ScriptEvaluation takes argument <var>scriptRecord</var> (a <emu-xref href="#script-record" id="_ref_8420"><a href="ecmascript-language-scripts-and-modules.html#script-record">Script Record</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8421"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> an <emu-xref href="#sec-ecmascript-language-types" id="_ref_8422"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_8423"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li>Let <var>globalEnv</var> be <var>scriptRecord</var>.<var class="field">[[Realm]]</var>.<var class="field">[[GlobalEnv]]</var>.</li><li>Let <var>scriptContext</var> be a new <emu-xref href="#ecmascript-code-execution-context" id="_ref_8424"><a href="executable-code-and-execution-contexts.html#ecmascript-code-execution-context">ECMAScript code execution context</a></emu-xref>.</li><li>Set the Function of <var>scriptContext</var> to <emu-val>null</emu-val>.</li><li>Set the <emu-xref href="#realm" id="_ref_8425"><a href="executable-code-and-execution-contexts.html#realm">Realm</a></emu-xref> of <var>scriptContext</var> to <var>scriptRecord</var>.<var class="field">[[Realm]]</var>.</li><li>Set the ScriptOrModule of <var>scriptContext</var> to <var>scriptRecord</var>.</li><li>Set the VariableEnvironment of <var>scriptContext</var> to <var>globalEnv</var>.</li><li>Set the LexicalEnvironment of <var>scriptContext</var> to <var>globalEnv</var>.</li><li>Set the PrivateEnvironment of <var>scriptContext</var> to <emu-val>null</emu-val>.</li><li>Suspend the <emu-xref href="#running-execution-context" id="_ref_8426"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Push <var>scriptContext</var> onto the <emu-xref href="#execution-context-stack" id="_ref_8427"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref>; <var>scriptContext</var> is now the <emu-xref href="#running-execution-context" id="_ref_8428"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>script</var> be <var>scriptRecord</var>.<var class="field">[[ECMAScriptCode]]</var>.</li><li>Let <var>result</var> be <emu-xref aoid="Completion" id="_ref_8429"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="GlobalDeclarationInstantiation" id="_ref_8430"><a href="ecmascript-language-scripts-and-modules.html#sec-globaldeclarationinstantiation" class="e-user-code">GlobalDeclarationInstantiation</a></emu-xref>(<var>script</var>, <var>globalEnv</var>)).</li><li>If <var>result</var> is a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8431"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion</a></emu-xref>, then<ol><li>Set <var>result</var> to <emu-xref aoid="Completion" id="_ref_8432"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="Evaluation" id="_ref_8433"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <var>script</var>).</li><li>If <var>result</var> is a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8434"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion</a></emu-xref> and <var>result</var>.<var class="field">[[Value]]</var> is <emu-const>empty</emu-const>, then<ol><li>Set <var>result</var> to <emu-xref aoid="NormalCompletion" id="_ref_8435"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(<emu-val>undefined</emu-val>).</li></ol></li></ol></li><li>Suspend <var>scriptContext</var> and remove it from the <emu-xref href="#execution-context-stack" id="_ref_8436"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_8437"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: The <emu-xref href="#execution-context-stack" id="_ref_8438"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref> is not empty.</li><li>Resume the context that is now on the top of the <emu-xref href="#execution-context-stack" id="_ref_8439"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref> as the <emu-xref href="#running-execution-context" id="_ref_8440"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Return ? <var>result</var>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-globaldeclarationinstantiation" type="abstract operation" oldids="sec-web-compat-globaldeclarationinstantiation" aoid="GlobalDeclarationInstantiation"><span id="sec-web-compat-globaldeclarationinstantiation"></span>
|
|
<h1><span class="secnum">16.1.7</span> GlobalDeclarationInstantiation ( <var>script</var>, <var>env</var> )</h1>
|
|
<p>The abstract operation GlobalDeclarationInstantiation takes arguments <var>script</var> (a <emu-nt id="_ref_23407"><a href="ecmascript-language-scripts-and-modules.html#prod-Script">Script</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_8441"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and <var>env</var> (a <emu-xref href="#sec-global-environment-records" id="_ref_8442"><a href="executable-code-and-execution-contexts.html#sec-global-environment-records">Global Environment Record</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8443"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-const>unused</emu-const> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8444"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. <var>script</var> is the <emu-nt id="_ref_23408"><a href="ecmascript-language-scripts-and-modules.html#prod-Script">Script</a></emu-nt> for which the <emu-xref href="#sec-execution-contexts" id="_ref_8445"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution context</a></emu-xref> is being established. <var>env</var> is the global environment in which bindings are to be created.</p>
|
|
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
|
<p>When an <emu-xref href="#sec-execution-contexts" id="_ref_8446"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution context</a></emu-xref> is established for evaluating scripts, declarations are instantiated in the current global environment. Each global binding declared in the code is instantiated.</p>
|
|
</div></emu-note>
|
|
<p>It performs the following steps when called:</p>
|
|
<emu-alg><ol><li>Let <var>lexNames</var> be the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_8448"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <var>script</var>.</li><li>Let <var>varNames</var> be the <emu-xref aoid="VarDeclaredNames" id="_ref_8449"><a href="syntax-directed-operations.html#sec-static-semantics-vardeclarednames">VarDeclaredNames</a></emu-xref> of <var>script</var>.</li><li>For each element <var>name</var> of <var>lexNames</var>, do<ol><li>If <emu-xref aoid="HasLexicalDeclaration" id="_ref_8450"><a href="executable-code-and-execution-contexts.html#sec-haslexicaldeclaration">HasLexicalDeclaration</a></emu-xref>(<var>env</var>, <var>name</var>) is <emu-val>true</emu-val>, throw a <emu-val>SyntaxError</emu-val> exception.</li><li>Let <var>hasRestrictedGlobal</var> be ? <emu-xref aoid="HasRestrictedGlobalProperty" id="_ref_8451"><a href="executable-code-and-execution-contexts.html#sec-hasrestrictedglobalproperty" class="e-user-code">HasRestrictedGlobalProperty</a></emu-xref>(<var>env</var>, <var>name</var>).</li><li>NOTE: Global <code>var</code> and <code>function</code> bindings (except those that are introduced by non-strict <emu-xref href="#sec-function-calls-runtime-semantics-evaluation" id="_ref_8452"><a href="ecmascript-language-expressions.html#sec-function-calls-runtime-semantics-evaluation">direct eval</a></emu-xref>) are non-configurable and are therefore restricted global properties.</li><li>If <var>hasRestrictedGlobal</var> is <emu-val>true</emu-val>, throw a <emu-val>SyntaxError</emu-val> exception.</li></ol></li><li>For each element <var>name</var> of <var>varNames</var>, do<ol><li>If <emu-xref aoid="HasLexicalDeclaration" id="_ref_8453"><a href="executable-code-and-execution-contexts.html#sec-haslexicaldeclaration">HasLexicalDeclaration</a></emu-xref>(<var>env</var>, <var>name</var>) is <emu-val>true</emu-val>, throw a <emu-val>SyntaxError</emu-val> exception.</li></ol></li><li>Let <var>varDeclarations</var> be the <emu-xref aoid="VarScopedDeclarations" id="_ref_8454"><a href="syntax-directed-operations.html#sec-static-semantics-varscopeddeclarations">VarScopedDeclarations</a></emu-xref> of <var>script</var>.</li><li>Let <var>functionsToInitialize</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8455"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>declaredFunctionNames</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8456"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>For each element <var>d</var> of <var>varDeclarations</var>, in reverse <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8457"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> order, do<ol><li>If <var>d</var> is not either a <emu-nt id="_ref_23409"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableDeclaration">VariableDeclaration</a></emu-nt>, a <emu-nt id="_ref_23410"><a href="ecmascript-language-statements-and-declarations.html#prod-ForBinding">ForBinding</a></emu-nt>, or a <emu-nt id="_ref_23411"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>, then<ol><li><emu-xref href="#assert" id="_ref_8458"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>d</var> is either a <emu-nt id="_ref_23412"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt>, a <emu-nt id="_ref_23413"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorDeclaration">GeneratorDeclaration</a></emu-nt>, an <emu-nt id="_ref_23414"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionDeclaration">AsyncFunctionDeclaration</a></emu-nt>, or an <emu-nt id="_ref_23415"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorDeclaration">AsyncGeneratorDeclaration</a></emu-nt>.</li><li>NOTE: If there are multiple function declarations for the same name, the last declaration is used.</li><li>Let <var>fn</var> be the sole element of the <emu-xref aoid="BoundNames" id="_ref_8459"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <var>d</var>.</li><li>If <var>declaredFunctionNames</var> does not contain <var>fn</var>, then<ol><li>Let <var>fnDefinable</var> be ? <emu-xref aoid="CanDeclareGlobalFunction" id="_ref_8460"><a href="executable-code-and-execution-contexts.html#sec-candeclareglobalfunction" class="e-user-code">CanDeclareGlobalFunction</a></emu-xref>(<var>env</var>, <var>fn</var>).</li><li>If <var>fnDefinable</var> is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Append <var>fn</var> to <var>declaredFunctionNames</var>.</li><li>Insert <var>d</var> as the first element of <var>functionsToInitialize</var>.</li></ol></li></ol></li></ol></li><li>Let <var>declaredVarNames</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8461"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>For each element <var>d</var> of <var>varDeclarations</var>, do<ol><li>If <var>d</var> is either a <emu-nt id="_ref_23416"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableDeclaration">VariableDeclaration</a></emu-nt>, a <emu-nt id="_ref_23417"><a href="ecmascript-language-statements-and-declarations.html#prod-ForBinding">ForBinding</a></emu-nt>, or a <emu-nt id="_ref_23418"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>, then<ol><li>For each String <var>vn</var> of the <emu-xref aoid="BoundNames" id="_ref_8462"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <var>d</var>, do<ol><li>If <var>declaredFunctionNames</var> does not contain <var>vn</var>, then<ol><li>Let <var>vnDefinable</var> be ? <emu-xref aoid="CanDeclareGlobalVar" id="_ref_8463"><a href="executable-code-and-execution-contexts.html#sec-candeclareglobalvar" class="e-user-code">CanDeclareGlobalVar</a></emu-xref>(<var>env</var>, <var>vn</var>).</li><li>If <var>vnDefinable</var> is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>If <var>declaredVarNames</var> does not contain <var>vn</var>, then<ol><li>Append <var>vn</var> to <var>declaredVarNames</var>.</li></ol></li></ol></li></ol></li></ol></li></ol></li><li>NOTE: No abnormal terminations occur after this algorithm step if the <emu-xref href="#sec-global-object" id="_ref_8464"><a href="global-object.html#sec-global-object">global object</a></emu-xref> is an <emu-xref href="#ordinary-object" id="_ref_8465"><a href="ecmascript-data-types-and-values.html#ordinary-object">ordinary object</a></emu-xref>. However, if the <emu-xref href="#sec-global-object" id="_ref_8466"><a href="global-object.html#sec-global-object">global object</a></emu-xref> is a <emu-xref href="#proxy-exotic-object" id="_ref_8467"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic object</a></emu-xref> it may exhibit behaviours that cause abnormal terminations in some of the following steps.</li><li id="step-globaldeclarationinstantiation-web-compat-insertion-point" normative-optional=""><div class="attributes-tag"><emu-xref href="#sec-conformance" id="_ref_8447"><a href="conformance.html#sec-conformance">Normative Optional</a></emu-xref></div>If the <emu-xref href="#host" id="_ref_8468"><a href="overview.html#host">host</a></emu-xref> is a web browser or otherwise supports <emu-xref href="#sec-block-level-function-declarations-web-legacy-compatibility-semantics" title="" id="_ref_476"><a href="additional-ecmascript-features-for-web-browsers.html#sec-block-level-function-declarations-web-legacy-compatibility-semantics">Block-Level Function Declarations Web Legacy Compatibility Semantics</a></emu-xref>, then<ol><li>Let <var>strict</var> be <emu-xref aoid="ScriptIsStrict" id="_ref_8469"><a href="ecmascript-language-scripts-and-modules.html#sec-scriptisstrict">ScriptIsStrict</a></emu-xref> of <var>script</var>.</li><li>If <var>strict</var> is <emu-val>false</emu-val>, then<ol><li>Let <var>declaredFunctionOrVarNames</var> be the <emu-xref href="#list-concatenation" id="_ref_8470"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>declaredFunctionNames</var> and <var>declaredVarNames</var>.</li><li>For each <emu-nt id="_ref_23419"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> <var>f</var> that is directly contained in the <emu-nt id="_ref_23420"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a></emu-nt> of any <emu-nt id="_ref_23421"><a href="ecmascript-language-statements-and-declarations.html#prod-Block">Block</a></emu-nt>, <emu-nt id="_ref_23422"><a href="ecmascript-language-statements-and-declarations.html#prod-CaseClause">CaseClause</a></emu-nt>, or <emu-nt id="_ref_23423"><a href="ecmascript-language-statements-and-declarations.html#prod-DefaultClause">DefaultClause</a></emu-nt> <var>x</var> such that <var>script</var> <emu-xref aoid="Contains" id="_ref_8471"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <var>x</var> is <emu-val>true</emu-val>, do<ol><li>Let <var>F</var> be the <emu-xref aoid="StringValue" id="_ref_8472"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of the <emu-nt id="_ref_23424"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> of <var>f</var>.</li><li>If replacing the <emu-nt id="_ref_23425"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> <var>f</var> with a <emu-nt id="_ref_23426"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableStatement">VariableStatement</a></emu-nt> that has <var>F</var> as a <emu-nt id="_ref_23427"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> would not produce any Early Errors for <var>script</var>, then<ol><li>If <emu-xref aoid="HasLexicalDeclaration" id="_ref_8473"><a href="executable-code-and-execution-contexts.html#sec-haslexicaldeclaration">HasLexicalDeclaration</a></emu-xref>(<var>env</var>, <var>F</var>) is <emu-val>false</emu-val>, then<ol><li>Let <var>fnDefinable</var> be ? <emu-xref aoid="CanDeclareGlobalVar" id="_ref_8474"><a href="executable-code-and-execution-contexts.html#sec-candeclareglobalvar" class="e-user-code">CanDeclareGlobalVar</a></emu-xref>(<var>env</var>, <var>F</var>).</li><li>If <var>fnDefinable</var> is <emu-val>true</emu-val>, then<ol><li>NOTE: A var binding for <var>F</var> is only instantiated here if it is neither a VarDeclaredName nor the name of another <emu-nt id="_ref_23428"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt>.</li><li>If <var>declaredFunctionOrVarNames</var> does not contain <var>F</var>, then<ol><li>Perform ? <emu-xref aoid="CreateGlobalVarBinding" id="_ref_8475"><a href="executable-code-and-execution-contexts.html#sec-createglobalvarbinding" class="e-user-code">CreateGlobalVarBinding</a></emu-xref>(<var>env</var>, <var>F</var>, <emu-val>false</emu-val>).</li><li>Append <var>F</var> to <var>declaredFunctionOrVarNames</var>.</li></ol></li><li id="step-globaldeclarationinstantiation-alt-funcdecl-eval">When the <emu-nt id="_ref_23429"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> <var>f</var> is evaluated, perform the following steps in place of the <emu-nt id="_ref_23430"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> <emu-xref aoid="Evaluation" id="_ref_8476"><a href="syntax-directed-operations.html#sec-evaluation">Evaluation</a></emu-xref> algorithm provided in <emu-xref href="#sec-function-definitions-runtime-semantics-evaluation" id="_ref_477"><a href="ecmascript-language-functions-and-classes.html#sec-function-definitions-runtime-semantics-evaluation">15.2.6</a></emu-xref>:<ol><li>Let <var>gEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_8477"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s VariableEnvironment.</li><li>Let <var>bEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_8478"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment.</li><li>Let <var>fObj</var> be ! <var>bEnv</var>.<emu-xref aoid="GetBindingValue" id="_ref_8479"><a href="executable-code-and-execution-contexts.html#abstract-getbindingvalue">GetBindingValue</a></emu-xref>(<var>F</var>, <emu-val>false</emu-val>).</li><li>Perform ? <span class="e-user-code"><var>gEnv</var>.<emu-xref aoid="SetMutableBinding" id="_ref_8480"><a href="executable-code-and-execution-contexts.html#abstract-setmutablebinding">SetMutableBinding</a></emu-xref>(<var>F</var>, <var>fObj</var>, <emu-val>false</emu-val>)</span>.</li><li>Return <emu-const>unused</emu-const>.</li></ol></li></ol></li></ol></li></ol></li></ol></li></ol></li></ol></li><li>Let <var>lexDeclarations</var> be the <emu-xref aoid="LexicallyScopedDeclarations" id="_ref_8481"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallyscopeddeclarations">LexicallyScopedDeclarations</a></emu-xref> of <var>script</var>.</li><li>Let <var>privateEnv</var> be <emu-val>null</emu-val>.</li><li>For each element <var>d</var> of <var>lexDeclarations</var>, do<ol><li>NOTE: Lexically declared names are only instantiated here but not initialized.</li><li>For each element <var>dn</var> of the <emu-xref aoid="BoundNames" id="_ref_8482"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <var>d</var>, do<ol><li>If <emu-xref aoid="IsConstantDeclaration" id="_ref_8483"><a href="syntax-directed-operations.html#sec-static-semantics-isconstantdeclaration">IsConstantDeclaration</a></emu-xref> of <var>d</var> is <emu-val>true</emu-val>, then<ol><li>Perform ? <span class="e-user-code"><var>env</var>.<emu-xref aoid="CreateImmutableBinding" id="_ref_8484"><a href="executable-code-and-execution-contexts.html#abstract-createimmutablebinding">CreateImmutableBinding</a></emu-xref>(<var>dn</var>, <emu-val>true</emu-val>)</span>.</li></ol></li><li>Else,<ol><li>Perform ? <span class="e-user-code"><var>env</var>.<emu-xref aoid="CreateMutableBinding" id="_ref_8485"><a href="executable-code-and-execution-contexts.html#abstract-createmutablebinding">CreateMutableBinding</a></emu-xref>(<var>dn</var>, <emu-val>false</emu-val>)</span>.</li></ol></li></ol></li></ol></li><li>For each <emu-xref href="#sec-syntactic-grammar" id="_ref_8486"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref> <var>f</var> of <var>functionsToInitialize</var>, do<ol><li>Let <var>fn</var> be the sole element of the <emu-xref aoid="BoundNames" id="_ref_8487"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <var>f</var>.</li><li>Let <var>fo</var> be <emu-xref aoid="InstantiateFunctionObject" id="_ref_8488"><a href="syntax-directed-operations.html#sec-runtime-semantics-instantiatefunctionobject">InstantiateFunctionObject</a></emu-xref> of <var>f</var> with arguments <var>env</var> and <var>privateEnv</var>.</li><li>Perform ? <emu-xref aoid="CreateGlobalFunctionBinding" id="_ref_8489"><a href="executable-code-and-execution-contexts.html#sec-createglobalfunctionbinding" class="e-user-code e-user-code">CreateGlobalFunctionBinding</a></emu-xref>(<var>env</var>, <var>fn</var>, <var>fo</var>, <emu-val>false</emu-val>).</li></ol></li><li>For each String <var>vn</var> of <var>declaredVarNames</var>, do<ol><li>Perform ? <emu-xref aoid="CreateGlobalVarBinding" id="_ref_8490"><a href="executable-code-and-execution-contexts.html#sec-createglobalvarbinding" class="e-user-code e-user-code">CreateGlobalVarBinding</a></emu-xref>(<var>env</var>, <var>vn</var>, <emu-val>false</emu-val>).</li></ol></li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
|
|
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
|
<p><emu-xref href="#early-error" id="_ref_8491"><a href="error-handling-and-language-extensions.html#early-error">Early errors</a></emu-xref> specified in <emu-xref href="#sec-scripts-static-semantics-early-errors" id="_ref_478"><a href="ecmascript-language-scripts-and-modules.html#sec-scripts-static-semantics-early-errors">16.1.1</a></emu-xref> prevent name conflicts between function/var declarations and let/const/class declarations as well as redeclaration of let/const/class bindings for declaration contained within a single <emu-nt id="_ref_23431"><a href="ecmascript-language-scripts-and-modules.html#prod-Script">Script</a></emu-nt>. However, such conflicts and redeclarations that span more than one <emu-nt id="_ref_23432"><a href="ecmascript-language-scripts-and-modules.html#prod-Script">Script</a></emu-nt> are detected as runtime errors during GlobalDeclarationInstantiation. If any such errors are detected, no bindings are instantiated for the script. However, if the <emu-xref href="#sec-global-object" id="_ref_8492"><a href="global-object.html#sec-global-object">global object</a></emu-xref> is defined using <emu-xref href="#proxy-exotic-object" id="_ref_8493"><a href="ordinary-and-exotic-objects-behaviours.html#proxy-exotic-object">Proxy exotic objects</a></emu-xref> then the runtime tests for conflicting declarations may be unreliable resulting in an <emu-xref href="#sec-completion-record-specification-type" id="_ref_8494"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref> and some global declarations not being instantiated. If this occurs, the code for the <emu-nt id="_ref_23433"><a href="ecmascript-language-scripts-and-modules.html#prod-Script">Script</a></emu-nt> is not evaluated.</p>
|
|
<p>Unlike explicit var or function declarations, properties that are directly created on the <emu-xref href="#sec-global-object" id="_ref_8495"><a href="global-object.html#sec-global-object">global object</a></emu-xref> result in global bindings that may be shadowed by let/const/class declarations.</p>
|
|
</div></emu-note>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-modules">
|
|
<h1><span class="secnum">16.2</span> Modules</h1>
|
|
<h2>Syntax</h2>
|
|
<emu-grammar type="definition"><emu-production name="Module" id="prod-Module">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uvsblmsd" id="prod-7jzzWh1g">
|
|
<emu-nt optional="" id="_ref_23434"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleBody">ModuleBody</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="ModuleBody" id="prod-ModuleBody">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleBody">ModuleBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="iqenfemp" id="prod-jN7l5yAN">
|
|
<emu-nt id="_ref_23435"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="ModuleItemList" id="prod-ModuleItemList">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ap7dhqxm" id="prod-AoB9QhTO">
|
|
<emu-nt id="_ref_23436"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="dd23jrxs" id="prod-GXF21Ewo">
|
|
<emu-nt id="_ref_23437"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>
|
|
<emu-nt id="_ref_23438"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="ModuleItem" id="prod-ModuleItem">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4fwtd8-6" id="prod-E3Y7C_Ei">
|
|
<emu-nt id="_ref_23439"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="ky6bsn7x" id="prod-IobLK26D">
|
|
<emu-nt id="_ref_23440"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="qtwquiug" id="prod-hV3VZEve">
|
|
<emu-nt params="~Yield, +Await, ~Return" id="_ref_23441"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementListItem">StatementListItem</a><emu-mods><emu-params>[~Yield, +Await, ~Return]</emu-params></emu-mods></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="ModuleExportName" id="prod-ModuleExportName">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="drsx4tka" id="prod-hD8TcowF">
|
|
<emu-nt id="_ref_23442"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="xhtltz00" id="prod-50n3LPul">
|
|
<emu-nt id="_ref_23443"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
|
|
<emu-clause id="sec-module-semantics">
|
|
<h1><span class="secnum">16.2.1</span> Module Semantics</h1>
|
|
|
|
<emu-clause id="sec-module-semantics-static-semantics-early-errors">
|
|
<h1><span class="secnum">16.2.1.1</span> Static Semantics: Early Errors</h1>
|
|
<emu-grammar><emu-production name="ModuleBody" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleBody">ModuleBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="iqenfemp"><emu-nt id="_ref_23444"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<ul>
|
|
<li>
|
|
It is a Syntax Error if the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_8496"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_23445"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> contains any duplicate entries.
|
|
</li>
|
|
<li>
|
|
It is a Syntax Error if any element of the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_8497"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_23446"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> also occurs in the <emu-xref aoid="VarDeclaredNames" id="_ref_8498"><a href="syntax-directed-operations.html#sec-static-semantics-vardeclarednames">VarDeclaredNames</a></emu-xref> of <emu-nt id="_ref_23447"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>.
|
|
</li>
|
|
<li>
|
|
It is a Syntax Error if the <emu-xref aoid="ExportedNames" id="_ref_8499"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportednames">ExportedNames</a></emu-xref> of <emu-nt id="_ref_23448"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> contains any duplicate entries.
|
|
</li>
|
|
<li>
|
|
It is a Syntax Error if any element of the <emu-xref aoid="ExportedBindings" id="_ref_8500"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportedbindings">ExportedBindings</a></emu-xref> of <emu-nt id="_ref_23449"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> does not also occur in either the <emu-xref aoid="VarDeclaredNames" id="_ref_8501"><a href="syntax-directed-operations.html#sec-static-semantics-vardeclarednames">VarDeclaredNames</a></emu-xref> of <emu-nt id="_ref_23450"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>, or the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_8502"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_23451"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>.
|
|
</li>
|
|
<li>
|
|
It is a Syntax Error if <emu-nt id="_ref_23452"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> <emu-xref aoid="Contains" id="_ref_8503"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <code>super</code>.
|
|
</li>
|
|
<li>
|
|
It is a Syntax Error if <emu-nt id="_ref_23453"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> <emu-xref aoid="Contains" id="_ref_8504"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_23454"><a href="ecmascript-language-expressions.html#prod-NewTarget">NewTarget</a></emu-nt>.
|
|
</li>
|
|
<li>
|
|
It is a Syntax Error if <emu-xref aoid="ContainsDuplicateLabels" id="_ref_8505"><a href="syntax-directed-operations.html#sec-static-semantics-containsduplicatelabels">ContainsDuplicateLabels</a></emu-xref> of <emu-nt id="_ref_23455"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> with argument « » is <emu-val>true</emu-val>.
|
|
</li>
|
|
<li>
|
|
It is a Syntax Error if <emu-xref aoid="ContainsUndefinedBreakTarget" id="_ref_8506"><a href="syntax-directed-operations.html#sec-static-semantics-containsundefinedbreaktarget">ContainsUndefinedBreakTarget</a></emu-xref> of <emu-nt id="_ref_23456"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> with argument « » is <emu-val>true</emu-val>.
|
|
</li>
|
|
<li>
|
|
It is a Syntax Error if <emu-xref aoid="ContainsUndefinedContinueTarget" id="_ref_8507"><a href="syntax-directed-operations.html#sec-static-semantics-containsundefinedcontinuetarget">ContainsUndefinedContinueTarget</a></emu-xref> of <emu-nt id="_ref_23457"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> with arguments « » and « » is <emu-val>true</emu-val>.
|
|
</li>
|
|
<li>
|
|
It is a Syntax Error if <emu-xref aoid="AllPrivateIdentifiersValid" id="_ref_8508"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-allprivateidentifiersvalid">AllPrivateIdentifiersValid</a></emu-xref> of <emu-nt id="_ref_23458"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> with argument « » is <emu-val>false</emu-val>.
|
|
</li>
|
|
</ul>
|
|
<emu-note><span class="note">Note</span><div class="note-contents">
|
|
<p>The duplicate <emu-xref aoid="ExportedNames" id="_ref_8509"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportednames">ExportedNames</a></emu-xref> rule implies that multiple <code>export default</code> <emu-nt id="_ref_23459"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> items within a <emu-nt id="_ref_23460"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleBody">ModuleBody</a></emu-nt> is a Syntax Error. Additional error conditions relating to conflicting or duplicate declarations are checked during module linking prior to evaluation of a <emu-nt id="_ref_23461"><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt>. If any such errors are detected the <emu-nt id="_ref_23462"><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt> is not evaluated.</p>
|
|
</div></emu-note>
|
|
<emu-grammar><emu-production name="ModuleExportName" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xhtltz00"><emu-nt id="_ref_23463"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<ul>
|
|
<li>It is a Syntax Error if <emu-xref aoid="IsStringWellFormedUnicode" id="_ref_8510"><a href="abstract-operations.html#sec-isstringwellformedunicode">IsStringWellFormedUnicode</a></emu-xref>(<emu-xref aoid="SV" id="_ref_8511"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv">SV</a></emu-xref> of <emu-nt id="_ref_23464"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt>) is <emu-val>false</emu-val>.</li>
|
|
</ul>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-importedlocalnames" type="abstract operation" aoid="ImportedLocalNames">
|
|
<h1><span class="secnum">16.2.1.2</span> Static Semantics: ImportedLocalNames ( <var>importEntries</var> )</h1>
|
|
<p>The abstract operation ImportedLocalNames takes argument <var>importEntries</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8512"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#importentry-record" id="_ref_8513"><a href="ecmascript-language-scripts-and-modules.html#importentry-record">ImportEntry Records</a></emu-xref>) and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8514"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Strings. It creates a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8515"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of all of the local name bindings defined by <var>importEntries</var>. It performs the following steps when called:</p>
|
|
<emu-alg><ol><li>Let <var>localNames</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8516"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>For each <emu-xref href="#importentry-record" id="_ref_8517"><a href="ecmascript-language-scripts-and-modules.html#importentry-record">ImportEntry Record</a></emu-xref> <var>i</var> of <var>importEntries</var>, do<ol><li>Append <var>i</var>.<var class="field">[[LocalName]]</var> to <var>localNames</var>.</li></ol></li><li>Return <var>localNames</var>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-modulerequest-record">
|
|
<h1><span class="secnum">16.2.1.3</span> ModuleRequest Records</h1>
|
|
|
|
<p>A <dfn id="modulerequest-record" variants="ModuleRequest Records" tabindex="-1">ModuleRequest Record</dfn> represents the request to import a module with given import attributes. It consists of the following fields:</p>
|
|
<emu-table id="table-modulerequest-fields" caption="ModuleRequest Record Fields"><figure><figcaption>Table 35: <emu-xref href="#modulerequest-record" id="_ref_8518"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> Fields</figcaption>
|
|
<table>
|
|
<tbody><tr>
|
|
<th>
|
|
Field Name
|
|
</th>
|
|
<th>
|
|
Value Type
|
|
</th>
|
|
<th>
|
|
Meaning
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[Specifier]]</var>
|
|
</td>
|
|
<td>
|
|
a String
|
|
</td>
|
|
<td>
|
|
The module specifier
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[Attributes]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8519"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#importattribute-record" id="_ref_8520"><a href="ecmascript-language-scripts-and-modules.html#importattribute-record">ImportAttribute Records</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
The import attributes
|
|
</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
|
|
<p>A <dfn id="loadedmodulerequest-record" variants="LoadedModuleRequest Records" tabindex="-1">LoadedModuleRequest Record</dfn> represents the request to import a module together with the resulting <emu-xref href="#sec-abstract-module-records" id="_ref_8521"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>. It consists of the same fields defined in table <emu-xref href="#table-modulerequest-fields" id="_ref_479"><a href="ecmascript-language-scripts-and-modules.html#table-modulerequest-fields">Table 35</a></emu-xref>, with the addition of <var class="field">[[Module]]</var>:</p>
|
|
<emu-table id="table-loadedmodulerequest-fields" caption="LoadedModuleRequest Record Fields"><figure><figcaption>Table 36: <emu-xref href="#loadedmodulerequest-record" id="_ref_8522"><a href="ecmascript-language-scripts-and-modules.html#loadedmodulerequest-record">LoadedModuleRequest Record</a></emu-xref> Fields</figcaption>
|
|
<table>
|
|
<tbody><tr>
|
|
<th>
|
|
Field Name
|
|
</th>
|
|
<th>
|
|
Value Type
|
|
</th>
|
|
<th>
|
|
Meaning
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[Specifier]]</var>
|
|
</td>
|
|
<td>
|
|
a String
|
|
</td>
|
|
<td>
|
|
The module specifier
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[Attributes]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8523"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#importattribute-record" id="_ref_8524"><a href="ecmascript-language-scripts-and-modules.html#importattribute-record">ImportAttribute Records</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
The import attributes
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[Module]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-abstract-module-records" id="_ref_8525"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
The loaded module corresponding to this module request
|
|
</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
|
|
<p>An <dfn id="importattribute-record" variants="ImportAttribute Records" tabindex="-1">ImportAttribute Record</dfn> consists of the following fields:</p>
|
|
<emu-table id="table-importattribute-fields" caption="ImportAttribute Record Fields"><figure><figcaption>Table 37: <emu-xref href="#importattribute-record" id="_ref_8526"><a href="ecmascript-language-scripts-and-modules.html#importattribute-record">ImportAttribute Record</a></emu-xref> Fields</figcaption>
|
|
<table>
|
|
<tbody><tr>
|
|
<th>
|
|
Field Name
|
|
</th>
|
|
<th>
|
|
Value Type
|
|
</th>
|
|
<th>
|
|
Meaning
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[Key]]</var>
|
|
</td>
|
|
<td>
|
|
a String
|
|
</td>
|
|
<td>
|
|
The attribute key
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[Value]]</var>
|
|
</td>
|
|
<td>
|
|
a String
|
|
</td>
|
|
<td>
|
|
The attribute value
|
|
</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
|
|
<emu-clause id="sec-ModuleRequestsEqual" type="abstract operation" aoid="ModuleRequestsEqual">
|
|
<h1><span class="secnum">16.2.1.3.1</span> ModuleRequestsEqual ( <var>left</var>, <var>right</var> )</h1>
|
|
<p>The abstract operation ModuleRequestsEqual takes arguments <var>left</var> (a <emu-xref href="#modulerequest-record" id="_ref_8527"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> or a <emu-xref href="#loadedmodulerequest-record" id="_ref_8528"><a href="ecmascript-language-scripts-and-modules.html#loadedmodulerequest-record">LoadedModuleRequest Record</a></emu-xref>) and <var>right</var> (a <emu-xref href="#modulerequest-record" id="_ref_8529"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> or a <emu-xref href="#loadedmodulerequest-record" id="_ref_8530"><a href="ecmascript-language-scripts-and-modules.html#loadedmodulerequest-record">LoadedModuleRequest Record</a></emu-xref>) and returns a Boolean. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li>If <var>left</var>.<var class="field">[[Specifier]]</var> is not <var>right</var>.<var class="field">[[Specifier]]</var>, return <emu-val>false</emu-val>.</li><li>Let <var>leftAttrs</var> be <var>left</var>.<var class="field">[[Attributes]]</var>.</li><li>Let <var>rightAttrs</var> be <var>right</var>.<var class="field">[[Attributes]]</var>.</li><li>Let <var>leftAttrsCount</var> be the number of elements in <var>leftAttrs</var>.</li><li>Let <var>rightAttrsCount</var> be the number of elements in <var>rightAttrs</var>.</li><li>If <var>leftAttrsCount</var> ≠ <var>rightAttrsCount</var>, return <emu-val>false</emu-val>.</li><li>For each <emu-xref href="#importattribute-record" id="_ref_8531"><a href="ecmascript-language-scripts-and-modules.html#importattribute-record">ImportAttribute Record</a></emu-xref> <var>l</var> of <var>leftAttrs</var>, do<ol><li>If <var>rightAttrs</var> does not contain an <emu-xref href="#importattribute-record" id="_ref_8532"><a href="ecmascript-language-scripts-and-modules.html#importattribute-record">ImportAttribute Record</a></emu-xref> <var>r</var> such that <var>l</var>.<var class="field">[[Key]]</var> is <var>r</var>.<var class="field">[[Key]]</var> and <var>l</var>.<var class="field">[[Value]]</var> is <var>r</var>.<var class="field">[[Value]]</var>, return <emu-val>false</emu-val>.</li></ol></li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-static-semantics-modulerequests" oldids="sec-module-semantics-static-semantics-modulerequests,sec-imports-static-semantics-modulerequests,sec-exports-static-semantics-modulerequests" type="sdo" aoid="ModuleRequests"><span id="sec-exports-static-semantics-modulerequests"></span><span id="sec-imports-static-semantics-modulerequests"></span><span id="sec-module-semantics-static-semantics-modulerequests"></span>
|
|
<h1><span class="secnum">16.2.1.4</span> Static Semantics: ModuleRequests</h1>
|
|
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8533"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ModuleRequests takes no arguments and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8534"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#modulerequest-record" id="_ref_8535"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Records</a></emu-xref>. It is defined piecewise over the following productions:</p>
|
|
<emu-grammar><emu-production name="Module" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n7nathbb" id="prod-KwkKYyRj"><emu-gann>[empty]</emu-gann></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8536"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ModuleItemList" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ap7dhqxm" id="prod-K1adkbP6"><emu-nt id="_ref_23465"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return the <emu-xref aoid="ModuleRequests" id="_ref_8537"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-modulerequests">ModuleRequests</a></emu-xref> of <emu-nt id="_ref_23466"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ModuleItemList" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dd23jrxs" id="prod-9OD1gHQa">
|
|
<emu-nt id="_ref_23467"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>
|
|
<emu-nt id="_ref_23468"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>requests</var> be the <emu-xref aoid="ModuleRequests" id="_ref_8538"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-modulerequests">ModuleRequests</a></emu-xref> of <emu-nt id="_ref_23469"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>.</li><li>Let <var>additionalRequests</var> be the <emu-xref aoid="ModuleRequests" id="_ref_8539"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-modulerequests">ModuleRequests</a></emu-xref> of <emu-nt id="_ref_23470"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt>.</li><li>For each <emu-xref href="#modulerequest-record" id="_ref_8540"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> <var>mr</var> of <var>additionalRequests</var>, do<ol><li>If <var>requests</var> does not contain a <emu-xref href="#modulerequest-record" id="_ref_8541"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> <var>mr2</var> such that <emu-xref aoid="ModuleRequestsEqual" id="_ref_8542"><a href="ecmascript-language-scripts-and-modules.html#sec-ModuleRequestsEqual">ModuleRequestsEqual</a></emu-xref>(<var>mr</var>, <var>mr2</var>) is <emu-val>true</emu-val>, then<ol><li>Append <var>mr</var> to <var>requests</var>.</li></ol></li></ol></li><li>Return <var>requests</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ModuleItem" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="15hryu6r" id="prod-pGkooQP4"><emu-nt id="_ref_23471"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementListItem">StatementListItem</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8543"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ImportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="glhuxxec" id="prod-Fii3Jv-w">
|
|
<emu-t>import</emu-t>
|
|
<emu-nt id="_ref_23472"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportClause">ImportClause</a></emu-nt>
|
|
<emu-nt id="_ref_23473"><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>specifier</var> be the <emu-xref aoid="SV" id="_ref_8544"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv">SV</a></emu-xref> of <emu-nt id="_ref_23474"><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt>.</li><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8545"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is the <emu-xref href="#modulerequest-record" id="_ref_8546"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> { <var class="field">[[Specifier]]</var>: <var>specifier</var>, <var class="field">[[Attributes]]</var>: « » }.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ImportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ffrp3frd" id="prod-QB5EyLim">
|
|
<emu-t>import</emu-t>
|
|
<emu-nt id="_ref_23475"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportClause">ImportClause</a></emu-nt>
|
|
<emu-nt id="_ref_23476"><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt>
|
|
<emu-nt id="_ref_23477"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>specifier</var> be the <emu-xref aoid="SV" id="_ref_8547"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv">SV</a></emu-xref> of <emu-nt id="_ref_23478"><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt>.</li><li>Let <var>attributes</var> be <emu-xref aoid="WithClauseToAttributes" id="_ref_8548"><a href="ecmascript-language-scripts-and-modules.html#sec-withclausetoattributes">WithClauseToAttributes</a></emu-xref> of <emu-nt id="_ref_23479"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a></emu-nt>.</li><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8549"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is the <emu-xref href="#modulerequest-record" id="_ref_8550"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> { <var class="field">[[Specifier]]</var>: <var>specifier</var>, <var class="field">[[Attributes]]</var>: <var>attributes</var> }.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ImportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="odcuzpbi" id="prod-ipEwhMpm">
|
|
<emu-t>import</emu-t>
|
|
<emu-nt id="_ref_23480"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleSpecifier">ModuleSpecifier</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>specifier</var> be the <emu-xref aoid="SV" id="_ref_8551"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv">SV</a></emu-xref> of <emu-nt id="_ref_23481"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleSpecifier">ModuleSpecifier</a></emu-nt>.</li><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8552"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is the <emu-xref href="#modulerequest-record" id="_ref_8553"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> { <var class="field">[[Specifier]]</var>: <var>specifier</var>, <var class="field">[[Attributes]]</var>: « » }.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ImportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="kvjq5ssp" id="prod-erfgLvxn">
|
|
<emu-t>import</emu-t>
|
|
<emu-nt id="_ref_23482"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleSpecifier">ModuleSpecifier</a></emu-nt>
|
|
<emu-nt id="_ref_23483"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>specifier</var> be the <emu-xref aoid="SV" id="_ref_8554"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv">SV</a></emu-xref> of <emu-nt id="_ref_23484"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleSpecifier">ModuleSpecifier</a></emu-nt>.</li><li>Let <var>attributes</var> be <emu-xref aoid="WithClauseToAttributes" id="_ref_8555"><a href="ecmascript-language-scripts-and-modules.html#sec-withclausetoattributes">WithClauseToAttributes</a></emu-xref> of <emu-nt id="_ref_23485"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a></emu-nt>.</li><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8556"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is the <emu-xref href="#modulerequest-record" id="_ref_8557"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> { <var class="field">[[Specifier]]</var>: <var>specifier</var>, <var class="field">[[Attributes]]</var>: <var>attributes</var> }.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4kqfdugp" id="prod-ShgW98pi">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23486"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportFromClause">ExportFromClause</a></emu-nt>
|
|
<emu-nt id="_ref_23487"><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>specifier</var> be the <emu-xref aoid="SV" id="_ref_8558"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv">SV</a></emu-xref> of <emu-nt id="_ref_23488"><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt>.</li><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8559"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is the <emu-xref href="#modulerequest-record" id="_ref_8560"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> { <var class="field">[[Specifier]]</var>: <var>specifier</var>, <var class="field">[[Attributes]]</var>: « » }.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="-zhwypbp" id="prod-SMs-Ak0F">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23489"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportFromClause">ExportFromClause</a></emu-nt>
|
|
<emu-nt id="_ref_23490"><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt>
|
|
<emu-nt id="_ref_23491"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>specifier</var> be the <emu-xref aoid="SV" id="_ref_8561"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv">SV</a></emu-xref> of <emu-nt id="_ref_23492"><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt>.</li><li>Let <var>attributes</var> be <emu-xref aoid="WithClauseToAttributes" id="_ref_8562"><a href="ecmascript-language-scripts-and-modules.html#sec-withclausetoattributes">WithClauseToAttributes</a></emu-xref> of <emu-nt id="_ref_23493"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a></emu-nt>.</li><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8563"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is the <emu-xref href="#modulerequest-record" id="_ref_8564"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> { <var class="field">[[Specifier]]</var>: <var>specifier</var>, <var class="field">[[Attributes]]</var>: <var>attributes</var> }.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="j2lh_kda" id="prod-x1UQSoBl">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23494"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
<emu-rhs a="bg3oaw2m" id="prod-vvvIsXz5">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23495"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableStatement">VariableStatement</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="go9a4xdq" id="prod-GV0VESxu">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23496"><a href="ecmascript-language-statements-and-declarations.html#prod-Declaration">Declaration</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="cdfbfvfu" id="prod-VYqY45eE">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt id="_ref_23497"><a href="ecmascript-language-statements-and-declarations.html#prod-HoistableDeclaration">HoistableDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="w8pljwgc" id="prod-bcC47tAa">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt id="_ref_23498"><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="4f6ct71n" id="prod-GGFgV72D">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt id="_ref_23499"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8565"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-abstract-module-records">
|
|
<h1><span class="secnum">16.2.1.5</span> Abstract Module Records</h1>
|
|
<p>A <dfn variants="Module Records" tabindex="-1">Module Record</dfn> encapsulates structural information about the imports and exports of a single module. This information is used to link the imports and exports of sets of connected modules. A Module Record includes four fields that are only used when evaluating a module.</p>
|
|
<p>For specification purposes Module Record values are values of the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8566"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> specification type and can be thought of as existing in a simple object-oriented hierarchy where Module Record is an abstract class with both abstract and concrete subclasses. This specification defines the abstract subclass named <emu-xref href="#cyclic-module-record" id="_ref_8567"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> and its concrete subclass named <emu-xref href="#sourctextmodule-record" id="_ref_8568"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Record</a></emu-xref>. Other specifications and implementations may define additional Module Record subclasses corresponding to alternative module definition facilities that they defined.</p>
|
|
<p>Module Record defines the fields listed in <emu-xref href="#table-module-record-fields" id="_ref_480"><a href="ecmascript-language-scripts-and-modules.html#table-module-record-fields">Table 38</a></emu-xref>. All Module Definition subclasses include at least those fields. Module Record also defines the abstract method list in <emu-xref href="#table-abstract-methods-of-module-records" id="_ref_481"><a href="ecmascript-language-scripts-and-modules.html#table-abstract-methods-of-module-records">Table 39</a></emu-xref>. All Module definition subclasses must provide concrete implementations of these abstract methods.</p>
|
|
<emu-table id="table-module-record-fields" caption="Module Record Fields" oldids="table-36"><figure><figcaption>Table 38: <emu-xref href="#sec-abstract-module-records" id="_ref_8569"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref> Fields</figcaption><span id="table-36"></span>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>
|
|
Field Name
|
|
</th>
|
|
<th>
|
|
Value Type
|
|
</th>
|
|
<th>
|
|
Meaning
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<td>
|
|
<var class="field">[[Realm]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#realm-record" id="_ref_8570"><a href="executable-code-and-execution-contexts.html#realm-record">Realm Record</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
The <emu-xref href="#realm" id="_ref_8571"><a href="executable-code-and-execution-contexts.html#realm">Realm</a></emu-xref> within which this module was created.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[Environment]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-module-environment-records" id="_ref_8572"><a href="executable-code-and-execution-contexts.html#sec-module-environment-records">Module Environment Record</a></emu-xref> or <emu-const>empty</emu-const>
|
|
</td>
|
|
<td>
|
|
The <emu-xref href="#sec-environment-records" id="_ref_8573"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref> containing the top level bindings for this module. This field is set when the module is linked.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[Namespace]]</var>
|
|
</td>
|
|
<td>
|
|
an Object or <emu-const>empty</emu-const>
|
|
</td>
|
|
<td>
|
|
The Module Namespace Object (<emu-xref href="#sec-module-namespace-objects" id="_ref_482"><a href="reflection.html#sec-module-namespace-objects">28.3</a></emu-xref>) if one has been created for this module.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[HostDefined]]</var>
|
|
</td>
|
|
<td>
|
|
anything (default value is <emu-val>undefined</emu-val>)
|
|
</td>
|
|
<td>
|
|
Field reserved for use by <emu-xref href="#host-environment" id="_ref_8574"><a href="overview.html#host-environment">host environments</a></emu-xref> that need to associate additional information with a module.
|
|
</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
<emu-table id="table-abstract-methods-of-module-records" type="abstract methods" of="Module Records" oldids="table-37" caption="Abstract Methods of Module Records"><figure><figcaption>Table 39: Abstract Methods of <emu-xref href="#sec-abstract-module-records" id="_ref_8575"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Records</a></emu-xref></figcaption><span id="table-37"></span>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>
|
|
Method
|
|
</th>
|
|
<th>
|
|
Purpose
|
|
</th>
|
|
<th>
|
|
Definitions
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr id="abstract-loadrequestedmodules">
|
|
<td>LoadRequestedModules ( [ <var>hostDefined</var> ] )</td>
|
|
<td><p>The abstract method LoadRequestedModules takes optional argument <var>hostDefined</var> (anything) and returns a Promise.</p>
|
|
<p>It prepares the module for linking by recursively loading all its dependencies.</p>
|
|
</td>
|
|
<td>
|
|
Within this specification it has definitions in the following types; <emu-xref href="#host" id="_ref_8576"><a href="overview.html#host">hosts</a></emu-xref> may provide additional types with their own definitions:
|
|
<emu-concrete-method-dfns for="LoadRequestedModules"><ul><li><emu-xref href="#sec-LoadRequestedModules" id="_ref_17602"><a href="ecmascript-language-scripts-and-modules.html#sec-LoadRequestedModules">16.2.1.6.1.1 Cyclic Module Record</a></emu-xref></li><li><emu-xref href="#sec-smr-LoadRequestedModules" id="_ref_17603"><a href="ecmascript-language-scripts-and-modules.html#sec-smr-LoadRequestedModules">16.2.1.8.4.1 Synthetic Module Record</a></emu-xref></li></ul></emu-concrete-method-dfns>
|
|
</td>
|
|
</tr>
|
|
<tr id="abstract-getexportednames">
|
|
<td>GetExportedNames ( [ <var>exportStarSet</var> ] )</td>
|
|
<td><p>The abstract method GetExportedNames takes optional argument <var>exportStarSet</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8577"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sourctextmodule-record" id="_ref_8578"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Records</a></emu-xref>) and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8579"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Strings.</p>
|
|
<p>It returns a list of all names that are either directly or indirectly exported from this module.</p>
|
|
<p><emu-xref aoid="LoadRequestedModules" id="_ref_8580"><a href="ecmascript-language-scripts-and-modules.html#abstract-loadrequestedmodules">LoadRequestedModules</a></emu-xref> must have completed successfully prior to invoking this method.</p>
|
|
</td>
|
|
<td>
|
|
Within this specification it has definitions in the following types; <emu-xref href="#host" id="_ref_8581"><a href="overview.html#host">hosts</a></emu-xref> may provide additional types with their own definitions:
|
|
<emu-concrete-method-dfns for="GetExportedNames"><ul><li><emu-xref href="#sec-getexportednames" id="_ref_17604"><a href="ecmascript-language-scripts-and-modules.html#sec-getexportednames">16.2.1.7.2.1 Source Text Module Record</a></emu-xref></li><li><emu-xref href="#sec-smr-getexportednames" id="_ref_17605"><a href="ecmascript-language-scripts-and-modules.html#sec-smr-getexportednames">16.2.1.8.4.2 Synthetic Module Record</a></emu-xref></li></ul></emu-concrete-method-dfns>
|
|
</td>
|
|
</tr>
|
|
<tr id="abstract-resolveexport">
|
|
<td>ResolveExport ( <var>exportName</var> [ , <var>resolveSet</var> ] )</td>
|
|
<td><p>The abstract method ResolveExport takes argument <var>exportName</var> (a String) and optional argument <var>resolveSet</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8582"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8583"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Records</a></emu-xref> with fields <var class="field">[[Module]]</var> (a <emu-xref href="#sec-abstract-module-records" id="_ref_8584"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>) and <var class="field">[[ExportName]]</var> (a String)) and returns a <emu-xref href="#resolvedbinding-record" id="_ref_8585"><a href="ecmascript-language-scripts-and-modules.html#resolvedbinding-record">ResolvedBinding Record</a></emu-xref>, <emu-val>null</emu-val>, or <emu-const>ambiguous</emu-const>.</p>
|
|
<p>It returns the binding of a name exported by this module. Bindings are represented by a <dfn id="resolvedbinding-record" variants="ResolvedBinding Records" tabindex="-1">ResolvedBinding Record</dfn>, of the form { <var class="field">[[Module]]</var>: <emu-xref href="#sec-abstract-module-records" id="_ref_8586"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>, <var class="field">[[BindingName]]</var>: String | <emu-const>namespace</emu-const> }. If the export is a Module Namespace Object without a direct binding in any module, <var class="field">[[BindingName]]</var> will be set to <emu-const>namespace</emu-const>. It returns <emu-val>null</emu-val> if the name cannot be resolved, or <emu-const>ambiguous</emu-const> if multiple bindings were found.</p>
|
|
<p>Each time this operation is called with a specific <var>exportName</var>, <var>resolveSet</var> pair as arguments it must return the same result.</p>
|
|
<p><emu-xref aoid="LoadRequestedModules" id="_ref_8587"><a href="ecmascript-language-scripts-and-modules.html#abstract-loadrequestedmodules">LoadRequestedModules</a></emu-xref> must have completed successfully prior to invoking this method.</p>
|
|
</td>
|
|
<td>
|
|
Within this specification it has definitions in the following types; <emu-xref href="#host" id="_ref_8588"><a href="overview.html#host">hosts</a></emu-xref> may provide additional types with their own definitions:
|
|
<emu-concrete-method-dfns for="ResolveExport"><ul><li><emu-xref href="#sec-resolveexport" id="_ref_17606"><a href="ecmascript-language-scripts-and-modules.html#sec-resolveexport">16.2.1.7.2.2 Source Text Module Record</a></emu-xref></li><li><emu-xref href="#sec-smr-resolveexport" id="_ref_17607"><a href="ecmascript-language-scripts-and-modules.html#sec-smr-resolveexport">16.2.1.8.4.3 Synthetic Module Record</a></emu-xref></li></ul></emu-concrete-method-dfns>
|
|
</td>
|
|
</tr>
|
|
<tr id="abstract-link">
|
|
<td>Link ( )</td>
|
|
<td><p>The abstract method Link takes no arguments and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8589"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-const>unused</emu-const> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8590"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>.</p>
|
|
<p>It prepares the module for evaluation by transitively resolving all module dependencies and creating a <emu-xref href="#sec-module-environment-records" id="_ref_8591"><a href="executable-code-and-execution-contexts.html#sec-module-environment-records">Module Environment Record</a></emu-xref>.</p>
|
|
<p><emu-xref aoid="LoadRequestedModules" id="_ref_8592"><a href="ecmascript-language-scripts-and-modules.html#abstract-loadrequestedmodules">LoadRequestedModules</a></emu-xref> must have completed successfully prior to invoking this method.</p>
|
|
</td>
|
|
<td>
|
|
Within this specification it has definitions in the following types; <emu-xref href="#host" id="_ref_8593"><a href="overview.html#host">hosts</a></emu-xref> may provide additional types with their own definitions:
|
|
<emu-concrete-method-dfns for="Link"><ul><li><emu-xref href="#sec-moduledeclarationlinking" id="_ref_17608"><a href="ecmascript-language-scripts-and-modules.html#sec-moduledeclarationlinking">16.2.1.6.1.2 Cyclic Module Record</a></emu-xref></li><li><emu-xref href="#sec-smr-Link" id="_ref_17609"><a href="ecmascript-language-scripts-and-modules.html#sec-smr-Link">16.2.1.8.4.4 Synthetic Module Record</a></emu-xref></li></ul></emu-concrete-method-dfns>
|
|
</td>
|
|
</tr>
|
|
<tr id="abstract-evaluate">
|
|
<td>Evaluate ( )</td>
|
|
<td><p>The abstract method Evaluate takes no arguments and returns a Promise.</p>
|
|
<p>It returns a promise for the evaluation of this module and its dependencies, resolving on successful evaluation or if it has already been evaluated successfully, and rejecting for an evaluation error or if it has already been evaluated unsuccessfully. If the promise is rejected, <emu-xref href="#host" id="_ref_8594"><a href="overview.html#host">hosts</a></emu-xref> are expected to handle the promise rejection and rethrow the evaluation error. Unless this module is a <emu-xref href="#cyclic-module-record" id="_ref_8595"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>, the returned promise must be already settled.</p>
|
|
<p><emu-xref aoid="Link" id="_ref_8596"><a href="ecmascript-language-scripts-and-modules.html#abstract-link">Link</a></emu-xref> must have completed successfully prior to invoking this method.</p>
|
|
</td>
|
|
<td>
|
|
Within this specification it has definitions in the following types; <emu-xref href="#host" id="_ref_8597"><a href="overview.html#host">hosts</a></emu-xref> may provide additional types with their own definitions:
|
|
<emu-concrete-method-dfns for="Evaluate"><ul><li><emu-xref href="#sec-moduleevaluation" id="_ref_17610"><a href="ecmascript-language-scripts-and-modules.html#sec-moduleevaluation">16.2.1.6.1.3 Cyclic Module Record</a></emu-xref></li><li><emu-xref href="#sec-smr-Evaluate" id="_ref_17611"><a href="ecmascript-language-scripts-and-modules.html#sec-smr-Evaluate">16.2.1.8.4.5 Synthetic Module Record</a></emu-xref></li></ul></emu-concrete-method-dfns>
|
|
</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
|
|
<emu-clause id="sec-EvaluateModuleSync" type="abstract operation" aoid="EvaluateModuleSync">
|
|
<h1><span class="secnum">16.2.1.5.1</span> EvaluateModuleSync ( <var>module</var> )</h1>
|
|
<p>The abstract operation EvaluateModuleSync takes argument <var>module</var> (a <emu-xref href="#sec-abstract-module-records" id="_ref_8598"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8599"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-const>unused</emu-const> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8600"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It synchronously evaluates <var>module</var>, provided that the caller guarantees that <var>module</var>'s evaluation will return an already settled promise. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_8601"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var> is not a <emu-xref href="#cyclic-module-record" id="_ref_8602"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>.</li><li>Let <var>promise</var> be <var>module</var>.<emu-xref aoid="Evaluate" id="_ref_8603"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref>().</li><li><emu-xref href="#assert" id="_ref_8604"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>promise</var>.<var class="field">[[PromiseState]]</var> is either <emu-const>fulfilled</emu-const> or <emu-const>rejected</emu-const>.</li><li>If <var>promise</var>.<var class="field">[[PromiseState]]</var> is <emu-const>rejected</emu-const>, then<ol><li>If <var>promise</var>.<var class="field">[[PromiseIsHandled]]</var> is <emu-val>false</emu-val>, perform <emu-xref aoid="HostPromiseRejectionTracker" id="_ref_8605"><a href="control-abstraction-objects.html#sec-host-promise-rejection-tracker">HostPromiseRejectionTracker</a></emu-xref>(<var>promise</var>, <emu-val>"handle"</emu-val>).</li><li>Set <var>promise</var>.<var class="field">[[PromiseIsHandled]]</var> to <emu-val>true</emu-val>.</li><li>Return <emu-xref aoid="ThrowCompletion" id="_ref_8606"><a href="ecmascript-data-types-and-values.html#sec-throwcompletion">ThrowCompletion</a></emu-xref>(<var>promise</var>.<var class="field">[[PromiseResult]]</var>).</li></ol></li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-cyclic-module-records">
|
|
<h1><span class="secnum">16.2.1.6</span> Cyclic Module Records</h1>
|
|
<p>A <dfn id="cyclic-module-record" variants="Cyclic Module Records" tabindex="-1">Cyclic Module Record</dfn> is used to represent information about a module that can participate in dependency cycles with other modules that are subclasses of the <emu-xref href="#cyclic-module-record" id="_ref_8607"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> type. <emu-xref href="#sec-abstract-module-records" id="_ref_8608"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Records</a></emu-xref> that are not subclasses of the <emu-xref href="#cyclic-module-record" id="_ref_8609"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> type must not participate in dependency cycles with <emu-xref href="#sourctextmodule-record" id="_ref_8610"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Records</a></emu-xref>.</p>
|
|
<p>In addition to the fields defined in <emu-xref href="#table-module-record-fields" id="_ref_483"><a href="ecmascript-language-scripts-and-modules.html#table-module-record-fields">Table 38</a></emu-xref> <emu-xref href="#cyclic-module-record" id="_ref_8611"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Records</a></emu-xref> have the additional fields listed in <emu-xref href="#table-cyclic-module-fields" id="_ref_484"><a href="ecmascript-language-scripts-and-modules.html#table-cyclic-module-fields">Table 40</a></emu-xref></p>
|
|
<emu-table id="table-cyclic-module-fields" caption="Additional Fields of Cyclic Module Records"><figure><figcaption>Table 40: Additional Fields of <emu-xref href="#cyclic-module-record" id="_ref_8612"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Records</a></emu-xref></figcaption>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>
|
|
Field Name
|
|
</th>
|
|
<th>
|
|
Value Type
|
|
</th>
|
|
<th>
|
|
Meaning
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<td>
|
|
<var class="field">[[Status]]</var>
|
|
</td>
|
|
<td>
|
|
<emu-const>new</emu-const>, <emu-const>unlinked</emu-const>, <emu-const>linking</emu-const>, <emu-const>linked</emu-const>, <emu-const>evaluating</emu-const>, <emu-const>evaluating-async</emu-const>, or <emu-const>evaluated</emu-const>
|
|
</td>
|
|
<td>
|
|
Initially <emu-const>new</emu-const>. Transitions to <emu-const>unlinked</emu-const>, <emu-const>linking</emu-const>, <emu-const>linked</emu-const>, <emu-const>evaluating</emu-const>, possibly <emu-const>evaluating-async</emu-const>, <emu-const>evaluated</emu-const> (in that order) as the module progresses throughout its lifecycle. <emu-const>evaluating-async</emu-const> indicates this module is queued to execute on completion of its asynchronous dependencies or it is a module whose <var class="field">[[HasTLA]]</var> field is <emu-val>true</emu-val> that has been executed and is pending top-level completion.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[EvaluationError]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8613"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref> or <emu-const>empty</emu-const>
|
|
</td>
|
|
<td>
|
|
A <emu-xref href="#sec-completion-record-specification-type" id="_ref_8614"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref> representing the exception that occurred during evaluation. <emu-val>undefined</emu-val> if no exception occurred or if <var class="field">[[Status]]</var> is not <emu-const>evaluated</emu-const>.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[DFSAncestorIndex]]</var>
|
|
</td>
|
|
<td>
|
|
an <emu-xref href="#integer" id="_ref_8615"><a href="notational-conventions.html#integer">integer</a></emu-xref> or <emu-const>empty</emu-const>
|
|
</td>
|
|
<td>
|
|
Auxiliary field used during <emu-xref aoid="Link" id="_ref_8616"><a href="ecmascript-language-scripts-and-modules.html#abstract-link">Link</a></emu-xref> and <emu-xref aoid="Evaluate" id="_ref_8617"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref> only. If <var class="field">[[Status]]</var> is either <emu-const>linking</emu-const> or <emu-const>evaluating</emu-const>, this is either the module's depth-first traversal index or that of an "earlier" module in the same strongly connected component.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[RequestedModules]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8618"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#modulerequest-record" id="_ref_8619"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Records</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
A <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8620"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of the <emu-xref href="#modulerequest-record" id="_ref_8621"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Records</a></emu-xref> associated with the imports in this module. The <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8622"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> is in source text occurrence order of the imports.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[LoadedModules]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8623"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#loadedmodulerequest-record" id="_ref_8624"><a href="ecmascript-language-scripts-and-modules.html#loadedmodulerequest-record">LoadedModuleRequest Records</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
A map from the specifier strings used by the module represented by this record to request the importation of a module with the relative import attributes to the resolved <emu-xref href="#sec-abstract-module-records" id="_ref_8625"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>. The list does not contain two different <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8626"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Records</a></emu-xref> <var>r1</var> and <var>r2</var> such that <emu-xref aoid="ModuleRequestsEqual" id="_ref_8627"><a href="ecmascript-language-scripts-and-modules.html#sec-ModuleRequestsEqual">ModuleRequestsEqual</a></emu-xref>(<var>r1</var>, <var>r2</var>) is <emu-val>true</emu-val>.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[CycleRoot]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#cyclic-module-record" id="_ref_8628"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> or <emu-const>empty</emu-const>
|
|
</td>
|
|
<td>
|
|
The first visited module of the cycle, the root DFS ancestor of the strongly connected component. For a module not in a cycle, this would be the module itself. Once <emu-xref aoid="Evaluate" id="_ref_8629"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref> has completed, a module's <var class="field">[[DFSAncestorIndex]]</var> is the depth-first traversal index of its <var class="field">[[CycleRoot]]</var>.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[HasTLA]]</var>
|
|
</td>
|
|
<td>
|
|
a Boolean
|
|
</td>
|
|
<td>
|
|
Whether this module is individually asynchronous (for example, if it's a <emu-xref href="#sourctextmodule-record" id="_ref_8630"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Record</a></emu-xref> containing a top-level await). Having an asynchronous dependency does not mean this field is <emu-val>true</emu-val>. This field must not change after the module is parsed.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[AsyncEvaluationOrder]]</var>
|
|
</td>
|
|
<td>
|
|
<emu-const>unset</emu-const>, an <emu-xref href="#integer" id="_ref_8631"><a href="notational-conventions.html#integer">integer</a></emu-xref>, or <emu-const>done</emu-const>
|
|
</td>
|
|
<td>
|
|
This field is initially set to <emu-const>unset</emu-const>, and remains <emu-const>unset</emu-const> for fully synchronous modules. For modules that are either themselves asynchronous or have an asynchronous dependency, it is set to an <emu-xref href="#integer" id="_ref_8632"><a href="notational-conventions.html#integer">integer</a></emu-xref> that determines the order in which execution of pending modules is queued by <emu-xref href="#sec-async-module-execution-fulfilled" id="_ref_485"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-fulfilled">16.2.1.6.1.3.4</a></emu-xref>. Once the pending module is executed, the field is set to <emu-const>done</emu-const>.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[TopLevelCapability]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-promisecapability-records" id="_ref_8633"><a href="control-abstraction-objects.html#sec-promisecapability-records">PromiseCapability Record</a></emu-xref> or <emu-const>empty</emu-const>
|
|
</td>
|
|
<td>
|
|
If this module is the <var class="field">[[CycleRoot]]</var> of some cycle, and <emu-xref aoid="Evaluate" id="_ref_8634"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref>() was called on some module in that cycle, this field contains the <emu-xref href="#sec-promisecapability-records" id="_ref_8635"><a href="control-abstraction-objects.html#sec-promisecapability-records">PromiseCapability Record</a></emu-xref> for that entire evaluation. It is used to settle the Promise object that is returned from the <emu-xref aoid="Evaluate" id="_ref_8636"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref>() abstract method. This field will be <emu-const>empty</emu-const> for any dependencies of that module, unless a top-level <emu-xref aoid="Evaluate" id="_ref_8637"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref>() has been initiated for some of those dependencies.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[AsyncParentModules]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8638"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#cyclic-module-record" id="_ref_8639"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Records</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
If this module or a dependency has <var class="field">[[HasTLA]]</var> <emu-val>true</emu-val>, and execution is in progress, this tracks the parent importers of this module for the top-level execution job. These parent modules will not start executing before this module has successfully completed execution.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[PendingAsyncDependencies]]</var>
|
|
</td>
|
|
<td>
|
|
an <emu-xref href="#integer" id="_ref_8640"><a href="notational-conventions.html#integer">integer</a></emu-xref> or <emu-const>empty</emu-const>
|
|
</td>
|
|
<td>
|
|
If this module has any asynchronous dependencies, this tracks the number of asynchronous dependency modules remaining to execute for this module. A module with asynchronous dependencies will be executed when this field reaches 0 and there are no execution errors.
|
|
</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
<p>In addition to the methods defined in <emu-xref href="#table-abstract-methods-of-module-records" id="_ref_486"><a href="ecmascript-language-scripts-and-modules.html#table-abstract-methods-of-module-records">Table 39</a></emu-xref> <emu-xref href="#cyclic-module-record" id="_ref_8641"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Records</a></emu-xref> have the additional methods listed in <emu-xref href="#table-cyclic-module-methods" id="_ref_487"><a href="ecmascript-language-scripts-and-modules.html#table-cyclic-module-methods">Table 41</a></emu-xref>:</p>
|
|
<emu-table id="table-cyclic-module-methods" type="abstract methods" of="Cyclic Module Records" caption="Additional Abstract Methods of Cyclic Module Records"><figure><figcaption>Table 41: Additional Abstract Methods of <emu-xref href="#cyclic-module-record" id="_ref_8642"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Records</a></emu-xref></figcaption>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>
|
|
Method
|
|
</th>
|
|
<th>
|
|
Purpose
|
|
</th>
|
|
<th>
|
|
Definitions
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr id="abstract-initializeenvironment">
|
|
<td>InitializeEnvironment ( )</td>
|
|
<td><p>The abstract method InitializeEnvironment takes no arguments and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8643"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-const>unused</emu-const> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8644"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>.</p>
|
|
It initializes the <emu-xref href="#sec-environment-records" id="_ref_8645"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref> of the module, including resolving all imported bindings, and creates the module's <emu-xref href="#sec-execution-contexts" id="_ref_8646"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution context</a></emu-xref>.
|
|
</td>
|
|
<td>
|
|
Within this specification it has definitions in the following types; <emu-xref href="#host" id="_ref_8647"><a href="overview.html#host">hosts</a></emu-xref> may provide additional types with their own definitions:
|
|
<emu-concrete-method-dfns for="InitializeEnvironment"><ul><li><emu-xref href="#sec-source-text-module-record-initialize-environment" id="_ref_17612"><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-record-initialize-environment">16.2.1.7.3.1 Source Text Module Record</a></emu-xref></li></ul></emu-concrete-method-dfns>
|
|
</td>
|
|
</tr>
|
|
<tr id="abstract-executemodule">
|
|
<td>ExecuteModule ( [ <var>capability</var> ] )</td>
|
|
<td><p>The abstract method ExecuteModule takes optional argument <var>capability</var> (a <emu-xref href="#sec-promisecapability-records" id="_ref_8648"><a href="control-abstraction-objects.html#sec-promisecapability-records">PromiseCapability Record</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8649"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-const>unused</emu-const> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8650"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>.</p>
|
|
It evaluates the module's code within its <emu-xref href="#sec-execution-contexts" id="_ref_8651"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution context</a></emu-xref>. If this module has <emu-val>true</emu-val> in <var class="field">[[HasTLA]]</var>, then a <emu-xref href="#sec-promisecapability-records" id="_ref_8652"><a href="control-abstraction-objects.html#sec-promisecapability-records">PromiseCapability Record</a></emu-xref> is passed as an argument, and the method is expected to resolve or reject the given capability. In this case, the method must not throw an exception, but instead reject the <emu-xref href="#sec-promisecapability-records" id="_ref_8653"><a href="control-abstraction-objects.html#sec-promisecapability-records">PromiseCapability Record</a></emu-xref> if necessary.
|
|
</td>
|
|
<td>
|
|
Within this specification it has definitions in the following types; <emu-xref href="#host" id="_ref_8654"><a href="overview.html#host">hosts</a></emu-xref> may provide additional types with their own definitions:
|
|
<emu-concrete-method-dfns for="ExecuteModule"><ul><li><emu-xref href="#sec-source-text-module-record-execute-module" id="_ref_17613"><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-record-execute-module">16.2.1.7.3.2 Source Text Module Record</a></emu-xref></li></ul></emu-concrete-method-dfns>
|
|
</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
|
|
<p>A <dfn id="graphloadingstate-record" variants="GraphLoadingState Records" tabindex="-1">GraphLoadingState Record</dfn> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8655"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> that contains information about the loading process of a module graph. It's used to continue loading after a call to <emu-xref aoid="HostLoadImportedModule" id="_ref_8656"><a href="ecmascript-language-scripts-and-modules.html#sec-HostLoadImportedModule">HostLoadImportedModule</a></emu-xref>. Each <emu-xref href="#graphloadingstate-record" id="_ref_8657"><a href="ecmascript-language-scripts-and-modules.html#graphloadingstate-record">GraphLoadingState Record</a></emu-xref> has the fields defined in <emu-xref href="#table-graphloadingstate-record-fields" id="_ref_488"><a href="ecmascript-language-scripts-and-modules.html#table-graphloadingstate-record-fields">Table 42</a></emu-xref>:</p>
|
|
<emu-table id="table-graphloadingstate-record-fields" caption="GraphLoadingState Record Fields"><figure><figcaption>Table 42: <emu-xref href="#graphloadingstate-record" id="_ref_8658"><a href="ecmascript-language-scripts-and-modules.html#graphloadingstate-record">GraphLoadingState Record</a></emu-xref> Fields</figcaption>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>
|
|
Field Name
|
|
</th>
|
|
<th>
|
|
Value Type
|
|
</th>
|
|
<th>
|
|
Meaning
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<td>
|
|
<var class="field">[[PromiseCapability]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-promisecapability-records" id="_ref_8659"><a href="control-abstraction-objects.html#sec-promisecapability-records">PromiseCapability Record</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
The promise to resolve when the loading process finishes.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[IsLoading]]</var>
|
|
</td>
|
|
<td>
|
|
a Boolean
|
|
</td>
|
|
<td>
|
|
It is true if the loading process has not finished yet, neither successfully nor with an error.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[PendingModulesCount]]</var>
|
|
</td>
|
|
<td>
|
|
a non-negative <emu-xref href="#integer" id="_ref_8660"><a href="notational-conventions.html#integer">integer</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
It tracks the number of pending <emu-xref aoid="HostLoadImportedModule" id="_ref_8661"><a href="ecmascript-language-scripts-and-modules.html#sec-HostLoadImportedModule">HostLoadImportedModule</a></emu-xref> calls.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[Visited]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8662"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#cyclic-module-record" id="_ref_8663"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Records</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
It is a list of the <emu-xref href="#cyclic-module-record" id="_ref_8664"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Records</a></emu-xref> that have been already loaded by the current loading process, to avoid infinite loops with circular dependencies.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[HostDefined]]</var>
|
|
</td>
|
|
<td>
|
|
anything (default value is <emu-const>empty</emu-const>)
|
|
</td>
|
|
<td>
|
|
It contains <emu-xref href="#host-defined" id="_ref_8665"><a href="overview.html#host-defined">host-defined</a></emu-xref> data to pass from the <emu-xref aoid="LoadRequestedModules" id="_ref_8666"><a href="ecmascript-language-scripts-and-modules.html#abstract-loadrequestedmodules">LoadRequestedModules</a></emu-xref> caller to <emu-xref aoid="HostLoadImportedModule" id="_ref_8667"><a href="ecmascript-language-scripts-and-modules.html#sec-HostLoadImportedModule">HostLoadImportedModule</a></emu-xref>.
|
|
</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
|
|
<emu-clause id="sec-cyclic-module-record-module-record-methods">
|
|
<h1><span class="secnum">16.2.1.6.1</span> Implementation of Module Record Abstract Methods</h1>
|
|
|
|
<p>The following are the concrete methods for <emu-xref href="#cyclic-module-record" id="_ref_8668"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> that implement the corresponding <emu-xref href="#sec-abstract-module-records" id="_ref_8669"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref> abstract methods defined in <emu-xref href="#table-abstract-methods-of-module-records" id="_ref_489"><a href="ecmascript-language-scripts-and-modules.html#table-abstract-methods-of-module-records">Table 39</a></emu-xref>.</p>
|
|
|
|
<emu-clause id="sec-LoadRequestedModules" type="concrete method">
|
|
<h1><span class="secnum">16.2.1.6.1.1</span> LoadRequestedModules ( [ <var>hostDefined</var> ] )</h1>
|
|
<p>The <emu-xref aoid="LoadRequestedModules" id="_ref_8670"><a href="ecmascript-language-scripts-and-modules.html#abstract-loadrequestedmodules">LoadRequestedModules</a></emu-xref> concrete method of a <emu-xref href="#cyclic-module-record" id="_ref_8671"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> <var>module</var> takes optional argument <var>hostDefined</var> (anything) and returns a Promise. It populates the <var class="field">[[LoadedModules]]</var> of all the <emu-xref href="#sec-abstract-module-records" id="_ref_8672"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Records</a></emu-xref> in the dependency graph of <var>module</var> (most of the work is done by the auxiliary function <emu-xref aoid="InnerModuleLoading" id="_ref_8673"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLoading">InnerModuleLoading</a></emu-xref>). It takes an optional <var>hostDefined</var> parameter that is passed to the <emu-xref aoid="HostLoadImportedModule" id="_ref_8674"><a href="ecmascript-language-scripts-and-modules.html#sec-HostLoadImportedModule">HostLoadImportedModule</a></emu-xref> hook. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li>If <var>hostDefined</var> is not present, set <var>hostDefined</var> to <emu-const>empty</emu-const>.</li><li>Let <var>pc</var> be ! <emu-xref aoid="NewPromiseCapability" id="_ref_8675"><a href="control-abstraction-objects.html#sec-newpromisecapability">NewPromiseCapability</a></emu-xref>(<emu-xref href="#sec-promise-constructor" id="_ref_8676"><a href="control-abstraction-objects.html#sec-promise-constructor">%Promise%</a></emu-xref>).</li><li>Let <var>state</var> be the <emu-xref href="#graphloadingstate-record" id="_ref_8677"><a href="ecmascript-language-scripts-and-modules.html#graphloadingstate-record">GraphLoadingState Record</a></emu-xref> { <var class="field">[[IsLoading]]</var>: <emu-val>true</emu-val>, <var class="field">[[PendingModulesCount]]</var>: 1, <var class="field">[[Visited]]</var>: « », <var class="field">[[PromiseCapability]]</var>: <var>pc</var>, <var class="field">[[HostDefined]]</var>: <var>hostDefined</var> }.</li><li>Perform <emu-xref aoid="InnerModuleLoading" id="_ref_8678"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLoading">InnerModuleLoading</a></emu-xref>(<var>state</var>, <var>module</var>).</li><li>Return <var>pc</var>.<var class="field">[[Promise]]</var>.</li></ol></emu-alg>
|
|
|
|
<emu-note><span class="note">Note</span><div class="note-contents">
|
|
The <var>hostDefined</var> parameter can be used to pass additional information necessary to fetch the imported modules. It is used, for example, by HTML to set the correct fetch destination for <code><link rel="preload" as="..."></code> tags.
|
|
<code>import()</code> expressions never set the <var>hostDefined</var> parameter.
|
|
</div></emu-note>
|
|
|
|
<emu-clause id="sec-InnerModuleLoading" type="abstract operation" aoid="InnerModuleLoading">
|
|
<h1><span class="secnum">16.2.1.6.1.1.1</span> InnerModuleLoading ( <var>state</var>, <var>module</var> )</h1>
|
|
<p>The abstract operation InnerModuleLoading takes arguments <var>state</var> (a <emu-xref href="#graphloadingstate-record" id="_ref_8679"><a href="ecmascript-language-scripts-and-modules.html#graphloadingstate-record">GraphLoadingState Record</a></emu-xref>) and <var>module</var> (a <emu-xref href="#sec-abstract-module-records" id="_ref_8680"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>) and returns <emu-const>unused</emu-const>. It is used by <emu-xref aoid="LoadRequestedModules" id="_ref_8681"><a href="ecmascript-language-scripts-and-modules.html#abstract-loadrequestedmodules">LoadRequestedModules</a></emu-xref> to recursively perform the actual loading process for <var>module</var>'s dependency graph. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_8682"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>state</var>.<var class="field">[[IsLoading]]</var> is <emu-val>true</emu-val>.</li><li>If <var>module</var> is a <emu-xref href="#cyclic-module-record" id="_ref_8683"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>, <var>module</var>.<var class="field">[[Status]]</var> is <emu-const>new</emu-const>, and <var>state</var>.<var class="field">[[Visited]]</var> does not contain <var>module</var>, then<ol><li>Append <var>module</var> to <var>state</var>.<var class="field">[[Visited]]</var>.</li><li>Let <var>requestedModulesCount</var> be the number of elements in <var>module</var>.<var class="field">[[RequestedModules]]</var>.</li><li>Set <var>state</var>.<var class="field">[[PendingModulesCount]]</var> to <var>state</var>.<var class="field">[[PendingModulesCount]]</var> + <var>requestedModulesCount</var>.</li><li>For each <emu-xref href="#modulerequest-record" id="_ref_8684"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> <var>request</var> of <var>module</var>.<var class="field">[[RequestedModules]]</var>, do<ol><li>If <emu-xref aoid="AllImportAttributesSupported" id="_ref_8685"><a href="ecmascript-language-scripts-and-modules.html#sec-AllImportAttributesSupported">AllImportAttributesSupported</a></emu-xref>(<var>request</var>.<var class="field">[[Attributes]]</var>) is <emu-val>false</emu-val>, then<ol><li>Let <var>error</var> be <emu-xref aoid="ThrowCompletion" id="_ref_8686"><a href="ecmascript-data-types-and-values.html#sec-throwcompletion">ThrowCompletion</a></emu-xref>(a newly created <emu-val>SyntaxError</emu-val> object).</li><li>Perform <emu-xref aoid="ContinueModuleLoading" id="_ref_8687"><a href="ecmascript-language-scripts-and-modules.html#sec-ContinueModuleLoading">ContinueModuleLoading</a></emu-xref>(<var>state</var>, <var>error</var>).</li></ol></li><li>Else if <var>module</var>.<var class="field">[[LoadedModules]]</var> contains a <emu-xref href="#loadedmodulerequest-record" id="_ref_8688"><a href="ecmascript-language-scripts-and-modules.html#loadedmodulerequest-record">LoadedModuleRequest Record</a></emu-xref> <var>record</var> such that <emu-xref aoid="ModuleRequestsEqual" id="_ref_8689"><a href="ecmascript-language-scripts-and-modules.html#sec-ModuleRequestsEqual">ModuleRequestsEqual</a></emu-xref>(<var>record</var>, <var>request</var>) is <emu-val>true</emu-val>, then<ol><li>Perform <emu-xref aoid="InnerModuleLoading" id="_ref_8690"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLoading">InnerModuleLoading</a></emu-xref>(<var>state</var>, <var>record</var>.<var class="field">[[Module]]</var>).</li></ol></li><li>Else,<ol><li>Perform <emu-xref aoid="HostLoadImportedModule" id="_ref_8691"><a href="ecmascript-language-scripts-and-modules.html#sec-HostLoadImportedModule">HostLoadImportedModule</a></emu-xref>(<var>module</var>, <var>request</var>, <var>state</var>.<var class="field">[[HostDefined]]</var>, <var>state</var>).</li><li>NOTE: <emu-xref aoid="HostLoadImportedModule" id="_ref_8692"><a href="ecmascript-language-scripts-and-modules.html#sec-HostLoadImportedModule">HostLoadImportedModule</a></emu-xref> will call <emu-xref aoid="FinishLoadingImportedModule" id="_ref_8693"><a href="ecmascript-language-scripts-and-modules.html#sec-FinishLoadingImportedModule">FinishLoadingImportedModule</a></emu-xref>, which re-enters the graph loading process through <emu-xref aoid="ContinueModuleLoading" id="_ref_8694"><a href="ecmascript-language-scripts-and-modules.html#sec-ContinueModuleLoading">ContinueModuleLoading</a></emu-xref>.</li></ol></li><li>If <var>state</var>.<var class="field">[[IsLoading]]</var> is <emu-val>false</emu-val>, return <emu-const>unused</emu-const>.</li></ol></li></ol></li><li><emu-xref href="#assert" id="_ref_8695"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>state</var>.<var class="field">[[PendingModulesCount]]</var> ≥ 1.</li><li>Set <var>state</var>.<var class="field">[[PendingModulesCount]]</var> to <var>state</var>.<var class="field">[[PendingModulesCount]]</var> - 1.</li><li>If <var>state</var>.<var class="field">[[PendingModulesCount]]</var> = 0, then<ol><li>Set <var>state</var>.<var class="field">[[IsLoading]]</var> to <emu-val>false</emu-val>.</li><li>For each <emu-xref href="#cyclic-module-record" id="_ref_8696"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> <var>loaded</var> of <var>state</var>.<var class="field">[[Visited]]</var>, do<ol><li>If <var>loaded</var>.<var class="field">[[Status]]</var> is <emu-const>new</emu-const>, set <var>loaded</var>.<var class="field">[[Status]]</var> to <emu-const>unlinked</emu-const>.</li></ol></li><li>Perform ! <emu-xref aoid="Call" id="_ref_8697"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>state</var>.<var class="field">[[PromiseCapability]]</var>.<var class="field">[[Resolve]]</var>, <emu-val>undefined</emu-val>, « <emu-val>undefined</emu-val> »).</li></ol></li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-ContinueModuleLoading" type="abstract operation" aoid="ContinueModuleLoading">
|
|
<h1><span class="secnum">16.2.1.6.1.1.2</span> ContinueModuleLoading ( <var>state</var>, <var>moduleCompletion</var> )</h1>
|
|
<p>The abstract operation ContinueModuleLoading takes arguments <var>state</var> (a <emu-xref href="#graphloadingstate-record" id="_ref_8698"><a href="ecmascript-language-scripts-and-modules.html#graphloadingstate-record">GraphLoadingState Record</a></emu-xref>) and <var>moduleCompletion</var> (either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8699"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a <emu-xref href="#sec-abstract-module-records" id="_ref_8700"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8701"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>) and returns <emu-const>unused</emu-const>. It is used to re-enter the loading process after a call to <emu-xref aoid="HostLoadImportedModule" id="_ref_8702"><a href="ecmascript-language-scripts-and-modules.html#sec-HostLoadImportedModule">HostLoadImportedModule</a></emu-xref>. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li>If <var>state</var>.<var class="field">[[IsLoading]]</var> is <emu-val>false</emu-val>, return <emu-const>unused</emu-const>.</li><li>If <var>moduleCompletion</var> is a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8703"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion</a></emu-xref>, then<ol><li>Perform <emu-xref aoid="InnerModuleLoading" id="_ref_8704"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLoading">InnerModuleLoading</a></emu-xref>(<var>state</var>, <var>moduleCompletion</var>.<var class="field">[[Value]]</var>).</li></ol></li><li>Else,<ol><li>Set <var>state</var>.<var class="field">[[IsLoading]]</var> to <emu-val>false</emu-val>.</li><li>Perform ! <emu-xref aoid="Call" id="_ref_8705"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>state</var>.<var class="field">[[PromiseCapability]]</var>.<var class="field">[[Reject]]</var>, <emu-val>undefined</emu-val>, « <var>moduleCompletion</var>.<var class="field">[[Value]]</var> »).</li></ol></li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-moduledeclarationlinking" type="concrete method" oldids="sec-moduledeclarationinstantiation"><span id="sec-moduledeclarationinstantiation"></span>
|
|
<h1><span class="secnum">16.2.1.6.1.2</span> Link ( )</h1>
|
|
<p>The <emu-xref aoid="Link" id="_ref_8706"><a href="ecmascript-language-scripts-and-modules.html#abstract-link">Link</a></emu-xref> concrete method of a <emu-xref href="#cyclic-module-record" id="_ref_8707"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> <var>module</var> takes no arguments and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8708"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-const>unused</emu-const> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8709"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. On success, <emu-xref aoid="Link" id="_ref_8710"><a href="ecmascript-language-scripts-and-modules.html#abstract-link">Link</a></emu-xref> transitions this module's <var class="field">[[Status]]</var> from <emu-const>unlinked</emu-const> to <emu-const>linked</emu-const>. On failure, an exception is thrown and this module's <var class="field">[[Status]]</var> remains <emu-const>unlinked</emu-const>. (Most of the work is done by the auxiliary function <emu-xref aoid="InnerModuleLinking" id="_ref_8711"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLinking">InnerModuleLinking</a></emu-xref>.) It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_8712"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Status]]</var> is one of <emu-const>unlinked</emu-const>, <emu-const>linked</emu-const>, <emu-const>evaluating-async</emu-const>, or <emu-const>evaluated</emu-const>.</li><li>Let <var>stack</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8713"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>result</var> be <emu-xref aoid="Completion" id="_ref_8714"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="InnerModuleLinking" id="_ref_8715"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLinking">InnerModuleLinking</a></emu-xref>(<var>module</var>, <var>stack</var>, 0)).</li><li>If <var>result</var> is an <emu-xref href="#sec-completion-record-specification-type" id="_ref_8716"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>, then<ol><li>For each <emu-xref href="#cyclic-module-record" id="_ref_8717"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> <var>m</var> of <var>stack</var>, do<ol><li><emu-xref href="#assert" id="_ref_8718"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>m</var>.<var class="field">[[Status]]</var> is <emu-const>linking</emu-const>.</li><li>Set <var>m</var>.<var class="field">[[Status]]</var> to <emu-const>unlinked</emu-const>.</li></ol></li><li><emu-xref href="#assert" id="_ref_8719"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Status]]</var> is <emu-const>unlinked</emu-const>.</li><li>Return ? <var>result</var>.</li></ol></li><li><emu-xref href="#assert" id="_ref_8720"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Status]]</var> is one of <emu-const>linked</emu-const>, <emu-const>evaluating-async</emu-const>, or <emu-const>evaluated</emu-const>.</li><li><emu-xref href="#assert" id="_ref_8721"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>stack</var> is empty.</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
|
|
|
|
<emu-clause id="sec-InnerModuleLinking" type="abstract operation" oldids="sec-innermoduleinstantiation" aoid="InnerModuleLinking"><span id="sec-innermoduleinstantiation"></span>
|
|
<h1><span class="secnum">16.2.1.6.1.2.1</span> InnerModuleLinking ( <var>module</var>, <var>stack</var>, <var>index</var> )</h1>
|
|
<p>The abstract operation InnerModuleLinking takes arguments <var>module</var> (a <emu-xref href="#sec-abstract-module-records" id="_ref_8722"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>), <var>stack</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8723"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#cyclic-module-record" id="_ref_8724"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Records</a></emu-xref>), and <var>index</var> (a non-negative <emu-xref href="#integer" id="_ref_8725"><a href="notational-conventions.html#integer">integer</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8726"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a non-negative <emu-xref href="#integer" id="_ref_8727"><a href="notational-conventions.html#integer">integer</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8728"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It is used by <emu-xref aoid="Link" id="_ref_8729"><a href="ecmascript-language-scripts-and-modules.html#abstract-link">Link</a></emu-xref> to perform the actual linking process for <var>module</var>, as well as recursively on all other modules in the dependency graph. The <var>stack</var> and <var>index</var> parameters, as well as a module's <var class="field">[[DFSAncestorIndex]]</var> field, keep track of the depth-first search (DFS) traversal. In particular, <var class="field">[[DFSAncestorIndex]]</var> is used to discover strongly connected components (SCCs), such that all modules in an SCC transition to <emu-const>linked</emu-const> together. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li>If <var>module</var> is not a <emu-xref href="#cyclic-module-record" id="_ref_8730"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>, then<ol><li>Perform ? <var>module</var>.<emu-xref aoid="Link" id="_ref_8731"><a href="ecmascript-language-scripts-and-modules.html#abstract-link">Link</a></emu-xref>().</li><li>Return <var>index</var>.</li></ol></li><li>If <var>module</var>.<var class="field">[[Status]]</var> is one of <emu-const>linking</emu-const>, <emu-const>linked</emu-const>, <emu-const>evaluating-async</emu-const>, or <emu-const>evaluated</emu-const>, then<ol><li>Return <var>index</var>.</li></ol></li><li><emu-xref href="#assert" id="_ref_8732"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Status]]</var> is <emu-const>unlinked</emu-const>.</li><li>Set <var>module</var>.<var class="field">[[Status]]</var> to <emu-const>linking</emu-const>.</li><li>Let <var>moduleIndex</var> be <var>index</var>.</li><li>Set <var>module</var>.<var class="field">[[DFSAncestorIndex]]</var> to <var>index</var>.</li><li>Set <var>index</var> to <var>index</var> + 1.</li><li>Append <var>module</var> to <var>stack</var>.</li><li>For each <emu-xref href="#modulerequest-record" id="_ref_8733"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> <var>request</var> of <var>module</var>.<var class="field">[[RequestedModules]]</var>, do<ol><li>Let <var>requiredModule</var> be <emu-xref aoid="GetImportedModule" id="_ref_8734"><a href="ecmascript-language-scripts-and-modules.html#sec-GetImportedModule">GetImportedModule</a></emu-xref>(<var>module</var>, <var>request</var>).</li><li>Set <var>index</var> to ? <emu-xref aoid="InnerModuleLinking" id="_ref_8735"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLinking">InnerModuleLinking</a></emu-xref>(<var>requiredModule</var>, <var>stack</var>, <var>index</var>).</li><li>If <var>requiredModule</var> is a <emu-xref href="#cyclic-module-record" id="_ref_8736"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>, then<ol><li><emu-xref href="#assert" id="_ref_8737"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>requiredModule</var>.<var class="field">[[Status]]</var> is one of <emu-const>linking</emu-const>, <emu-const>linked</emu-const>, <emu-const>evaluating-async</emu-const>, or <emu-const>evaluated</emu-const>.</li><li><emu-xref href="#assert" id="_ref_8738"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>requiredModule</var>.<var class="field">[[Status]]</var> is <emu-const>linking</emu-const> if and only if <var>stack</var> contains <var>requiredModule</var>.</li><li>If <var>requiredModule</var>.<var class="field">[[Status]]</var> is <emu-const>linking</emu-const>, then<ol><li>Set <var>module</var>.<var class="field">[[DFSAncestorIndex]]</var> to <emu-xref aoid="min" id="_ref_8739"><a href="notational-conventions.html#eqn-min">min</a></emu-xref>(<var>module</var>.<var class="field">[[DFSAncestorIndex]]</var>, <var>requiredModule</var>.<var class="field">[[DFSAncestorIndex]]</var>).</li></ol></li></ol></li></ol></li><li>Perform ? <var>module</var>.<emu-xref aoid="InitializeEnvironment" id="_ref_8740"><a href="ecmascript-language-scripts-and-modules.html#abstract-initializeenvironment">InitializeEnvironment</a></emu-xref>().</li><li><emu-xref href="#assert" id="_ref_8741"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var> occurs exactly once in <var>stack</var>.</li><li><emu-xref href="#assert" id="_ref_8742"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[DFSAncestorIndex]]</var> ≤ <var>moduleIndex</var>.</li><li>If <var>module</var>.<var class="field">[[DFSAncestorIndex]]</var> = <var>moduleIndex</var>, then<ol><li>Let <var>done</var> be <emu-val>false</emu-val>.</li><li>Repeat, while <var>done</var> is <emu-val>false</emu-val>,<ol><li>Let <var>requiredModule</var> be the last element of <var>stack</var>.</li><li>Remove the last element of <var>stack</var>.</li><li><emu-xref href="#assert" id="_ref_8743"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>requiredModule</var> is a <emu-xref href="#cyclic-module-record" id="_ref_8744"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>.</li><li>Set <var>requiredModule</var>.<var class="field">[[Status]]</var> to <emu-const>linked</emu-const>.</li><li>If <var>requiredModule</var> and <var>module</var> are the same <emu-xref href="#sec-abstract-module-records" id="_ref_8745"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>, set <var>done</var> to <emu-val>true</emu-val>.</li></ol></li></ol></li><li>Return <var>index</var>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-moduleevaluation" type="concrete method">
|
|
<h1><span class="secnum">16.2.1.6.1.3</span> Evaluate ( )</h1>
|
|
<p>The <emu-xref aoid="Evaluate" id="_ref_8746"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref> concrete method of a <emu-xref href="#cyclic-module-record" id="_ref_8747"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> <var>module</var> takes no arguments and returns a Promise. <emu-xref aoid="Evaluate" id="_ref_8748"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref> transitions this module's <var class="field">[[Status]]</var> from <emu-const>linked</emu-const> to either <emu-const>evaluating-async</emu-const> or <emu-const>evaluated</emu-const>. The first time it is called on a module in a given strongly connected component, <emu-xref aoid="Evaluate" id="_ref_8749"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref> creates and returns a Promise which resolves when the module has finished evaluating. This Promise is stored in the <var class="field">[[TopLevelCapability]]</var> field of the <var class="field">[[CycleRoot]]</var> for the component. Future invocations of <emu-xref aoid="Evaluate" id="_ref_8750"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref> on any module in the component return the same Promise. (Most of the work is done by the auxiliary function <emu-xref aoid="InnerModuleEvaluation" id="_ref_8751"><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation">InnerModuleEvaluation</a></emu-xref>.) It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_8752"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: This call to <emu-xref aoid="Evaluate" id="_ref_8753"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref> is not happening at the same time as another call to <emu-xref aoid="Evaluate" id="_ref_8754"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref> within the <emu-xref href="#surrounding-agent" id="_ref_8755"><a href="executable-code-and-execution-contexts.html#surrounding-agent">surrounding agent</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_8756"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Status]]</var> is one of <emu-const>linked</emu-const>, <emu-const>evaluating-async</emu-const>, or <emu-const>evaluated</emu-const>.</li><li>If <var>module</var>.<var class="field">[[Status]]</var> is either <emu-const>evaluating-async</emu-const> or <emu-const>evaluated</emu-const>, then<ol><li>If <var>module</var>.<var class="field">[[CycleRoot]]</var> is not <emu-const>empty</emu-const>, then<ol><li>Set <var>module</var> to <var>module</var>.<var class="field">[[CycleRoot]]</var>.</li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_8757"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Status]]</var> is <emu-const>evaluated</emu-const> and <var>module</var>.<var class="field">[[EvaluationError]]</var> is a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8758"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>.</li></ol></li></ol></li><li>If <var>module</var>.<var class="field">[[TopLevelCapability]]</var> is not <emu-const>empty</emu-const>, then<ol><li>Return <var>module</var>.<var class="field">[[TopLevelCapability]]</var>.<var class="field">[[Promise]]</var>.</li></ol></li><li>Let <var>stack</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8759"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>capability</var> be ! <emu-xref aoid="NewPromiseCapability" id="_ref_8760"><a href="control-abstraction-objects.html#sec-newpromisecapability">NewPromiseCapability</a></emu-xref>(<emu-xref href="#sec-promise-constructor" id="_ref_8761"><a href="control-abstraction-objects.html#sec-promise-constructor">%Promise%</a></emu-xref>).</li><li>Set <var>module</var>.<var class="field">[[TopLevelCapability]]</var> to <var>capability</var>.</li><li>Let <var>result</var> be <emu-xref aoid="Completion" id="_ref_8762"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="InnerModuleEvaluation" id="_ref_8763"><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation" class="e-user-code">InnerModuleEvaluation</a></emu-xref>(<var>module</var>, <var>stack</var>, 0)).</li><li>If <var>result</var> is an <emu-xref href="#sec-completion-record-specification-type" id="_ref_8764"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>, then<ol><li>For each <emu-xref href="#cyclic-module-record" id="_ref_8765"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> <var>m</var> of <var>stack</var>, do<ol><li><emu-xref href="#assert" id="_ref_8766"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>m</var>.<var class="field">[[Status]]</var> is <emu-const>evaluating</emu-const>.</li><li><emu-xref href="#assert" id="_ref_8767"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>m</var>.<var class="field">[[AsyncEvaluationOrder]]</var> is <emu-const>unset</emu-const>.</li><li>Set <var>m</var>.<var class="field">[[Status]]</var> to <emu-const>evaluated</emu-const>.</li><li>Set <var>m</var>.<var class="field">[[EvaluationError]]</var> to <var>result</var>.</li></ol></li><li><emu-xref href="#assert" id="_ref_8768"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Status]]</var> is <emu-const>evaluated</emu-const>.</li><li><emu-xref href="#assert" id="_ref_8769"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[EvaluationError]]</var> and <var>result</var> are the same <emu-xref href="#sec-completion-record-specification-type" id="_ref_8770"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">Completion Record</a></emu-xref>.</li><li>Perform ! <emu-xref aoid="Call" id="_ref_8771"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>capability</var>.<var class="field">[[Reject]]</var>, <emu-val>undefined</emu-val>, « <var>result</var>.<var class="field">[[Value]]</var> »).</li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_8772"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Status]]</var> is either <emu-const>evaluating-async</emu-const> or <emu-const>evaluated</emu-const>.</li><li><emu-xref href="#assert" id="_ref_8773"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[EvaluationError]]</var> is <emu-const>empty</emu-const>.</li><li>If <var>module</var>.<var class="field">[[Status]]</var> is <emu-const>evaluated</emu-const>, then<ol><li><emu-xref href="#assert" id="_ref_8774"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[AsyncEvaluationOrder]]</var> is either <emu-const>unset</emu-const> or <emu-const>done</emu-const>.</li><li>NOTE: <var>module</var>.<var class="field">[[AsyncEvaluationOrder]]</var> is <emu-const>done</emu-const> if and only if <var>module</var> had already been evaluated and that evaluation was asynchronous.</li><li>Perform ! <emu-xref aoid="Call" id="_ref_8775"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>capability</var>.<var class="field">[[Resolve]]</var>, <emu-val>undefined</emu-val>, « <emu-val>undefined</emu-val> »).</li></ol></li><li><emu-xref href="#assert" id="_ref_8776"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>stack</var> is empty.</li></ol></li><li>Return <var>capability</var>.<var class="field">[[Promise]]</var>.</li></ol></emu-alg>
|
|
|
|
<emu-clause id="sec-innermoduleevaluation" type="abstract operation" aoid="InnerModuleEvaluation">
|
|
<h1><span class="secnum">16.2.1.6.1.3.1</span> InnerModuleEvaluation ( <var>module</var>, <var>stack</var>, <var>index</var> )</h1>
|
|
<p>The abstract operation InnerModuleEvaluation takes arguments <var>module</var> (a <emu-xref href="#sec-abstract-module-records" id="_ref_8777"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>), <var>stack</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8778"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#cyclic-module-record" id="_ref_8779"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Records</a></emu-xref>), and <var>index</var> (a non-negative <emu-xref href="#integer" id="_ref_8780"><a href="notational-conventions.html#integer">integer</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8781"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a non-negative <emu-xref href="#integer" id="_ref_8782"><a href="notational-conventions.html#integer">integer</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8783"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It is used by <emu-xref aoid="Evaluate" id="_ref_8784"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref> to perform the actual evaluation process for <var>module</var>, as well as recursively on all other modules in the dependency graph. The <var>stack</var> and <var>index</var> parameters, as well as <var>module</var>'s <var class="field">[[DFSAncestorIndex]]</var> field, are used the same way as in <emu-xref aoid="InnerModuleLinking" id="_ref_8785"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLinking">InnerModuleLinking</a></emu-xref>. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li>If <var>module</var> is not a <emu-xref href="#cyclic-module-record" id="_ref_8786"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>, then<ol><li>Perform ? <emu-xref aoid="EvaluateModuleSync" id="_ref_8787"><a href="ecmascript-language-scripts-and-modules.html#sec-EvaluateModuleSync">EvaluateModuleSync</a></emu-xref>(<var>module</var>).</li><li>Return <var>index</var>.</li></ol></li><li>If <var>module</var>.<var class="field">[[Status]]</var> is either <emu-const>evaluating-async</emu-const> or <emu-const>evaluated</emu-const>, then<ol><li>If <var>module</var>.<var class="field">[[EvaluationError]]</var> is <emu-const>empty</emu-const>, return <var>index</var>.</li><li>Return ? <var>module</var>.<var class="field">[[EvaluationError]]</var>.</li></ol></li><li>If <var>module</var>.<var class="field">[[Status]]</var> is <emu-const>evaluating</emu-const>, return <var>index</var>.</li><li><emu-xref href="#assert" id="_ref_8788"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Status]]</var> is <emu-const>linked</emu-const>.</li><li>Set <var>module</var>.<var class="field">[[Status]]</var> to <emu-const>evaluating</emu-const>.</li><li>Let <var>moduleIndex</var> be <var>index</var>.</li><li>Set <var>module</var>.<var class="field">[[DFSAncestorIndex]]</var> to <var>index</var>.</li><li>Set <var>module</var>.<var class="field">[[PendingAsyncDependencies]]</var> to 0.</li><li>Set <var>index</var> to <var>index</var> + 1.</li><li>Append <var>module</var> to <var>stack</var>.</li><li>For each <emu-xref href="#modulerequest-record" id="_ref_8789"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> <var>request</var> of <var>module</var>.<var class="field">[[RequestedModules]]</var>, do<ol><li>Let <var>requiredModule</var> be <emu-xref aoid="GetImportedModule" id="_ref_8790"><a href="ecmascript-language-scripts-and-modules.html#sec-GetImportedModule">GetImportedModule</a></emu-xref>(<var>module</var>, <var>request</var>).</li><li>Set <var>index</var> to ? <emu-xref aoid="InnerModuleEvaluation" id="_ref_8791"><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation" class="e-user-code">InnerModuleEvaluation</a></emu-xref>(<var>requiredModule</var>, <var>stack</var>, <var>index</var>).</li><li>If <var>requiredModule</var> is a <emu-xref href="#cyclic-module-record" id="_ref_8792"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>, then<ol><li><emu-xref href="#assert" id="_ref_8793"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>requiredModule</var>.<var class="field">[[Status]]</var> is one of <emu-const>evaluating</emu-const>, <emu-const>evaluating-async</emu-const>, or <emu-const>evaluated</emu-const>.</li><li><emu-xref href="#assert" id="_ref_8794"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>requiredModule</var>.<var class="field">[[Status]]</var> is <emu-const>evaluating</emu-const> if and only if <var>stack</var> contains <var>requiredModule</var>.</li><li>If <var>requiredModule</var>.<var class="field">[[Status]]</var> is <emu-const>evaluating</emu-const>, then<ol><li>Set <var>module</var>.<var class="field">[[DFSAncestorIndex]]</var> to <emu-xref aoid="min" id="_ref_8795"><a href="notational-conventions.html#eqn-min">min</a></emu-xref>(<var>module</var>.<var class="field">[[DFSAncestorIndex]]</var>, <var>requiredModule</var>.<var class="field">[[DFSAncestorIndex]]</var>).</li></ol></li><li>Else,<ol><li>Set <var>requiredModule</var> to <var>requiredModule</var>.<var class="field">[[CycleRoot]]</var>.</li><li><emu-xref href="#assert" id="_ref_8796"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>requiredModule</var>.<var class="field">[[Status]]</var> is either <emu-const>evaluating-async</emu-const> or <emu-const>evaluated</emu-const>.</li><li>If <var>requiredModule</var>.<var class="field">[[EvaluationError]]</var> is not <emu-const>empty</emu-const>, return ? <var>requiredModule</var>.<var class="field">[[EvaluationError]]</var>.</li></ol></li><li>If <var>requiredModule</var>.<var class="field">[[AsyncEvaluationOrder]]</var> is an <emu-xref href="#integer" id="_ref_8797"><a href="notational-conventions.html#integer">integer</a></emu-xref>, then<ol><li>Set <var>module</var>.<var class="field">[[PendingAsyncDependencies]]</var> to <var>module</var>.<var class="field">[[PendingAsyncDependencies]]</var> + 1.</li><li>Append <var>module</var> to <var>requiredModule</var>.<var class="field">[[AsyncParentModules]]</var>.</li></ol></li></ol></li></ol></li><li>If <var>module</var>.<var class="field">[[PendingAsyncDependencies]]</var> > 0 or <var>module</var>.<var class="field">[[HasTLA]]</var> is <emu-val>true</emu-val>, then<ol><li><emu-xref href="#assert" id="_ref_8798"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[AsyncEvaluationOrder]]</var> is <emu-const>unset</emu-const>.</li><li>Set <var>module</var>.<var class="field">[[AsyncEvaluationOrder]]</var> to <emu-xref aoid="IncrementModuleAsyncEvaluationCount" id="_ref_8799"><a href="executable-code-and-execution-contexts.html#sec-IncrementModuleAsyncEvaluationCount">IncrementModuleAsyncEvaluationCount</a></emu-xref>().</li><li>If <var>module</var>.<var class="field">[[PendingAsyncDependencies]]</var> = 0, perform <emu-xref aoid="ExecuteAsyncModule" id="_ref_8800"><a href="ecmascript-language-scripts-and-modules.html#sec-execute-async-module" class="e-user-code">ExecuteAsyncModule</a></emu-xref>(<var>module</var>).</li></ol></li><li>Else,<ol><li>Perform ? <span class="e-user-code"><var>module</var>.<emu-xref aoid="ExecuteModule" id="_ref_8801"><a href="ecmascript-language-scripts-and-modules.html#abstract-executemodule">ExecuteModule</a></emu-xref>()</span>.</li></ol></li><li><emu-xref href="#assert" id="_ref_8802"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var> occurs exactly once in <var>stack</var>.</li><li><emu-xref href="#assert" id="_ref_8803"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[DFSAncestorIndex]]</var> ≤ <var>moduleIndex</var>.</li><li>If <var>module</var>.<var class="field">[[DFSAncestorIndex]]</var> = <var>moduleIndex</var>, then<ol><li>Let <var>done</var> be <emu-val>false</emu-val>.</li><li>Repeat, while <var>done</var> is <emu-val>false</emu-val>,<ol><li>Let <var>requiredModule</var> be the last element of <var>stack</var>.</li><li>Remove the last element of <var>stack</var>.</li><li><emu-xref href="#assert" id="_ref_8804"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>requiredModule</var> is a <emu-xref href="#cyclic-module-record" id="_ref_8805"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_8806"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>requiredModule</var>.<var class="field">[[AsyncEvaluationOrder]]</var> is either an <emu-xref href="#integer" id="_ref_8807"><a href="notational-conventions.html#integer">integer</a></emu-xref> or <emu-const>unset</emu-const>.</li><li>If <var>requiredModule</var>.<var class="field">[[AsyncEvaluationOrder]]</var> is <emu-const>unset</emu-const>, set <var>requiredModule</var>.<var class="field">[[Status]]</var> to <emu-const>evaluated</emu-const>.</li><li>Else, set <var>requiredModule</var>.<var class="field">[[Status]]</var> to <emu-const>evaluating-async</emu-const>.</li><li>If <var>requiredModule</var> and <var>module</var> are the same <emu-xref href="#sec-abstract-module-records" id="_ref_8808"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>, set <var>done</var> to <emu-val>true</emu-val>.</li><li>Set <var>requiredModule</var>.<var class="field">[[CycleRoot]]</var> to <var>module</var>.</li></ol></li></ol></li><li>Return <var>index</var>.</li></ol></emu-alg>
|
|
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
|
<p>A module is <emu-const>evaluating</emu-const> while it is being traversed by InnerModuleEvaluation. A module is <emu-const>evaluated</emu-const> on execution completion or <emu-const>evaluating-async</emu-const> during execution if its <var class="field">[[HasTLA]]</var> field is <emu-val>true</emu-val> or if it has asynchronous dependencies.</p>
|
|
</div></emu-note>
|
|
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
|
<p>Any modules depending on a module of an asynchronous cycle when that cycle is not <emu-const>evaluating</emu-const> will instead depend on the execution of the root of the cycle via <var class="field">[[CycleRoot]]</var>. This ensures that the cycle state can be treated as a single strongly connected component through its root module state.</p>
|
|
</div></emu-note>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-execute-async-module" type="abstract operation" aoid="ExecuteAsyncModule">
|
|
<h1><span class="secnum">16.2.1.6.1.3.2</span> ExecuteAsyncModule ( <var>module</var> )</h1>
|
|
<p>The abstract operation ExecuteAsyncModule takes argument <var>module</var> (a <emu-xref href="#cyclic-module-record" id="_ref_8809"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>) and returns <emu-const>unused</emu-const>. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_8810"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Status]]</var> is either <emu-const>evaluating</emu-const> or <emu-const>evaluating-async</emu-const>.</li><li><emu-xref href="#assert" id="_ref_8811"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[HasTLA]]</var> is <emu-val>true</emu-val>.</li><li>Let <var>capability</var> be ! <emu-xref aoid="NewPromiseCapability" id="_ref_8812"><a href="control-abstraction-objects.html#sec-newpromisecapability">NewPromiseCapability</a></emu-xref>(<emu-xref href="#sec-promise-constructor" id="_ref_8813"><a href="control-abstraction-objects.html#sec-promise-constructor">%Promise%</a></emu-xref>).</li><li>Let <var>fulfilledClosure</var> be a new <emu-xref href="#sec-abstract-closure" id="_ref_8814"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> with no parameters that captures <var>module</var> and performs the following steps when called:<ol><li>Perform <emu-xref aoid="AsyncModuleExecutionFulfilled" id="_ref_8815"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-fulfilled">AsyncModuleExecutionFulfilled</a></emu-xref>(<var>module</var>).</li><li>Return <emu-xref aoid="NormalCompletion" id="_ref_8816"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(<emu-val>undefined</emu-val>).</li></ol></li><li>Let <var>onFulfilled</var> be <emu-xref aoid="CreateBuiltinFunction" id="_ref_8817"><a href="ordinary-and-exotic-objects-behaviours.html#sec-createbuiltinfunction">CreateBuiltinFunction</a></emu-xref>(<var>fulfilledClosure</var>, 0, <emu-val>""</emu-val>, « »).</li><li>Let <var>rejectedClosure</var> be a new <emu-xref href="#sec-abstract-closure" id="_ref_8818"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> with parameters (<var>error</var>) that captures <var>module</var> and performs the following steps when called:<ol><li>Perform <emu-xref aoid="AsyncModuleExecutionRejected" id="_ref_8819"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-rejected">AsyncModuleExecutionRejected</a></emu-xref>(<var>module</var>, <var>error</var>).</li><li>Return <emu-xref aoid="NormalCompletion" id="_ref_8820"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(<emu-val>undefined</emu-val>).</li></ol></li><li>Let <var>onRejected</var> be <emu-xref aoid="CreateBuiltinFunction" id="_ref_8821"><a href="ordinary-and-exotic-objects-behaviours.html#sec-createbuiltinfunction">CreateBuiltinFunction</a></emu-xref>(<var>rejectedClosure</var>, 0, <emu-val>""</emu-val>, « »).</li><li>Perform <emu-xref aoid="PerformPromiseThen" id="_ref_8822"><a href="control-abstraction-objects.html#sec-performpromisethen">PerformPromiseThen</a></emu-xref>(<var>capability</var>.<var class="field">[[Promise]]</var>, <var>onFulfilled</var>, <var>onRejected</var>).</li><li>Perform ! <span class="e-user-code"><var>module</var>.<emu-xref aoid="ExecuteModule" id="_ref_8823"><a href="ecmascript-language-scripts-and-modules.html#abstract-executemodule">ExecuteModule</a></emu-xref>(<var>capability</var>)</span>.</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-gather-available-ancestors" type="abstract operation" aoid="GatherAvailableAncestors">
|
|
<h1><span class="secnum">16.2.1.6.1.3.3</span> GatherAvailableAncestors ( <var>module</var>, <var>execList</var> )</h1>
|
|
<p>The abstract operation GatherAvailableAncestors takes arguments <var>module</var> (a <emu-xref href="#cyclic-module-record" id="_ref_8824"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>) and <var>execList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8825"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#cyclic-module-record" id="_ref_8826"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Records</a></emu-xref>) and returns <emu-const>unused</emu-const>. It performs the following steps when called:</p>
|
|
<emu-alg><ol><li>For each <emu-xref href="#cyclic-module-record" id="_ref_8827"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> <var>m</var> of <var>module</var>.<var class="field">[[AsyncParentModules]]</var>, do<ol><li>If <var>execList</var> does not contain <var>m</var> and <var>m</var>.<var class="field">[[CycleRoot]]</var>.<var class="field">[[EvaluationError]]</var> is <emu-const>empty</emu-const>, then<ol><li><emu-xref href="#assert" id="_ref_8828"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>m</var>.<var class="field">[[Status]]</var> is <emu-const>evaluating-async</emu-const>.</li><li><emu-xref href="#assert" id="_ref_8829"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>m</var>.<var class="field">[[EvaluationError]]</var> is <emu-const>empty</emu-const>.</li><li><emu-xref href="#assert" id="_ref_8830"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>m</var>.<var class="field">[[AsyncEvaluationOrder]]</var> is an <emu-xref href="#integer" id="_ref_8831"><a href="notational-conventions.html#integer">integer</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_8832"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>m</var>.<var class="field">[[PendingAsyncDependencies]]</var> > 0.</li><li>Set <var>m</var>.<var class="field">[[PendingAsyncDependencies]]</var> to <var>m</var>.<var class="field">[[PendingAsyncDependencies]]</var> - 1.</li><li>If <var>m</var>.<var class="field">[[PendingAsyncDependencies]]</var> = 0, then<ol><li>Append <var>m</var> to <var>execList</var>.</li><li>If <var>m</var>.<var class="field">[[HasTLA]]</var> is <emu-val>false</emu-val>, perform <emu-xref aoid="GatherAvailableAncestors" id="_ref_8833"><a href="ecmascript-language-scripts-and-modules.html#sec-gather-available-ancestors">GatherAvailableAncestors</a></emu-xref>(<var>m</var>, <var>execList</var>).</li></ol></li></ol></li></ol></li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
|
|
<emu-note><span class="note">Note</span><div class="note-contents">
|
|
<p>When an asynchronous execution for a root <var>module</var> is fulfilled, this function determines the list of modules which are able to synchronously execute together on this completion, populating them in <var>execList</var>.</p>
|
|
</div></emu-note>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-async-module-execution-fulfilled" type="abstract operation" aoid="AsyncModuleExecutionFulfilled">
|
|
<h1><span class="secnum">16.2.1.6.1.3.4</span> AsyncModuleExecutionFulfilled ( <var>module</var> )</h1>
|
|
<p>The abstract operation AsyncModuleExecutionFulfilled takes argument <var>module</var> (a <emu-xref href="#cyclic-module-record" id="_ref_8834"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>) and returns <emu-const>unused</emu-const>. It performs the following steps when called:</p>
|
|
<emu-alg><ol><li>If <var>module</var>.<var class="field">[[Status]]</var> is <emu-const>evaluated</emu-const>, then<ol><li><emu-xref href="#assert" id="_ref_8835"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[EvaluationError]]</var> is not <emu-const>empty</emu-const>.</li><li>Return <emu-const>unused</emu-const>.</li></ol></li><li><emu-xref href="#assert" id="_ref_8836"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Status]]</var> is <emu-const>evaluating-async</emu-const>.</li><li><emu-xref href="#assert" id="_ref_8837"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[AsyncEvaluationOrder]]</var> is an <emu-xref href="#integer" id="_ref_8838"><a href="notational-conventions.html#integer">integer</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_8839"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[EvaluationError]]</var> is <emu-const>empty</emu-const>.</li><li>Set <var>module</var>.<var class="field">[[AsyncEvaluationOrder]]</var> to <emu-const>done</emu-const>.</li><li>Set <var>module</var>.<var class="field">[[Status]]</var> to <emu-const>evaluated</emu-const>.</li><li>If <var>module</var>.<var class="field">[[TopLevelCapability]]</var> is not <emu-const>empty</emu-const>, then<ol><li><emu-xref href="#assert" id="_ref_8840"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[CycleRoot]]</var> and <var>module</var> are the same <emu-xref href="#sec-abstract-module-records" id="_ref_8841"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>.</li><li>Perform ! <emu-xref aoid="Call" id="_ref_8842"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>module</var>.<var class="field">[[TopLevelCapability]]</var>.<var class="field">[[Resolve]]</var>, <emu-val>undefined</emu-val>, « <emu-val>undefined</emu-val> »).</li></ol></li><li>Let <var>execList</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8843"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Perform <emu-xref aoid="GatherAvailableAncestors" id="_ref_8844"><a href="ecmascript-language-scripts-and-modules.html#sec-gather-available-ancestors">GatherAvailableAncestors</a></emu-xref>(<var>module</var>, <var>execList</var>).</li><li><emu-xref href="#assert" id="_ref_8845"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: All elements of <var>execList</var> have their <var class="field">[[AsyncEvaluationOrder]]</var> field set to an <emu-xref href="#integer" id="_ref_8846"><a href="notational-conventions.html#integer">integer</a></emu-xref>, <var class="field">[[PendingAsyncDependencies]]</var> field set to 0, and <var class="field">[[EvaluationError]]</var> field set to <emu-const>empty</emu-const>.</li><li>Let <var>sortedExecList</var> be a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8847"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose elements are the elements of <var>execList</var>, sorted by their <var class="field">[[AsyncEvaluationOrder]]</var> field in ascending order.</li><li>For each <emu-xref href="#cyclic-module-record" id="_ref_8848"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> <var>m</var> of <var>sortedExecList</var>, do<ol><li>If <var>m</var>.<var class="field">[[Status]]</var> is <emu-const>evaluated</emu-const>, then<ol><li><emu-xref href="#assert" id="_ref_8849"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>m</var>.<var class="field">[[EvaluationError]]</var> is not <emu-const>empty</emu-const>.</li></ol></li><li>Else if <var>m</var>.<var class="field">[[HasTLA]]</var> is <emu-val>true</emu-val>, then<ol><li>Perform <emu-xref aoid="ExecuteAsyncModule" id="_ref_8850"><a href="ecmascript-language-scripts-and-modules.html#sec-execute-async-module" class="e-user-code">ExecuteAsyncModule</a></emu-xref>(<var>m</var>).</li></ol></li><li>Else,<ol><li>Let <var>result</var> be <emu-xref aoid="Completion" id="_ref_8851"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<span class="e-user-code"><var>m</var>.<emu-xref aoid="ExecuteModule" id="_ref_8852"><a href="ecmascript-language-scripts-and-modules.html#abstract-executemodule">ExecuteModule</a></emu-xref>()</span>).</li><li>If <var>result</var> is an <emu-xref href="#sec-completion-record-specification-type" id="_ref_8853"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>, then<ol><li>Perform <emu-xref aoid="AsyncModuleExecutionRejected" id="_ref_8854"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-rejected">AsyncModuleExecutionRejected</a></emu-xref>(<var>m</var>, <var>result</var>.<var class="field">[[Value]]</var>).</li></ol></li><li>Else,<ol><li>Set <var>m</var>.<var class="field">[[AsyncEvaluationOrder]]</var> to <emu-const>done</emu-const>.</li><li>Set <var>m</var>.<var class="field">[[Status]]</var> to <emu-const>evaluated</emu-const>.</li><li>If <var>m</var>.<var class="field">[[TopLevelCapability]]</var> is not <emu-const>empty</emu-const>, then<ol><li><emu-xref href="#assert" id="_ref_8855"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>m</var>.<var class="field">[[CycleRoot]]</var> and <var>m</var> are the same <emu-xref href="#sec-abstract-module-records" id="_ref_8856"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>.</li><li>Perform ! <emu-xref aoid="Call" id="_ref_8857"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>m</var>.<var class="field">[[TopLevelCapability]]</var>.<var class="field">[[Resolve]]</var>, <emu-val>undefined</emu-val>, « <emu-val>undefined</emu-val> »).</li></ol></li></ol></li></ol></li></ol></li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-async-module-execution-rejected" type="abstract operation" aoid="AsyncModuleExecutionRejected">
|
|
<h1><span class="secnum">16.2.1.6.1.3.5</span> AsyncModuleExecutionRejected ( <var>module</var>, <var>error</var> )</h1>
|
|
<p>The abstract operation AsyncModuleExecutionRejected takes arguments <var>module</var> (a <emu-xref href="#cyclic-module-record" id="_ref_8858"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>) and <var>error</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_8859"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and returns <emu-const>unused</emu-const>. It performs the following steps when called:</p>
|
|
<emu-alg><ol><li>If <var>module</var>.<var class="field">[[Status]]</var> is <emu-const>evaluated</emu-const>, then<ol><li><emu-xref href="#assert" id="_ref_8860"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[EvaluationError]]</var> is not <emu-const>empty</emu-const>.</li><li>Return <emu-const>unused</emu-const>.</li></ol></li><li><emu-xref href="#assert" id="_ref_8861"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Status]]</var> is <emu-const>evaluating-async</emu-const>.</li><li><emu-xref href="#assert" id="_ref_8862"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[AsyncEvaluationOrder]]</var> is an <emu-xref href="#integer" id="_ref_8863"><a href="notational-conventions.html#integer">integer</a></emu-xref>.</li><li><emu-xref href="#assert" id="_ref_8864"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[EvaluationError]]</var> is <emu-const>empty</emu-const>.</li><li>Set <var>module</var>.<var class="field">[[EvaluationError]]</var> to <emu-xref aoid="ThrowCompletion" id="_ref_8865"><a href="ecmascript-data-types-and-values.html#sec-throwcompletion">ThrowCompletion</a></emu-xref>(<var>error</var>).</li><li>Set <var>module</var>.<var class="field">[[Status]]</var> to <emu-const>evaluated</emu-const>.</li><li>Set <var>module</var>.<var class="field">[[AsyncEvaluationOrder]]</var> to <emu-const>done</emu-const>.</li><li>NOTE: <var>module</var>.<var class="field">[[AsyncEvaluationOrder]]</var> is set to <emu-const>done</emu-const> for symmetry with <emu-xref aoid="AsyncModuleExecutionFulfilled" id="_ref_8866"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-fulfilled">AsyncModuleExecutionFulfilled</a></emu-xref>. In <emu-xref aoid="InnerModuleEvaluation" id="_ref_8867"><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation">InnerModuleEvaluation</a></emu-xref>, the value of a module's <var class="field">[[AsyncEvaluationOrder]]</var> internal slot is unused when its <var class="field">[[EvaluationError]]</var> internal slot is not <emu-const>empty</emu-const>.</li><li>If <var>module</var>.<var class="field">[[TopLevelCapability]]</var> is not <emu-const>empty</emu-const>, then<ol><li><emu-xref href="#assert" id="_ref_8868"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[CycleRoot]]</var> and <var>module</var> are the same <emu-xref href="#sec-abstract-module-records" id="_ref_8869"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>.</li><li>Perform ! <emu-xref aoid="Call" id="_ref_8870"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>module</var>.<var class="field">[[TopLevelCapability]]</var>.<var class="field">[[Reject]]</var>, <emu-val>undefined</emu-val>, « <var>error</var> »).</li></ol></li><li>For each <emu-xref href="#cyclic-module-record" id="_ref_8871"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> <var>m</var> of <var>module</var>.<var class="field">[[AsyncParentModules]]</var>, do<ol><li>Perform <emu-xref aoid="AsyncModuleExecutionRejected" id="_ref_8872"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-rejected">AsyncModuleExecutionRejected</a></emu-xref>(<var>m</var>, <var>error</var>).</li></ol></li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-example-cyclic-module-record-graphs">
|
|
<h1><span class="secnum">16.2.1.6.2</span> Example Cyclic Module Record Graphs</h1>
|
|
|
|
<p>This non-normative section gives a series of examples of the linking and evaluation of a few common module graphs, with a specific focus on how errors can occur.</p>
|
|
|
|
<p>First consider the following simple module graph:</p>
|
|
|
|
<emu-figure id="figure-module-graph-simple" caption="A simple module graph"><figure><figcaption>Figure 2: A simple module graph</figcaption>
|
|
<img alt="A module graph in which module A depends on module B, and module B depends on module C" width="60" height="198" src="../img/module-graph-simple.svg">
|
|
</figure></emu-figure>
|
|
|
|
<p>Let's first assume that there are no error conditions. When a <emu-xref href="#host" id="_ref_8873"><a href="overview.html#host">host</a></emu-xref> first calls <var>A</var>.<emu-xref aoid="LoadRequestedModules" id="_ref_8874"><a href="ecmascript-language-scripts-and-modules.html#abstract-loadrequestedmodules">LoadRequestedModules</a></emu-xref>(), this will complete successfully by assumption, and recursively load the dependencies of <var>B</var> and <var>C</var> as well (respectively, <var>C</var> and none), and then set <var>A</var>.<var class="field">[[Status]]</var> = <var>B</var>.<var class="field">[[Status]]</var> = <var>C</var>.<var class="field">[[Status]]</var> = <emu-const>unlinked</emu-const>. Then, when the <emu-xref href="#host" id="_ref_8875"><a href="overview.html#host">host</a></emu-xref> calls <var>A</var>.<emu-xref aoid="Link" id="_ref_8876"><a href="ecmascript-language-scripts-and-modules.html#abstract-link">Link</a></emu-xref>(), it will complete successfully (again by assumption) such that <var>A</var>.<var class="field">[[Status]]</var> = <var>B</var>.<var class="field">[[Status]]</var> = <var>C</var>.<var class="field">[[Status]]</var> = <emu-const>linked</emu-const>. These preparatory steps can be performed at any time. Later, when the <emu-xref href="#host" id="_ref_8877"><a href="overview.html#host">host</a></emu-xref> is ready to incur any possible side effects of the modules, it can call <var>A</var>.<emu-xref aoid="Evaluate" id="_ref_8878"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref>(), which will complete successfully, returning a Promise resolving to <emu-val>undefined</emu-val> (again by assumption), recursively having evaluated first <var>C</var> and then <var>B</var>. Each module's <var class="field">[[Status]]</var> at this point will be <emu-const>evaluated</emu-const>.</p>
|
|
|
|
<p>Consider then cases involving linking errors, after a successful call to <var>A</var>.<emu-xref aoid="LoadRequestedModules" id="_ref_8879"><a href="ecmascript-language-scripts-and-modules.html#abstract-loadrequestedmodules">LoadRequestedModules</a></emu-xref>(). If <emu-xref aoid="InnerModuleLinking" id="_ref_8880"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLinking">InnerModuleLinking</a></emu-xref> of <var>C</var> succeeds but, thereafter, fails for <var>B</var>, for example because it imports something that <var>C</var> does not provide, then the original <var>A</var>.<emu-xref aoid="Link" id="_ref_8881"><a href="ecmascript-language-scripts-and-modules.html#abstract-link">Link</a></emu-xref>() will fail, and both <var>A</var> and <var>B</var>'s <var class="field">[[Status]]</var> remain <emu-const>unlinked</emu-const>. <var>C</var>'s <var class="field">[[Status]]</var> has become <emu-const>linked</emu-const>, though.</p>
|
|
|
|
<p>Finally, consider a case involving evaluation errors after a successful call to <emu-xref aoid="Link" id="_ref_8882"><a href="ecmascript-language-scripts-and-modules.html#abstract-link">Link</a></emu-xref>(). If <emu-xref aoid="InnerModuleEvaluation" id="_ref_8883"><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation">InnerModuleEvaluation</a></emu-xref> of <var>C</var> succeeds but, thereafter, fails for <var>B</var>, for example because <var>B</var> contains code that throws an exception, then the original <var>A</var>.<emu-xref aoid="Evaluate" id="_ref_8884"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref>() will fail, returning a rejected Promise. The resulting exception will be recorded in both <var>A</var> and <var>B</var>'s <var class="field">[[EvaluationError]]</var> fields, and their <var class="field">[[Status]]</var> will become <emu-const>evaluated</emu-const>. <var>C</var> will also become <emu-const>evaluated</emu-const> but, in contrast to <var>A</var> and <var>B</var>, will remain without an <var class="field">[[EvaluationError]]</var>, as it successfully completed evaluation. Storing the exception ensures that any time a <emu-xref href="#host" id="_ref_8885"><a href="overview.html#host">host</a></emu-xref> tries to reuse <var>A</var> or <var>B</var> by calling their <emu-xref aoid="Evaluate" id="_ref_8886"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref>() method, it will encounter the same exception. (<emu-xref href="#host" id="_ref_8887"><a href="overview.html#host">Hosts</a></emu-xref> are not required to reuse <emu-xref href="#cyclic-module-record" id="_ref_8888"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Records</a></emu-xref>; similarly, <emu-xref href="#host" id="_ref_8889"><a href="overview.html#host">hosts</a></emu-xref> are not required to expose the exception objects thrown by these methods. However, the specification enables such uses.)</p>
|
|
|
|
<p>Now consider a different type of error condition:</p>
|
|
|
|
<emu-figure id="figure-module-graph-missing" caption="A module graph with an unresolvable module"><figure><figcaption>Figure 3: A module graph with an unresolvable module</figcaption>
|
|
<img alt="A module graph in which module A depends on a missing (unresolvable) module, represented by ???" width="60" height="121" src="../img/module-graph-missing.svg">
|
|
</figure></emu-figure>
|
|
|
|
<p>In this scenario, module <var>A</var> declares a dependency on some other module, but no <emu-xref href="#sec-abstract-module-records" id="_ref_8890"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref> exists for that module, i.e. <emu-xref aoid="HostLoadImportedModule" id="_ref_8891"><a href="ecmascript-language-scripts-and-modules.html#sec-HostLoadImportedModule">HostLoadImportedModule</a></emu-xref> calls <emu-xref aoid="FinishLoadingImportedModule" id="_ref_8892"><a href="ecmascript-language-scripts-and-modules.html#sec-FinishLoadingImportedModule">FinishLoadingImportedModule</a></emu-xref> with an exception when asked for it. This could occur for a variety of reasons, such as the corresponding resource not existing, or the resource existing but <emu-xref aoid="ParseModule" id="_ref_8893"><a href="ecmascript-language-scripts-and-modules.html#sec-parsemodule">ParseModule</a></emu-xref> returning some errors when trying to parse the resulting source text. <emu-xref href="#host" id="_ref_8894"><a href="overview.html#host">Hosts</a></emu-xref> can choose to expose the cause of failure via the completion they pass to <emu-xref aoid="FinishLoadingImportedModule" id="_ref_8895"><a href="ecmascript-language-scripts-and-modules.html#sec-FinishLoadingImportedModule">FinishLoadingImportedModule</a></emu-xref>. In any case, this exception causes a loading failure, which results in <var>A</var>'s <var class="field">[[Status]]</var> remaining <emu-const>new</emu-const>.</p>
|
|
|
|
<p>The difference here between loading, linking and evaluation errors is due to the following characteristic:</p>
|
|
<ul>
|
|
<li><emu-xref aoid="Evaluation" id="_ref_8896"><a href="syntax-directed-operations.html#sec-evaluation">Evaluation</a></emu-xref> must be only performed once, as it can cause side effects; it is thus important to remember whether evaluation has already been performed, even if unsuccessfully. (In the error case, it makes sense to also remember the exception because otherwise subsequent <emu-xref aoid="Evaluate" id="_ref_8897"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref>() calls would have to synthesize a new one.)</li>
|
|
<li>Linking, on the other hand, is side-effect-free, and thus even if it fails, it can be retried at a later time with no issues.</li>
|
|
<li>Loading closely interacts with the <emu-xref href="#host" id="_ref_8898"><a href="overview.html#host">host</a></emu-xref>, and it may be desirable for some of them to allow users to retry failed loads (for example, if the failure is caused by temporarily bad network conditions).</li>
|
|
</ul>
|
|
|
|
<p>Now, consider a module graph with a cycle:</p>
|
|
|
|
<emu-figure id="figure-module-graph-cycle" caption="A cyclic module graph"><figure><figcaption>Figure 4: A cyclic module graph</figcaption>
|
|
<img alt="A module graph in which module A depends on module B and C, but module B also depends on module A" width="181" height="121" src="../img/module-graph-cycle.svg">
|
|
</figure></emu-figure>
|
|
|
|
<p>Here we assume that the entry point is module <var>A</var>, so that the <emu-xref href="#host" id="_ref_8899"><a href="overview.html#host">host</a></emu-xref> proceeds by calling <var>A</var>.<emu-xref aoid="LoadRequestedModules" id="_ref_8900"><a href="ecmascript-language-scripts-and-modules.html#abstract-loadrequestedmodules">LoadRequestedModules</a></emu-xref>(), which performs <emu-xref aoid="InnerModuleLoading" id="_ref_8901"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLoading">InnerModuleLoading</a></emu-xref> on <var>A</var>. This in turn calls <emu-xref aoid="InnerModuleLoading" id="_ref_8902"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLoading">InnerModuleLoading</a></emu-xref> on <var>B</var> and <var>C</var>. Because of the cycle, this again triggers <emu-xref aoid="InnerModuleLoading" id="_ref_8903"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLoading">InnerModuleLoading</a></emu-xref> on <var>A</var>, but at this point it is a no-op since <var>A</var>'s dependencies loading has already been triggered during this <emu-xref aoid="LoadRequestedModules" id="_ref_8904"><a href="ecmascript-language-scripts-and-modules.html#abstract-loadrequestedmodules">LoadRequestedModules</a></emu-xref> process. When all the modules in the graph have been successfully loaded, their <var class="field">[[Status]]</var> transitions from <emu-const>new</emu-const> to <emu-const>unlinked</emu-const> at the same time.</p>
|
|
|
|
<p>Then the <emu-xref href="#host" id="_ref_8905"><a href="overview.html#host">host</a></emu-xref> proceeds by calling <var>A</var>.<emu-xref aoid="Link" id="_ref_8906"><a href="ecmascript-language-scripts-and-modules.html#abstract-link">Link</a></emu-xref>(), which performs <emu-xref aoid="InnerModuleLinking" id="_ref_8907"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLinking">InnerModuleLinking</a></emu-xref> on <var>A</var>. This in turn calls <emu-xref aoid="InnerModuleLinking" id="_ref_8908"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLinking">InnerModuleLinking</a></emu-xref> on <var>B</var>. Because of the cycle, this again triggers <emu-xref aoid="InnerModuleLinking" id="_ref_8909"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLinking">InnerModuleLinking</a></emu-xref> on <var>A</var>, but at this point it is a no-op since <var>A</var>.<var class="field">[[Status]]</var> is already <emu-const>linking</emu-const>. <var>B</var>.<var class="field">[[Status]]</var> itself remains <emu-const>linking</emu-const> when control gets back to <var>A</var> and <emu-xref aoid="InnerModuleLinking" id="_ref_8910"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLinking">InnerModuleLinking</a></emu-xref> is triggered on <var>C</var>. After this returns with <var>C</var>.<var class="field">[[Status]]</var> being <emu-const>linked</emu-const>, both <var>A</var> and <var>B</var> transition from <emu-const>linking</emu-const> to <emu-const>linked</emu-const> together; this is by design, since they form a strongly connected component. It's possible to transition the status of modules in the same SCC at the same time because during this phase the module graph is traversed with a depth-first search.</p>
|
|
|
|
<p>An analogous story occurs for the evaluation phase of a cyclic module graph, in the success case.</p>
|
|
|
|
<p>Now consider a case where <var>A</var> has a linking error; for example, it tries to import a binding from <var>C</var> that does not exist. In that case, the above steps still occur, including the early return from the second call to <emu-xref aoid="InnerModuleLinking" id="_ref_8911"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLinking">InnerModuleLinking</a></emu-xref> on <var>A</var>. However, once we unwind back to the original <emu-xref aoid="InnerModuleLinking" id="_ref_8912"><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLinking">InnerModuleLinking</a></emu-xref> on <var>A</var>, it fails during <emu-xref aoid="InitializeEnvironment" id="_ref_8913"><a href="ecmascript-language-scripts-and-modules.html#abstract-initializeenvironment">InitializeEnvironment</a></emu-xref>, namely right after <var>C</var>.<emu-xref aoid="ResolveExport" id="_ref_8914"><a href="ecmascript-language-scripts-and-modules.html#abstract-resolveexport">ResolveExport</a></emu-xref>(). The thrown <emu-val>SyntaxError</emu-val> exception propagates up to <var>A</var>.<emu-xref aoid="Link" id="_ref_8915"><a href="ecmascript-language-scripts-and-modules.html#abstract-link">Link</a></emu-xref>, which resets all modules that are currently on its <var>stack</var> (these are always exactly the modules that are still <emu-const>linking</emu-const>). Hence both <var>A</var> and <var>B</var> become <emu-const>unlinked</emu-const>. Note that <var>C</var> is left as <emu-const>linked</emu-const>.</p>
|
|
|
|
<p>Alternatively, consider a case where <var>A</var> has an evaluation error; for example, its source code throws an exception. In that case, the evaluation-time analogue of the above steps still occurs, including the early return from the second call to <emu-xref aoid="InnerModuleEvaluation" id="_ref_8916"><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation">InnerModuleEvaluation</a></emu-xref> on <var>A</var>. However, once we unwind back to the original <emu-xref aoid="InnerModuleEvaluation" id="_ref_8917"><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation">InnerModuleEvaluation</a></emu-xref> on <var>A</var>, it fails by assumption. The exception thrown propagates up to <var>A</var>.<emu-xref aoid="Evaluate" id="_ref_8918"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref>(), which records the error in all modules that are currently on its <var>stack</var> (i.e., the modules that are still <emu-const>evaluating</emu-const>) as well as via <var class="field">[[AsyncParentModules]]</var>, which form a chain for modules which contain or depend on top-level <code>await</code> through the whole dependency graph through the <emu-xref aoid="AsyncModuleExecutionRejected" id="_ref_8919"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-rejected">AsyncModuleExecutionRejected</a></emu-xref> algorithm. Hence both <var>A</var> and <var>B</var> become <emu-const>evaluated</emu-const> and the exception is recorded in both <var>A</var> and <var>B</var>'s <var class="field">[[EvaluationError]]</var> fields, while <var>C</var> is left as <emu-const>evaluated</emu-const> with no <var class="field">[[EvaluationError]]</var>.</p>
|
|
|
|
<p>Lastly, consider a module graph with a cycle, where all modules complete asynchronously:</p>
|
|
<emu-figure id="figure-module-graph-cycle-async" caption="An asynchronous cyclic module graph"><figure><figcaption>Figure 5: An asynchronous cyclic module graph</figcaption>
|
|
<img alt="A module graph in which module A depends on module B and C, module B depends on module D, module C depends on module D and E, and module D depends on module A" width="241" height="211" src="../img/module-graph-cycle-async.svg">
|
|
</figure></emu-figure>
|
|
<p>Loading and linking happen as before, and all modules end up with <var class="field">[[Status]]</var> set to <emu-const>linked</emu-const>.</p>
|
|
|
|
<p>Calling <var>A</var>.<emu-xref aoid="Evaluate" id="_ref_8920"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref>() calls <emu-xref aoid="InnerModuleEvaluation" id="_ref_8921"><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation">InnerModuleEvaluation</a></emu-xref> on <var>A</var>, <var>B</var>, and <var>D</var>, which all transition to <emu-const>evaluating</emu-const>. Then <emu-xref aoid="InnerModuleEvaluation" id="_ref_8922"><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation">InnerModuleEvaluation</a></emu-xref> is called on <var>A</var> again, which is a no-op because it is already <emu-const>evaluating</emu-const>. At this point, <var>D</var>.<var class="field">[[PendingAsyncDependencies]]</var> is 0, so <emu-xref aoid="ExecuteAsyncModule" id="_ref_8923"><a href="ecmascript-language-scripts-and-modules.html#sec-execute-async-module">ExecuteAsyncModule</a></emu-xref>(<var>D</var>) is called and we call <var>D</var>.<emu-xref aoid="ExecuteModule" id="_ref_8924"><a href="ecmascript-language-scripts-and-modules.html#abstract-executemodule">ExecuteModule</a></emu-xref> with a new PromiseCapability tracking the asynchronous execution of <var>D</var>. We unwind back to the <emu-xref aoid="InnerModuleEvaluation" id="_ref_8925"><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation">InnerModuleEvaluation</a></emu-xref> on <var>B</var>, setting <var>B</var>.<var class="field">[[PendingAsyncDependencies]]</var> to 1 and <var>B</var>.<var class="field">[[AsyncEvaluationOrder]]</var> to 1. We unwind back to the original <emu-xref aoid="InnerModuleEvaluation" id="_ref_8926"><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation">InnerModuleEvaluation</a></emu-xref> on <var>A</var>, setting <var>A</var>.<var class="field">[[PendingAsyncDependencies]]</var> to 1. In the next iteration of the loop over <var>A</var>'s dependencies, we call <emu-xref aoid="InnerModuleEvaluation" id="_ref_8927"><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation">InnerModuleEvaluation</a></emu-xref> on <var>C</var> and thus on <var>D</var> (again a no-op) and <var>E</var>. As <var>E</var> has no dependencies and is not part of a cycle, we call <emu-xref aoid="ExecuteAsyncModule" id="_ref_8928"><a href="ecmascript-language-scripts-and-modules.html#sec-execute-async-module">ExecuteAsyncModule</a></emu-xref>(<var>E</var>) in the same manner as <var>D</var> and <var>E</var> is immediately removed from the stack. We unwind once more to the <emu-xref aoid="InnerModuleEvaluation" id="_ref_8929"><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation">InnerModuleEvaluation</a></emu-xref> on <var>C</var>, setting <var>C</var>.<var class="field">[[AsyncEvaluationOrder]]</var> to 3. Now we finish the loop over <var>A</var>'s dependencies, set <var>A</var>.<var class="field">[[AsyncEvaluationOrder]]</var> to 4, and remove the entire strongly connected component from the stack, transitioning all of the modules to <emu-const>evaluating-async</emu-const> at once. At this point, the fields of the modules are as given in <emu-xref href="#table-module-graph-cycle-async-fields-1" id="_ref_490"><a href="ecmascript-language-scripts-and-modules.html#table-module-graph-cycle-async-fields-1">Table 43</a></emu-xref>.</p>
|
|
|
|
<emu-table id="table-module-graph-cycle-async-fields-1" caption="Module fields after the initial Evaluate() call"><figure><figcaption>Table 43: Module fields after the initial <emu-xref aoid="Evaluate" id="_ref_8930"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref>() call</figcaption>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th class="corner-cell">
|
|
<span class="column">Field</span>
|
|
<div class="slash">
|
|
</div>
|
|
<span class="row">Module</span>
|
|
</th>
|
|
<th><var>A</var></th>
|
|
<th><var>B</var></th>
|
|
<th><var>C</var></th>
|
|
<th><var>D</var></th>
|
|
<th><var>E</var></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<th><var class="field">[[DFSAncestorIndex]]</var></th>
|
|
<td>0</td>
|
|
<td>0</td>
|
|
<td>0</td>
|
|
<td>0</td>
|
|
<td>4</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[Status]]</var></th>
|
|
<td><emu-const>evaluating-async</emu-const></td>
|
|
<td><emu-const>evaluating-async</emu-const></td>
|
|
<td><emu-const>evaluating-async</emu-const></td>
|
|
<td><emu-const>evaluating-async</emu-const></td>
|
|
<td><emu-const>evaluating-async</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncEvaluationOrder]]</var></th>
|
|
<td>4</td>
|
|
<td>1</td>
|
|
<td>3</td>
|
|
<td>0</td>
|
|
<td>2</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncParentModules]]</var></th>
|
|
<td>« »</td>
|
|
<td>« <var>A</var> »</td>
|
|
<td>« <var>A</var> »</td>
|
|
<td>« <var>B</var>, <var>C</var> »</td>
|
|
<td>« <var>C</var> »</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[PendingAsyncDependencies]]</var></th>
|
|
<td>2 (<var>B</var> and <var>C</var>)</td>
|
|
<td>1 (<var>D</var>)</td>
|
|
<td>2 (<var>D</var> and <var>E</var>)</td>
|
|
<td>0</td>
|
|
<td>0</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
|
|
<p>Let us assume that <var>E</var> finishes executing first. When that happens, <emu-xref aoid="AsyncModuleExecutionFulfilled" id="_ref_8931"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-fulfilled">AsyncModuleExecutionFulfilled</a></emu-xref> is called, <var>E</var>.<var class="field">[[Status]]</var> is set to <emu-const>evaluated</emu-const> and <var>C</var>.<var class="field">[[PendingAsyncDependencies]]</var> is decremented to become 1. The fields of the updated modules are as given in <emu-xref href="#table-module-graph-cycle-async-fields-2" id="_ref_491"><a href="ecmascript-language-scripts-and-modules.html#table-module-graph-cycle-async-fields-2">Table 44</a></emu-xref>.</p>
|
|
|
|
<emu-table id="table-module-graph-cycle-async-fields-2" caption="Module fields after module _E_ finishes executing"><figure><figcaption>Table 44: Module fields after module <var>E</var> finishes executing</figcaption>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th class="corner-cell">
|
|
<span class="column">Field</span>
|
|
<div class="slash">
|
|
</div>
|
|
<span class="row">Module</span>
|
|
</th>
|
|
<th><var>C</var></th>
|
|
<th><var>E</var></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<th><var class="field">[[DFSAncestorIndex]]</var></th>
|
|
<td>0</td>
|
|
<td>4</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[Status]]</var></th>
|
|
<td><emu-const>evaluating-async</emu-const></td>
|
|
<td><emu-const>evaluated</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncEvaluationOrder]]</var></th>
|
|
<td>3</td>
|
|
<td><emu-const>done</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncParentModules]]</var></th>
|
|
<td>« <var>A</var> »</td>
|
|
<td>« <var>C</var> »</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[PendingAsyncDependencies]]</var></th>
|
|
<td>1 (<var>D</var>)</td>
|
|
<td>0</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
|
|
<p><var>D</var> is next to finish (as it was the only module that was still executing). When that happens, <emu-xref aoid="AsyncModuleExecutionFulfilled" id="_ref_8932"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-fulfilled">AsyncModuleExecutionFulfilled</a></emu-xref> is called again and <var>D</var>.<var class="field">[[Status]]</var> is set to <emu-const>evaluated</emu-const>. Its ancestors available for execution are <var>B</var> (whose <var class="field">[[AsyncEvaluationOrder]]</var> is 1) and <var>C</var> (whose <var class="field">[[AsyncEvaluationOrder]]</var> is 3), thus <var>B</var> will be handled first: <var>B</var>.<var class="field">[[PendingAsyncDependencies]]</var> is decremented to become 0, <emu-xref aoid="ExecuteAsyncModule" id="_ref_8933"><a href="ecmascript-language-scripts-and-modules.html#sec-execute-async-module">ExecuteAsyncModule</a></emu-xref> is called on <var>B</var>, and it starts executing. <var>C</var>.<var class="field">[[PendingAsyncDependencies]]</var> is also decremented to become 0, and <var>C</var> starts executing (potentially in parallel to <var>B</var> if <var>B</var> contains an <code>await</code>). The fields of the updated modules are as given in <emu-xref href="#table-module-graph-cycle-async-fields-3" id="_ref_492"><a href="ecmascript-language-scripts-and-modules.html#table-module-graph-cycle-async-fields-3">Table 45</a></emu-xref>.</p>
|
|
|
|
<emu-table id="table-module-graph-cycle-async-fields-3" caption="Module fields after module _D_ finishes executing"><figure><figcaption>Table 45: Module fields after module <var>D</var> finishes executing</figcaption>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th class="corner-cell">
|
|
<span class="column">Field</span>
|
|
<div class="slash">
|
|
</div>
|
|
<span class="row">Module</span>
|
|
</th>
|
|
<th><var>B</var></th>
|
|
<th><var>C</var></th>
|
|
<th><var>D</var></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<th><var class="field">[[DFSAncestorIndex]]</var></th>
|
|
<td>0</td>
|
|
<td>0</td>
|
|
<td>0</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[Status]]</var></th>
|
|
<td><emu-const>evaluating-async</emu-const></td>
|
|
<td><emu-const>evaluating-async</emu-const></td>
|
|
<td><emu-const>evaluated</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncEvaluationOrder]]</var></th>
|
|
<td>1</td>
|
|
<td>3</td>
|
|
<td><emu-const>done</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncParentModules]]</var></th>
|
|
<td>« <var>A</var> »</td>
|
|
<td>« <var>A</var> »</td>
|
|
<td>« <var>B</var>, <var>C</var> »</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[PendingAsyncDependencies]]</var></th>
|
|
<td>0</td>
|
|
<td>0</td>
|
|
<td>0</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
|
|
<p>Let us assume that <var>C</var> finishes executing next. When that happens, <emu-xref aoid="AsyncModuleExecutionFulfilled" id="_ref_8934"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-fulfilled">AsyncModuleExecutionFulfilled</a></emu-xref> is called again, <var>C</var>.<var class="field">[[Status]]</var> is set to <emu-const>evaluated</emu-const> and <var>A</var>.<var class="field">[[PendingAsyncDependencies]]</var> is decremented to become 1. The fields of the updated modules are as given in <emu-xref href="#table-module-graph-cycle-async-fields-4" id="_ref_493"><a href="ecmascript-language-scripts-and-modules.html#table-module-graph-cycle-async-fields-4">Table 46</a></emu-xref>.</p>
|
|
|
|
<emu-table id="table-module-graph-cycle-async-fields-4" caption="Module fields after module _C_ finishes executing"><figure><figcaption>Table 46: Module fields after module <var>C</var> finishes executing</figcaption>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th class="corner-cell">
|
|
<span class="column">Field</span>
|
|
<div class="slash">
|
|
</div>
|
|
<span class="row">Module</span>
|
|
</th>
|
|
<th><var>A</var></th>
|
|
<th><var>C</var></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<th><var class="field">[[DFSAncestorIndex]]</var></th>
|
|
<td>0</td>
|
|
<td>0</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[Status]]</var></th>
|
|
<td><emu-const>evaluating-async</emu-const></td>
|
|
<td><emu-const>evaluated</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncEvaluationOrder]]</var></th>
|
|
<td>4</td>
|
|
<td><emu-const>done</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncParentModules]]</var></th>
|
|
<td>« »</td>
|
|
<td>« <var>A</var> »</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[PendingAsyncDependencies]]</var></th>
|
|
<td>1 (<var>B</var>)</td>
|
|
<td>0</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
|
|
<p>Then, <var>B</var> finishes executing. When that happens, <emu-xref aoid="AsyncModuleExecutionFulfilled" id="_ref_8935"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-fulfilled">AsyncModuleExecutionFulfilled</a></emu-xref> is called again and <var>B</var>.<var class="field">[[Status]]</var> is set to <emu-const>evaluated</emu-const>. <var>A</var>.<var class="field">[[PendingAsyncDependencies]]</var> is decremented to become 0, so <emu-xref aoid="ExecuteAsyncModule" id="_ref_8936"><a href="ecmascript-language-scripts-and-modules.html#sec-execute-async-module">ExecuteAsyncModule</a></emu-xref> is called and it starts executing. The fields of the updated modules are as given in <emu-xref href="#table-module-graph-cycle-async-fields-5" id="_ref_494"><a href="ecmascript-language-scripts-and-modules.html#table-module-graph-cycle-async-fields-5">Table 47</a></emu-xref>.</p>
|
|
|
|
<emu-table id="table-module-graph-cycle-async-fields-5" caption="Module fields after module _B_ finishes executing"><figure><figcaption>Table 47: Module fields after module <var>B</var> finishes executing</figcaption>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th class="corner-cell">
|
|
<span class="column">Field</span>
|
|
<div class="slash">
|
|
</div>
|
|
<span class="row">Module</span>
|
|
</th>
|
|
<th><var>A</var></th>
|
|
<th><var>B</var></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<th><var class="field">[[DFSAncestorIndex]]</var></th>
|
|
<td>0</td>
|
|
<td>0</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[Status]]</var></th>
|
|
<td><emu-const>evaluating-async</emu-const></td>
|
|
<td><emu-const>evaluated</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncEvaluationOrder]]</var></th>
|
|
<td>4</td>
|
|
<td><emu-const>done</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncParentModules]]</var></th>
|
|
<td>« »</td>
|
|
<td>« <var>A</var> »</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[PendingAsyncDependencies]]</var></th>
|
|
<td>0</td>
|
|
<td>0</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
|
|
<p>Finally, <var>A</var> finishes executing. When that happens, <emu-xref aoid="AsyncModuleExecutionFulfilled" id="_ref_8937"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-fulfilled">AsyncModuleExecutionFulfilled</a></emu-xref> is called again and <var>A</var>.<var class="field">[[Status]]</var> is set to <emu-const>evaluated</emu-const>. At this point, the Promise in <var>A</var>.<var class="field">[[TopLevelCapability]]</var> (which was returned from <var>A</var>.<emu-xref aoid="Evaluate" id="_ref_8938"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref>()) is resolved, and this concludes the handling of this module graph. The fields of the updated module are as given in <emu-xref href="#table-module-graph-cycle-async-fields-6" id="_ref_495"><a href="ecmascript-language-scripts-and-modules.html#table-module-graph-cycle-async-fields-6">Table 48</a></emu-xref>.</p>
|
|
|
|
<emu-table id="table-module-graph-cycle-async-fields-6" caption="Module fields after module _A_ finishes executing"><figure><figcaption>Table 48: Module fields after module <var>A</var> finishes executing</figcaption>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th class="corner-cell">
|
|
<span class="column">Field</span>
|
|
<div class="slash">
|
|
</div>
|
|
<span class="row">Module</span>
|
|
</th>
|
|
<th><var>A</var></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<th><var class="field">[[DFSAncestorIndex]]</var></th>
|
|
<td>0</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[Status]]</var></th>
|
|
<td><emu-const>evaluated</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncEvaluationOrder]]</var></th>
|
|
<td><emu-const>done</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncParentModules]]</var></th>
|
|
<td>« »</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[PendingAsyncDependencies]]</var></th>
|
|
<td>0</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
|
|
<p>Alternatively, consider a failure case where <var>C</var> fails execution and returns an error before <var>B</var> has finished executing. When that happens, <emu-xref aoid="AsyncModuleExecutionRejected" id="_ref_8939"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-rejected">AsyncModuleExecutionRejected</a></emu-xref> is called, which sets <var>C</var>.<var class="field">[[Status]]</var> to <emu-const>evaluated</emu-const> and <var>C</var>.<var class="field">[[EvaluationError]]</var> to the error. It then propagates this error to all of the AsyncParentModules by performing <emu-xref aoid="AsyncModuleExecutionRejected" id="_ref_8940"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-rejected">AsyncModuleExecutionRejected</a></emu-xref> on each of them. The fields of the updated modules are as given in <emu-xref href="#table-module-graph-cycle-async-fields-7" id="_ref_496"><a href="ecmascript-language-scripts-and-modules.html#table-module-graph-cycle-async-fields-7">Table 49</a></emu-xref>.</p>
|
|
|
|
<emu-table id="table-module-graph-cycle-async-fields-7" caption="Module fields after module _C_ finishes with an error"><figure><figcaption>Table 49: Module fields after module <var>C</var> finishes with an error</figcaption>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th class="corner-cell">
|
|
<span class="column">Field</span>
|
|
<div class="slash">
|
|
</div>
|
|
<span class="row">Module</span>
|
|
</th>
|
|
<th><var>A</var></th>
|
|
<th><var>C</var></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<th><var class="field">[[DFSAncestorIndex]]</var></th>
|
|
<td>0</td>
|
|
<td>0</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[Status]]</var></th>
|
|
<td><emu-const>evaluated</emu-const></td>
|
|
<td><emu-const>evaluated</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncEvaluationOrder]]</var></th>
|
|
<td><emu-const>done</emu-const></td>
|
|
<td><emu-const>done</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncParentModules]]</var></th>
|
|
<td>« »</td>
|
|
<td>« <var>A</var> »</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[PendingAsyncDependencies]]</var></th>
|
|
<td>1 (<var>B</var>)</td>
|
|
<td>0</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[EvaluationError]]</var></th>
|
|
<td><emu-const>empty</emu-const></td>
|
|
<td><var>C</var>'s evaluation error</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
|
|
<p><var>A</var> will be rejected with the same error as <var>C</var> since <var>C</var> will call <emu-xref aoid="AsyncModuleExecutionRejected" id="_ref_8941"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-rejected">AsyncModuleExecutionRejected</a></emu-xref> on <var>A</var> with <var>C</var>'s error. <var>A</var>.<var class="field">[[Status]]</var> is set to <emu-const>evaluated</emu-const>. At this point the Promise in <var>A</var>.<var class="field">[[TopLevelCapability]]</var> (which was returned from <var>A</var>.<emu-xref aoid="Evaluate" id="_ref_8942"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref>()) is rejected. The fields of the updated module are as given in <emu-xref href="#table-module-graph-cycle-async-fields-8" id="_ref_497"><a href="ecmascript-language-scripts-and-modules.html#table-module-graph-cycle-async-fields-8">Table 50</a></emu-xref>.</p>
|
|
|
|
<emu-table id="table-module-graph-cycle-async-fields-8" caption="Module fields after module _A_ is rejected"><figure><figcaption>Table 50: Module fields after module <var>A</var> is rejected</figcaption>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th class="corner-cell">
|
|
<span class="column">Field</span>
|
|
<div class="slash">
|
|
</div>
|
|
<span class="row">Module</span>
|
|
</th>
|
|
<th><var>A</var></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<th><var class="field">[[DFSAncestorIndex]]</var></th>
|
|
<td>0</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[Status]]</var></th>
|
|
<td><emu-const>evaluated</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncEvaluationOrder]]</var></th>
|
|
<td><emu-const>done</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncParentModules]]</var></th>
|
|
<td>« »</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[PendingAsyncDependencies]]</var></th>
|
|
<td>0</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[EvaluationError]]</var></th>
|
|
|
|
<td><var>C</var>'s <emu-xref aoid="Evaluation" id="_ref_8943"><a href="syntax-directed-operations.html#sec-evaluation">Evaluation</a></emu-xref> Error</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
|
|
<p>Then, <var>B</var> finishes executing without an error. When that happens, <emu-xref aoid="AsyncModuleExecutionFulfilled" id="_ref_8944"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-fulfilled">AsyncModuleExecutionFulfilled</a></emu-xref> is called again and <var>B</var>.<var class="field">[[Status]]</var> is set to <emu-const>evaluated</emu-const>. <emu-xref aoid="GatherAvailableAncestors" id="_ref_8945"><a href="ecmascript-language-scripts-and-modules.html#sec-gather-available-ancestors">GatherAvailableAncestors</a></emu-xref> is called on <var>B</var>. However, <var>A</var>.<var class="field">[[CycleRoot]]</var> is <var>A</var> which has an evaluation error, so it will not be added to the returned <var>sortedExecList</var> and <emu-xref aoid="AsyncModuleExecutionFulfilled" id="_ref_8946"><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-fulfilled">AsyncModuleExecutionFulfilled</a></emu-xref> will return without further processing. Any future importer of <var>B</var> will resolve the rejection of <var>B</var>.<var class="field">[[CycleRoot]]</var>.<var class="field">[[EvaluationError]]</var> from the evaluation error from <var>C</var> that was set on the cycle root <var>A</var>. The fields of the updated modules are as given in <emu-xref href="#table-module-graph-cycle-async-fields-9" id="_ref_498"><a href="ecmascript-language-scripts-and-modules.html#table-module-graph-cycle-async-fields-9">Table 51</a></emu-xref>.</p>
|
|
|
|
<emu-table id="table-module-graph-cycle-async-fields-9" caption="Module fields after module _B_ finishes executing in an erroring graph"><figure><figcaption>Table 51: Module fields after module <var>B</var> finishes executing in an erroring graph</figcaption>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th class="corner-cell">
|
|
<span class="column">Field</span>
|
|
<div class="slash">
|
|
</div>
|
|
<span class="row">Module</span>
|
|
</th>
|
|
<th><var>A</var></th>
|
|
<th><var>B</var></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<th><var class="field">[[DFSAncestorIndex]]</var></th>
|
|
<td>0</td>
|
|
<td>0</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[Status]]</var></th>
|
|
<td><emu-const>evaluated</emu-const></td>
|
|
<td><emu-const>evaluated</emu-const></td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncEvaluationOrder]]</var></th>
|
|
<td>4</td>
|
|
<td>1</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[AsyncParentModules]]</var></th>
|
|
<td>« »</td>
|
|
<td>« <var>A</var> »</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[PendingAsyncDependencies]]</var></th>
|
|
<td>0</td>
|
|
<td>0</td>
|
|
</tr>
|
|
<tr>
|
|
<th><var class="field">[[EvaluationError]]</var></th>
|
|
<td><var>C</var>'s <emu-xref aoid="Evaluation" id="_ref_8947"><a href="syntax-directed-operations.html#sec-evaluation">Evaluation</a></emu-xref> Error</td>
|
|
<td><emu-const>empty</emu-const></td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-source-text-module-records">
|
|
<h1><span class="secnum">16.2.1.7</span> Source Text Module Records</h1>
|
|
|
|
<p>A <dfn id="sourctextmodule-record" variants="Source Text Module Records" tabindex="-1">Source Text Module Record</dfn> is used to represent information about a module that was defined from <emu-xref href="#sec-source-text" id="_ref_8948"><a href="ecmascript-language-source-code.html#sec-source-text">ECMAScript source text</a></emu-xref> (<emu-xref href="#sec-ecmascript-language-source-code" id="_ref_499"><a href="ecmascript-language-source-code.html#sec-ecmascript-language-source-code">11</a></emu-xref>) that was parsed using the <emu-xref href="#sec-context-free-grammars" id="_ref_8949"><a href="notational-conventions.html#sec-context-free-grammars">goal symbol</a></emu-xref> <emu-nt id="_ref_23500"><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt>. Its fields contain digested information about the names that are imported and exported by the module, and its concrete methods use these digests to link and evaluate the module.</p>
|
|
|
|
<p>A <emu-xref href="#sourctextmodule-record" id="_ref_8950"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Record</a></emu-xref> can exist in a module graph with other subclasses of the abstract <emu-xref href="#sec-abstract-module-records" id="_ref_8951"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref> type, and can participate in cycles with other subclasses of the <emu-xref href="#cyclic-module-record" id="_ref_8952"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> type.</p>
|
|
|
|
<p>In addition to the fields defined in <emu-xref href="#table-cyclic-module-fields" id="_ref_500"><a href="ecmascript-language-scripts-and-modules.html#table-cyclic-module-fields">Table 40</a></emu-xref>, <emu-xref href="#sourctextmodule-record" id="_ref_8953"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Records</a></emu-xref> have the additional fields listed in <emu-xref href="#table-additional-fields-of-source-text-module-records" id="_ref_501"><a href="ecmascript-language-scripts-and-modules.html#table-additional-fields-of-source-text-module-records">Table 52</a></emu-xref>. Each of these fields is initially set in <emu-xref aoid="ParseModule" id="_ref_8954"><a href="ecmascript-language-scripts-and-modules.html#sec-parsemodule">ParseModule</a></emu-xref>.</p>
|
|
<emu-table id="table-additional-fields-of-source-text-module-records" caption="Additional Fields of Source Text Module Records" oldids="table-38"><figure><figcaption>Table 52: Additional Fields of <emu-xref href="#sourctextmodule-record" id="_ref_8955"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Records</a></emu-xref></figcaption><span id="table-38"></span>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>
|
|
Field Name
|
|
</th>
|
|
<th>
|
|
Value Type
|
|
</th>
|
|
<th>
|
|
Meaning
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<td>
|
|
<var class="field">[[ECMAScriptCode]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-syntactic-grammar" id="_ref_8956"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
The result of parsing the source text of this module using <emu-nt id="_ref_23501"><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt> as the <emu-xref href="#sec-context-free-grammars" id="_ref_8957"><a href="notational-conventions.html#sec-context-free-grammars">goal symbol</a></emu-xref>.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[Context]]</var>
|
|
</td>
|
|
<td>
|
|
an <emu-xref href="#ecmascript-code-execution-context" id="_ref_8958"><a href="executable-code-and-execution-contexts.html#ecmascript-code-execution-context">ECMAScript code execution context</a></emu-xref> or <emu-const>empty</emu-const>
|
|
</td>
|
|
<td>
|
|
The <emu-xref href="#sec-execution-contexts" id="_ref_8959"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution context</a></emu-xref> associated with this module. It is <emu-const>empty</emu-const> until the module's environment has been initialized.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[ImportMeta]]</var>
|
|
</td>
|
|
<td>
|
|
an Object or <emu-const>empty</emu-const>
|
|
</td>
|
|
<td>
|
|
An object exposed through the <code>import.meta</code> meta property. It is <emu-const>empty</emu-const> until it is accessed by ECMAScript code.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[ImportEntries]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8960"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#importentry-record" id="_ref_8961"><a href="ecmascript-language-scripts-and-modules.html#importentry-record">ImportEntry Records</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
A <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8962"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of ImportEntry records derived from the code of this module.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[LocalExportEntries]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8963"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#exportentry-record" id="_ref_8964"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Records</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
A <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8965"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of ExportEntry records derived from the code of this module that correspond to declarations that occur within the module.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[IndirectExportEntries]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8966"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#exportentry-record" id="_ref_8967"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Records</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
A <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8968"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of ExportEntry records derived from the code of this module that correspond to reexported imports that occur within the module or exports from <code>export * as namespace</code> declarations.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[StarExportEntries]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8969"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#exportentry-record" id="_ref_8970"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Records</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
A <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8971"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of ExportEntry records derived from the code of this module that correspond to <code>export *</code> declarations that occur within the module, not including <code>export * as namespace</code> declarations.
|
|
</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
<p>An <dfn id="importentry-record" variants="ImportEntry Records" tabindex="-1">ImportEntry Record</dfn> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8972"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> that digests information about a single declarative import. Each <emu-xref href="#importentry-record" id="_ref_8973"><a href="ecmascript-language-scripts-and-modules.html#importentry-record">ImportEntry Record</a></emu-xref> has the fields defined in <emu-xref href="#table-importentry-record-fields" id="_ref_502"><a href="ecmascript-language-scripts-and-modules.html#table-importentry-record-fields">Table 53</a></emu-xref>:</p>
|
|
<emu-table id="table-importentry-record-fields" caption="ImportEntry Record Fields" oldids="table-39"><figure><figcaption>Table 53: <emu-xref href="#importentry-record" id="_ref_8974"><a href="ecmascript-language-scripts-and-modules.html#importentry-record">ImportEntry Record</a></emu-xref> Fields</figcaption><span id="table-39"></span>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>
|
|
Field Name
|
|
</th>
|
|
<th>
|
|
Value Type
|
|
</th>
|
|
<th>
|
|
Meaning
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<td>
|
|
<var class="field">[[ModuleRequest]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#modulerequest-record" id="_ref_8975"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref>
|
|
</td>
|
|
<td>
|
|
<emu-xref href="#modulerequest-record" id="_ref_8976"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> representing the <emu-nt id="_ref_23502"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleSpecifier">ModuleSpecifier</a></emu-nt> and import attributes of the <emu-nt id="_ref_23503"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt>.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[ImportName]]</var>
|
|
</td>
|
|
<td>
|
|
a String or <emu-const>namespace-object</emu-const>
|
|
</td>
|
|
<td>
|
|
The name under which the desired binding is exported by the module identified by <var class="field">[[ModuleRequest]]</var>. The value <emu-const>namespace-object</emu-const> indicates that the import request is for the target module's namespace object.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[LocalName]]</var>
|
|
</td>
|
|
<td>
|
|
a String
|
|
</td>
|
|
<td>
|
|
The name that is used to locally access the imported value from within the importing module.
|
|
</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
<emu-note><span class="note">Note 1</span><div class="note-contents">
|
|
<p><emu-xref href="#table-import-forms-mapping-to-importentry-records" id="_ref_503"><a href="ecmascript-language-scripts-and-modules.html#table-import-forms-mapping-to-importentry-records">Table 54</a></emu-xref> gives examples of ImportEntry records fields used to represent the syntactic import forms:</p>
|
|
<emu-table id="table-import-forms-mapping-to-importentry-records" caption="Import Forms Mappings to ImportEntry Records" informative="" oldids="table-40"><figure><figcaption>Table 54 (Informative): Import Forms Mappings to <emu-xref href="#importentry-record" id="_ref_8977"><a href="ecmascript-language-scripts-and-modules.html#importentry-record">ImportEntry Records</a></emu-xref></figcaption><span id="table-40"></span>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>
|
|
Import Statement Form
|
|
</th>
|
|
<th>
|
|
<var class="field">[[ModuleRequest]]</var>
|
|
</th>
|
|
<th>
|
|
<var class="field">[[ImportName]]</var>
|
|
</th>
|
|
<th>
|
|
<var class="field">[[LocalName]]</var>
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<td>
|
|
<code>import v from "mod";</code>
|
|
</td>
|
|
<td>
|
|
<emu-val>"mod"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"default"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"v"</emu-val>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>import * as ns from "mod";</code>
|
|
</td>
|
|
<td>
|
|
<emu-val>"mod"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-const>namespace-object</emu-const>
|
|
</td>
|
|
<td>
|
|
<emu-val>"ns"</emu-val>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>import {x} from "mod";</code>
|
|
</td>
|
|
<td>
|
|
<emu-val>"mod"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"x"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"x"</emu-val>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>import {x as v} from "mod";</code>
|
|
</td>
|
|
<td>
|
|
<emu-val>"mod"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"x"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"v"</emu-val>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>import "mod";</code>
|
|
</td>
|
|
<td colspan="3">
|
|
An <emu-xref href="#importentry-record" id="_ref_8978"><a href="ecmascript-language-scripts-and-modules.html#importentry-record">ImportEntry Record</a></emu-xref> is not created.
|
|
</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
</div></emu-note>
|
|
<p>An <dfn id="exportentry-record" variants="ExportEntry Records" tabindex="-1">ExportEntry Record</dfn> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8979"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> that digests information about a single declarative export. Each <emu-xref href="#exportentry-record" id="_ref_8980"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> has the fields defined in <emu-xref href="#table-exportentry-records" id="_ref_504"><a href="ecmascript-language-scripts-and-modules.html#table-exportentry-records">Table 55</a></emu-xref>:</p>
|
|
<emu-table id="table-exportentry-records" caption="ExportEntry Record Fields" oldids="table-41"><figure><figcaption>Table 55: <emu-xref href="#exportentry-record" id="_ref_8981"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> Fields</figcaption><span id="table-41"></span>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>
|
|
Field Name
|
|
</th>
|
|
<th>
|
|
Value Type
|
|
</th>
|
|
<th>
|
|
Meaning
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<td>
|
|
<var class="field">[[ExportName]]</var>
|
|
</td>
|
|
<td>
|
|
a String or <emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
The name used to export this binding by this module.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[ModuleRequest]]</var>
|
|
</td>
|
|
<td>
|
|
a <emu-xref href="#modulerequest-record" id="_ref_8982"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> or <emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
The <emu-xref href="#modulerequest-record" id="_ref_8983"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> representing the <emu-nt id="_ref_23504"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleSpecifier">ModuleSpecifier</a></emu-nt> and import attributes of the <emu-nt id="_ref_23505"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt>. <emu-val>null</emu-val> if the <emu-nt id="_ref_23506"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> does not have a <emu-nt id="_ref_23507"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleSpecifier">ModuleSpecifier</a></emu-nt>.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[ImportName]]</var>
|
|
</td>
|
|
<td>
|
|
a String, <emu-val>null</emu-val>, <emu-const>all</emu-const>, or <emu-const>all-but-default</emu-const>
|
|
</td>
|
|
<td>
|
|
The name under which the desired binding is exported by the module identified by <var class="field">[[ModuleRequest]]</var>. <emu-val>null</emu-val> if the <emu-nt id="_ref_23508"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> does not have a <emu-nt id="_ref_23509"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleSpecifier">ModuleSpecifier</a></emu-nt>. <emu-const>all</emu-const> is used for <code>export * as ns from "mod"</code> declarations. <emu-const>all-but-default</emu-const> is used for <code>export * from "mod"</code> declarations.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<var class="field">[[LocalName]]</var>
|
|
</td>
|
|
<td>
|
|
a String or <emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
The name that is used to locally access the exported value from within the importing module. <emu-val>null</emu-val> if the exported value is not locally accessible from within the module.
|
|
</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
|
<p><emu-xref href="#table-export-forms-mapping-to-exportentry-records" id="_ref_505"><a href="ecmascript-language-scripts-and-modules.html#table-export-forms-mapping-to-exportentry-records">Table 56</a></emu-xref> gives examples of the ExportEntry record fields used to represent the syntactic export forms:</p>
|
|
<emu-table id="table-export-forms-mapping-to-exportentry-records" caption="Export Forms Mappings to ExportEntry Records" informative="" oldids="table-42"><figure><figcaption>Table 56 (Informative): Export Forms Mappings to <emu-xref href="#exportentry-record" id="_ref_8984"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Records</a></emu-xref></figcaption><span id="table-42"></span>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>
|
|
Export Statement Form
|
|
</th>
|
|
<th>
|
|
<var class="field">[[ExportName]]</var>
|
|
</th>
|
|
<th>
|
|
<var class="field">[[ModuleRequest]]</var>
|
|
</th>
|
|
<th>
|
|
<var class="field">[[ImportName]]</var>
|
|
</th>
|
|
<th>
|
|
<var class="field">[[LocalName]]</var>
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<td>
|
|
<code>export var v;</code>
|
|
</td>
|
|
<td>
|
|
<emu-val>"v"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"v"</emu-val>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>export default function f() {}</code>
|
|
</td>
|
|
<td>
|
|
<emu-val>"default"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"f"</emu-val>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>export default function () {}</code>
|
|
</td>
|
|
<td>
|
|
<emu-val>"default"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"*default*"</emu-val>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>export default 42;</code>
|
|
</td>
|
|
<td>
|
|
<emu-val>"default"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"*default*"</emu-val>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>export {x};</code>
|
|
</td>
|
|
<td>
|
|
<emu-val>"x"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"x"</emu-val>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>export {v as x};</code>
|
|
</td>
|
|
<td>
|
|
<emu-val>"x"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"v"</emu-val>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>export {x} from "mod";</code>
|
|
</td>
|
|
<td>
|
|
<emu-val>"x"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"mod"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"x"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>export {v as x} from "mod";</code>
|
|
</td>
|
|
<td>
|
|
<emu-val>"x"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"mod"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"v"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>export * from "mod";</code>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"mod"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-const>all-but-default</emu-const>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>export * as ns from "mod";</code>
|
|
</td>
|
|
<td>
|
|
<emu-val>"ns"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-val>"mod"</emu-val>
|
|
</td>
|
|
<td>
|
|
<emu-const>all</emu-const>
|
|
</td>
|
|
<td>
|
|
<emu-val>null</emu-val>
|
|
</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
</div></emu-note>
|
|
<p>The following definitions specify the required concrete methods and other <emu-xref href="#sec-algorithm-conventions-abstract-operations" id="_ref_8985"><a href="notational-conventions.html#sec-algorithm-conventions-abstract-operations">abstract operations</a></emu-xref> for <emu-xref href="#sourctextmodule-record" id="_ref_8986"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Records</a></emu-xref></p>
|
|
|
|
<emu-clause id="sec-parsemodule" type="abstract operation" aoid="ParseModule">
|
|
<h1><span class="secnum">16.2.1.7.1</span> ParseModule ( <var>sourceText</var>, <var>realm</var>, <var>hostDefined</var> )</h1>
|
|
<p>The abstract operation ParseModule takes arguments <var>sourceText</var> (<emu-xref href="#sec-source-text" id="_ref_8987"><a href="ecmascript-language-source-code.html#sec-source-text">ECMAScript source text</a></emu-xref>), <var>realm</var> (a <emu-xref href="#realm-record" id="_ref_8988"><a href="executable-code-and-execution-contexts.html#realm-record">Realm Record</a></emu-xref>), and <var>hostDefined</var> (anything) and returns a <emu-xref href="#sourctextmodule-record" id="_ref_8989"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Record</a></emu-xref> or a non-empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8990"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-val>SyntaxError</emu-val> objects. It creates a <emu-xref href="#sourctextmodule-record" id="_ref_8991"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Record</a></emu-xref> based upon the result of parsing <var>sourceText</var> as a <emu-nt id="_ref_23510"><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt>. It performs the following steps when called:</p>
|
|
<emu-alg><ol><li>Let <var>body</var> be <emu-xref aoid="ParseText" id="_ref_8992"><a href="ecmascript-language-source-code.html#sec-parsetext">ParseText</a></emu-xref>(<var>sourceText</var>, <emu-nt id="_ref_23511"><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt>).</li><li>If <var>body</var> is a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8993"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of errors, return <var>body</var>.</li><li>Let <var>requestedModules</var> be the <emu-xref aoid="ModuleRequests" id="_ref_8994"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-modulerequests">ModuleRequests</a></emu-xref> of <var>body</var>.</li><li>Let <var>importEntries</var> be the <emu-xref aoid="ImportEntries" id="_ref_8995"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentries">ImportEntries</a></emu-xref> of <var>body</var>.</li><li>Let <var>importedBoundNames</var> be <emu-xref aoid="ImportedLocalNames" id="_ref_8996"><a href="ecmascript-language-scripts-and-modules.html#sec-importedlocalnames">ImportedLocalNames</a></emu-xref>(<var>importEntries</var>).</li><li>Let <var>indirectExportEntries</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8997"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>localExportEntries</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8998"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>starExportEntries</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8999"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>exportEntries</var> be the <emu-xref aoid="ExportEntries" id="_ref_9000"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportentries">ExportEntries</a></emu-xref> of <var>body</var>.</li><li>For each <emu-xref href="#exportentry-record" id="_ref_9001"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> <var>ee</var> of <var>exportEntries</var>, do<ol><li>If <var>ee</var>.<var class="field">[[ModuleRequest]]</var> is <emu-val>null</emu-val>, then<ol><li>If <var>importedBoundNames</var> does not contain <var>ee</var>.<var class="field">[[LocalName]]</var>, then<ol><li>Append <var>ee</var> to <var>localExportEntries</var>.</li></ol></li><li>Else,<ol><li>NOTE: When exporting a binding or namespace object which was originally imported from another module, the <emu-xref href="#exportentry-record" id="_ref_9002"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> is rewritten to match the form it would have if the binding or namespace object had been re-exported directly from the original module rather than imported then exported. This allows conflicts which arise from exporting the same binding or namespace twice under the same name through <code>export * from</code> to be ignored rather than being treated as ambiguous in step <emu-xref href="#step-resolveexport-conflict" id="_ref_506"><a href="ecmascript-language-scripts-and-modules.html#step-resolveexport-conflict">9.e.iii</a></emu-xref> of <emu-xref href="#sec-resolveexport" id="_ref_507"><a href="ecmascript-language-scripts-and-modules.html#sec-resolveexport">the ResolveExport concrete method of Source Text Module Records</a></emu-xref>.</li><li>Let <var>ie</var> be the element of <var>importEntries</var> whose <var class="field">[[LocalName]]</var> is <var>ee</var>.<var class="field">[[LocalName]]</var>.</li><li>If <var>ie</var>.<var class="field">[[ImportName]]</var> is <emu-const>namespace-object</emu-const>, then<ol><li>NOTE: This is a re-export of an imported module namespace object.</li><li>Append the <emu-xref href="#exportentry-record" id="_ref_9003"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> { <var class="field">[[ModuleRequest]]</var>: <var>ie</var>.<var class="field">[[ModuleRequest]]</var>, <var class="field">[[ImportName]]</var>: <emu-const>all</emu-const>, <var class="field">[[LocalName]]</var>: <emu-val>null</emu-val>, <var class="field">[[ExportName]]</var>: <var>ee</var>.<var class="field">[[ExportName]]</var> } to <var>indirectExportEntries</var>.</li></ol></li><li>Else,<ol><li>NOTE: This is a re-export of a single name.</li><li>Append the <emu-xref href="#exportentry-record" id="_ref_9004"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> { <var class="field">[[ModuleRequest]]</var>: <var>ie</var>.<var class="field">[[ModuleRequest]]</var>, <var class="field">[[ImportName]]</var>: <var>ie</var>.<var class="field">[[ImportName]]</var>, <var class="field">[[LocalName]]</var>: <emu-val>null</emu-val>, <var class="field">[[ExportName]]</var>: <var>ee</var>.<var class="field">[[ExportName]]</var> } to <var>indirectExportEntries</var>.</li></ol></li></ol></li></ol></li><li>Else if <var>ee</var>.<var class="field">[[ImportName]]</var> is <emu-const>all-but-default</emu-const>, then<ol><li><emu-xref href="#assert" id="_ref_9005"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>ee</var>.<var class="field">[[ExportName]]</var> is <emu-val>null</emu-val>.</li><li>Append <var>ee</var> to <var>starExportEntries</var>.</li></ol></li><li>Else,<ol><li>Append <var>ee</var> to <var>indirectExportEntries</var>.</li></ol></li></ol></li><li>Let <var>async</var> be <var>body</var> <emu-xref aoid="Contains" id="_ref_9006"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <code>await</code>.</li><li>Return <emu-xref href="#sourctextmodule-record" id="_ref_9007"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Record</a></emu-xref> { <var class="field">[[Realm]]</var>: <var>realm</var>, <var class="field">[[Environment]]</var>: <emu-const>empty</emu-const>, <var class="field">[[Namespace]]</var>: <emu-const>empty</emu-const>, <var class="field">[[CycleRoot]]</var>: <emu-const>empty</emu-const>, <var class="field">[[HasTLA]]</var>: <var>async</var>, <var class="field">[[AsyncEvaluationOrder]]</var>: <emu-const>unset</emu-const>, <var class="field">[[TopLevelCapability]]</var>: <emu-const>empty</emu-const>, <var class="field">[[AsyncParentModules]]</var>: « », <var class="field">[[PendingAsyncDependencies]]</var>: <emu-const>empty</emu-const>, <var class="field">[[Status]]</var>: <emu-const>new</emu-const>, <var class="field">[[EvaluationError]]</var>: <emu-const>empty</emu-const>, <var class="field">[[HostDefined]]</var>: <var>hostDefined</var>, <var class="field">[[ECMAScriptCode]]</var>: <var>body</var>, <var class="field">[[Context]]</var>: <emu-const>empty</emu-const>, <var class="field">[[ImportMeta]]</var>: <emu-const>empty</emu-const>, <var class="field">[[RequestedModules]]</var>: <var>requestedModules</var>, <var class="field">[[LoadedModules]]</var>: « », <var class="field">[[ImportEntries]]</var>: <var>importEntries</var>, <var class="field">[[LocalExportEntries]]</var>: <var>localExportEntries</var>, <var class="field">[[IndirectExportEntries]]</var>: <var>indirectExportEntries</var>, <var class="field">[[StarExportEntries]]</var>: <var>starExportEntries</var>, <var class="field">[[DFSAncestorIndex]]</var>: <emu-const>empty</emu-const> }.</li></ol></emu-alg>
|
|
<emu-note><span class="note">Note</span><div class="note-contents">
|
|
<p>An implementation may parse module source text and analyse it for Early Error conditions prior to the evaluation of ParseModule for that module source text. However, the reporting of any errors must be deferred until the point where this specification actually performs ParseModule upon that source text.</p>
|
|
</div></emu-note>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-source-text-module-record-module-record-methods">
|
|
<h1><span class="secnum">16.2.1.7.2</span> Implementation of Module Record Abstract Methods</h1>
|
|
|
|
<p>The following are the concrete methods for <emu-xref href="#sourctextmodule-record" id="_ref_9008"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Record</a></emu-xref> that implement the corresponding <emu-xref href="#sec-abstract-module-records" id="_ref_9009"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref> abstract methods defined in <emu-xref href="#table-abstract-methods-of-module-records" id="_ref_508"><a href="ecmascript-language-scripts-and-modules.html#table-abstract-methods-of-module-records">Table 39</a></emu-xref>.</p>
|
|
|
|
<emu-clause id="sec-getexportednames" type="concrete method">
|
|
<h1><span class="secnum">16.2.1.7.2.1</span> GetExportedNames ( [ <var>exportStarSet</var> ] )</h1>
|
|
<p>The <emu-xref aoid="GetExportedNames" id="_ref_9010"><a href="ecmascript-language-scripts-and-modules.html#abstract-getexportednames">GetExportedNames</a></emu-xref> concrete method of a <emu-xref href="#sourctextmodule-record" id="_ref_9011"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Record</a></emu-xref> <var>module</var> takes optional argument <var>exportStarSet</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9012"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sourctextmodule-record" id="_ref_9013"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Records</a></emu-xref>) and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9014"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Strings. It performs the following steps when called:</p>
|
|
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_9015"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Status]]</var> is not <emu-const>new</emu-const>.</li><li>If <var>exportStarSet</var> is not present, set <var>exportStarSet</var> to a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9016"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>If <var>exportStarSet</var> contains <var>module</var>, then<ol><li><emu-xref href="#assert" id="_ref_9017"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: We've reached the starting point of an <code>export *</code> circularity.</li><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9018"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></li><li>Append <var>module</var> to <var>exportStarSet</var>.</li><li>Let <var>exportedNames</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9019"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>For each <emu-xref href="#exportentry-record" id="_ref_9020"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> <var>e</var> of <var>module</var>.<var class="field">[[LocalExportEntries]]</var>, do<ol><li><emu-xref href="#assert" id="_ref_9021"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var> provides the direct binding for this export.</li><li><emu-xref href="#assert" id="_ref_9022"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>e</var>.<var class="field">[[ExportName]]</var> is not <emu-val>null</emu-val>.</li><li>Append <var>e</var>.<var class="field">[[ExportName]]</var> to <var>exportedNames</var>.</li></ol></li><li>For each <emu-xref href="#exportentry-record" id="_ref_9023"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> <var>e</var> of <var>module</var>.<var class="field">[[IndirectExportEntries]]</var>, do<ol><li><emu-xref href="#assert" id="_ref_9024"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var> imports a specific binding for this export.</li><li><emu-xref href="#assert" id="_ref_9025"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>e</var>.<var class="field">[[ExportName]]</var> is not <emu-val>null</emu-val>.</li><li>Append <var>e</var>.<var class="field">[[ExportName]]</var> to <var>exportedNames</var>.</li></ol></li><li>For each <emu-xref href="#exportentry-record" id="_ref_9026"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> <var>e</var> of <var>module</var>.<var class="field">[[StarExportEntries]]</var>, do<ol><li><emu-xref href="#assert" id="_ref_9027"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>e</var>.<var class="field">[[ModuleRequest]]</var> is not <emu-val>null</emu-val>.</li><li>Let <var>requestedModule</var> be <emu-xref aoid="GetImportedModule" id="_ref_9028"><a href="ecmascript-language-scripts-and-modules.html#sec-GetImportedModule">GetImportedModule</a></emu-xref>(<var>module</var>, <var>e</var>.<var class="field">[[ModuleRequest]]</var>).</li><li>Let <var>starNames</var> be <var>requestedModule</var>.<emu-xref aoid="GetExportedNames" id="_ref_9029"><a href="ecmascript-language-scripts-and-modules.html#abstract-getexportednames">GetExportedNames</a></emu-xref>(<var>exportStarSet</var>).</li><li>For each element <var>n</var> of <var>starNames</var>, do<ol><li>If <var>n</var> is not <emu-val>"default"</emu-val>, then<ol><li>If <var>exportedNames</var> does not contain <var>n</var>, then<ol><li>Append <var>n</var> to <var>exportedNames</var>.</li></ol></li></ol></li></ol></li></ol></li><li>Return <var>exportedNames</var>.</li></ol></emu-alg>
|
|
<emu-note><span class="note">Note</span><div class="note-contents">
|
|
<p><emu-xref aoid="GetExportedNames" id="_ref_9030"><a href="ecmascript-language-scripts-and-modules.html#abstract-getexportednames">GetExportedNames</a></emu-xref> does not filter out or throw an exception for names that have ambiguous star export bindings.</p>
|
|
</div></emu-note>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-resolveexport" type="concrete method">
|
|
<h1><span class="secnum">16.2.1.7.2.2</span> ResolveExport ( <var>exportName</var> [ , <var>resolveSet</var> ] )</h1>
|
|
<p>The <emu-xref aoid="ResolveExport" id="_ref_9031"><a href="ecmascript-language-scripts-and-modules.html#abstract-resolveexport">ResolveExport</a></emu-xref> concrete method of a <emu-xref href="#sourctextmodule-record" id="_ref_9032"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Record</a></emu-xref> <var>module</var> takes argument <var>exportName</var> (a String) and optional argument <var>resolveSet</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9033"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9034"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Records</a></emu-xref> with fields <var class="field">[[Module]]</var> (a <emu-xref href="#sec-abstract-module-records" id="_ref_9035"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>) and <var class="field">[[ExportName]]</var> (a String)) and returns a <emu-xref href="#resolvedbinding-record" id="_ref_9036"><a href="ecmascript-language-scripts-and-modules.html#resolvedbinding-record">ResolvedBinding Record</a></emu-xref>, <emu-val>null</emu-val>, or <emu-const>ambiguous</emu-const>.</p>
|
|
<p><emu-xref aoid="ResolveExport" id="_ref_9037"><a href="ecmascript-language-scripts-and-modules.html#abstract-resolveexport">ResolveExport</a></emu-xref> attempts to resolve an imported binding to the actual defining module and local binding name. The defining module may be the module represented by the <emu-xref href="#sec-abstract-module-records" id="_ref_9038"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref> this method was invoked on or some other module that is imported by that module. The parameter <var>resolveSet</var> is used to detect unresolved circular import/export paths. If a pair consisting of specific <emu-xref href="#sec-abstract-module-records" id="_ref_9039"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref> and <var>exportName</var> is reached that is already in <var>resolveSet</var>, an import circularity has been encountered. Before recursively calling <emu-xref aoid="ResolveExport" id="_ref_9040"><a href="ecmascript-language-scripts-and-modules.html#abstract-resolveexport">ResolveExport</a></emu-xref>, a pair consisting of <var>module</var> and <var>exportName</var> is added to <var>resolveSet</var>.</p>
|
|
<p>If a defining module is found, a <emu-xref href="#resolvedbinding-record" id="_ref_9041"><a href="ecmascript-language-scripts-and-modules.html#resolvedbinding-record">ResolvedBinding Record</a></emu-xref> { <var class="field">[[Module]]</var>, <var class="field">[[BindingName]]</var> } is returned. This record identifies the resolved binding of the originally requested export, unless this is the export of a namespace with no local binding. In this case, <var class="field">[[BindingName]]</var> will be set to <emu-const>namespace</emu-const>. If no definition was found or the request is found to be circular, <emu-val>null</emu-val> is returned. If the request is found to be ambiguous, <emu-const>ambiguous</emu-const> is returned.</p>
|
|
|
|
|
|
<p>It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_9042"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Status]]</var> is not <emu-const>new</emu-const>.</li><li>If <var>resolveSet</var> is not present, set <var>resolveSet</var> to a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9043"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>For each <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9044"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[Module]]</var>, <var class="field">[[ExportName]]</var> } <var>r</var> of <var>resolveSet</var>, do<ol><li>If <var>module</var> and <var>r</var>.<var class="field">[[Module]]</var> are the same <emu-xref href="#sec-abstract-module-records" id="_ref_9045"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref> and <var>exportName</var> is <var>r</var>.<var class="field">[[ExportName]]</var>, then<ol><li><emu-xref href="#assert" id="_ref_9046"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: This is a circular import request.</li><li>Return <emu-val>null</emu-val>.</li></ol></li></ol></li><li>Append the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9047"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[Module]]</var>: <var>module</var>, <var class="field">[[ExportName]]</var>: <var>exportName</var> } to <var>resolveSet</var>.</li><li>For each <emu-xref href="#exportentry-record" id="_ref_9048"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> <var>e</var> of <var>module</var>.<var class="field">[[LocalExportEntries]]</var>, do<ol><li>If <var>e</var>.<var class="field">[[ExportName]]</var> is <var>exportName</var>, then<ol><li><emu-xref href="#assert" id="_ref_9049"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var> provides the direct binding for this export.</li><li>Return <emu-xref href="#resolvedbinding-record" id="_ref_9050"><a href="ecmascript-language-scripts-and-modules.html#resolvedbinding-record">ResolvedBinding Record</a></emu-xref> { <var class="field">[[Module]]</var>: <var>module</var>, <var class="field">[[BindingName]]</var>: <var>e</var>.<var class="field">[[LocalName]]</var> }.</li></ol></li></ol></li><li>For each <emu-xref href="#exportentry-record" id="_ref_9051"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> <var>e</var> of <var>module</var>.<var class="field">[[IndirectExportEntries]]</var>, do<ol><li>If <var>e</var>.<var class="field">[[ExportName]]</var> is <var>exportName</var>, then<ol><li><emu-xref href="#assert" id="_ref_9052"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>e</var>.<var class="field">[[ModuleRequest]]</var> is not <emu-val>null</emu-val>.</li><li>Let <var>importedModule</var> be <emu-xref aoid="GetImportedModule" id="_ref_9053"><a href="ecmascript-language-scripts-and-modules.html#sec-GetImportedModule">GetImportedModule</a></emu-xref>(<var>module</var>, <var>e</var>.<var class="field">[[ModuleRequest]]</var>).</li><li>If <var>e</var>.<var class="field">[[ImportName]]</var> is <emu-const>all</emu-const>, then<ol><li><emu-xref href="#assert" id="_ref_9054"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var> does not provide the direct binding for this export.</li><li>Return <emu-xref href="#resolvedbinding-record" id="_ref_9055"><a href="ecmascript-language-scripts-and-modules.html#resolvedbinding-record">ResolvedBinding Record</a></emu-xref> { <var class="field">[[Module]]</var>: <var>importedModule</var>, <var class="field">[[BindingName]]</var>: <emu-const>namespace</emu-const> }.</li></ol></li><li><emu-xref href="#assert" id="_ref_9056"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var> imports a specific binding for this export.</li><li><emu-xref href="#assert" id="_ref_9057"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>e</var>.<var class="field">[[ImportName]]</var> <emu-xref href="#sec-ecmascript-language-types-string-type" id="_ref_9058"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type">is a String</a></emu-xref>.</li><li>Return <var>importedModule</var>.<emu-xref aoid="ResolveExport" id="_ref_9059"><a href="ecmascript-language-scripts-and-modules.html#abstract-resolveexport">ResolveExport</a></emu-xref>(<var>e</var>.<var class="field">[[ImportName]]</var>, <var>resolveSet</var>).</li></ol></li></ol></li><li>If <var>exportName</var> is <emu-val>"default"</emu-val>, then<ol><li><emu-xref href="#assert" id="_ref_9060"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: A <code>default</code> export was not explicitly defined by this module.</li><li>Return <emu-val>null</emu-val>.</li><li>NOTE: A <code>default</code> export cannot be provided by an <code>export * from "mod"</code> declaration.</li></ol></li><li>Let <var>starResolution</var> be <emu-val>null</emu-val>.</li><li>For each <emu-xref href="#exportentry-record" id="_ref_9061"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> <var>e</var> of <var>module</var>.<var class="field">[[StarExportEntries]]</var>, do<ol><li><emu-xref href="#assert" id="_ref_9062"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>e</var>.<var class="field">[[ModuleRequest]]</var> is not <emu-val>null</emu-val>.</li><li>Let <var>importedModule</var> be <emu-xref aoid="GetImportedModule" id="_ref_9063"><a href="ecmascript-language-scripts-and-modules.html#sec-GetImportedModule">GetImportedModule</a></emu-xref>(<var>module</var>, <var>e</var>.<var class="field">[[ModuleRequest]]</var>).</li><li>Let <var>resolution</var> be <var>importedModule</var>.<emu-xref aoid="ResolveExport" id="_ref_9064"><a href="ecmascript-language-scripts-and-modules.html#abstract-resolveexport">ResolveExport</a></emu-xref>(<var>exportName</var>, <var>resolveSet</var>).</li><li>If <var>resolution</var> is <emu-const>ambiguous</emu-const>, return <emu-const>ambiguous</emu-const>.</li><li>If <var>resolution</var> is not <emu-val>null</emu-val>, then<ol><li><emu-xref href="#assert" id="_ref_9065"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>resolution</var> is a <emu-xref href="#resolvedbinding-record" id="_ref_9066"><a href="ecmascript-language-scripts-and-modules.html#resolvedbinding-record">ResolvedBinding Record</a></emu-xref>.</li><li>If <var>starResolution</var> is <emu-val>null</emu-val>, then<ol><li>Set <var>starResolution</var> to <var>resolution</var>.</li></ol></li><li id="step-resolveexport-conflict">Else,<ol><li><emu-xref href="#assert" id="_ref_9067"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: There is more than one <code>*</code> export that includes the requested name.</li><li>If <var>resolution</var>.<var class="field">[[Module]]</var> and <var>starResolution</var>.<var class="field">[[Module]]</var> are not the same <emu-xref href="#sec-abstract-module-records" id="_ref_9068"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>, return <emu-const>ambiguous</emu-const>.</li><li>If <var>resolution</var>.<var class="field">[[BindingName]]</var> is not <var>starResolution</var>.<var class="field">[[BindingName]]</var>, return <emu-const>ambiguous</emu-const>.</li></ol></li></ol></li></ol></li><li>Return <var>starResolution</var>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-source-text-module-record-cyclic-module-record-methods">
|
|
<h1><span class="secnum">16.2.1.7.3</span> Implementation of Cyclic Module Record Abstract Methods</h1>
|
|
|
|
<p>The following are the concrete methods for <emu-xref href="#sourctextmodule-record" id="_ref_9069"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Record</a></emu-xref> that implement the corresponding <emu-xref href="#cyclic-module-record" id="_ref_9070"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref> abstract methods defined in <emu-xref href="#table-cyclic-module-methods" id="_ref_509"><a href="ecmascript-language-scripts-and-modules.html#table-cyclic-module-methods">Table 41</a></emu-xref>.</p>
|
|
|
|
<emu-clause id="sec-source-text-module-record-initialize-environment" type="concrete method">
|
|
<h1><span class="secnum">16.2.1.7.3.1</span> InitializeEnvironment ( )</h1>
|
|
<p>The <emu-xref aoid="InitializeEnvironment" id="_ref_9071"><a href="ecmascript-language-scripts-and-modules.html#abstract-initializeenvironment">InitializeEnvironment</a></emu-xref> concrete method of a <emu-xref href="#sourctextmodule-record" id="_ref_9072"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Record</a></emu-xref> <var>module</var> takes no arguments and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_9073"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-const>unused</emu-const> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_9074"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li>For each <emu-xref href="#exportentry-record" id="_ref_9075"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> <var>e</var> of <var>module</var>.<var class="field">[[IndirectExportEntries]]</var>, do<ol><li><emu-xref href="#assert" id="_ref_9076"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>e</var>.<var class="field">[[ExportName]]</var> is not <emu-val>null</emu-val>.</li><li>Let <var>resolution</var> be <var>module</var>.<emu-xref aoid="ResolveExport" id="_ref_9077"><a href="ecmascript-language-scripts-and-modules.html#abstract-resolveexport">ResolveExport</a></emu-xref>(<var>e</var>.<var class="field">[[ExportName]]</var>).</li><li>If <var>resolution</var> is either <emu-val>null</emu-val> or <emu-const>ambiguous</emu-const>, throw a <emu-val>SyntaxError</emu-val> exception.</li><li><emu-xref href="#assert" id="_ref_9078"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>resolution</var> is a <emu-xref href="#resolvedbinding-record" id="_ref_9079"><a href="ecmascript-language-scripts-and-modules.html#resolvedbinding-record">ResolvedBinding Record</a></emu-xref>.</li></ol></li><li><emu-xref href="#assert" id="_ref_9080"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: All named exports from <var>module</var> are resolvable.</li><li>Let <var>realm</var> be <var>module</var>.<var class="field">[[Realm]]</var>.</li><li><emu-xref href="#assert" id="_ref_9081"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>realm</var> is not <emu-val>undefined</emu-val>.</li><li>Let <var>env</var> be <emu-xref aoid="NewModuleEnvironment" id="_ref_9082"><a href="executable-code-and-execution-contexts.html#sec-newmoduleenvironment">NewModuleEnvironment</a></emu-xref>(<var>realm</var>.<var class="field">[[GlobalEnv]]</var>).</li><li>Set <var>module</var>.<var class="field">[[Environment]]</var> to <var>env</var>.</li><li>For each <emu-xref href="#importentry-record" id="_ref_9083"><a href="ecmascript-language-scripts-and-modules.html#importentry-record">ImportEntry Record</a></emu-xref> <var>in</var> of <var>module</var>.<var class="field">[[ImportEntries]]</var>, do<ol><li>Let <var>importedModule</var> be <emu-xref aoid="GetImportedModule" id="_ref_9084"><a href="ecmascript-language-scripts-and-modules.html#sec-GetImportedModule">GetImportedModule</a></emu-xref>(<var>module</var>, <var>in</var>.<var class="field">[[ModuleRequest]]</var>).</li><li>If <var>in</var>.<var class="field">[[ImportName]]</var> is <emu-const>namespace-object</emu-const>, then<ol><li>Let <var>namespace</var> be <emu-xref aoid="GetModuleNamespace" id="_ref_9085"><a href="ecmascript-language-scripts-and-modules.html#sec-getmodulenamespace">GetModuleNamespace</a></emu-xref>(<var>importedModule</var>).</li><li>Perform ! <var>env</var>.<emu-xref aoid="CreateImmutableBinding" id="_ref_9086"><a href="executable-code-and-execution-contexts.html#abstract-createimmutablebinding">CreateImmutableBinding</a></emu-xref>(<var>in</var>.<var class="field">[[LocalName]]</var>, <emu-val>true</emu-val>).</li><li>Perform ! <var>env</var>.<emu-xref aoid="InitializeBinding" id="_ref_9087"><a href="executable-code-and-execution-contexts.html#abstract-initializebinding">InitializeBinding</a></emu-xref>(<var>in</var>.<var class="field">[[LocalName]]</var>, <var>namespace</var>).</li></ol></li><li>Else,<ol><li>Let <var>resolution</var> be <var>importedModule</var>.<emu-xref aoid="ResolveExport" id="_ref_9088"><a href="ecmascript-language-scripts-and-modules.html#abstract-resolveexport">ResolveExport</a></emu-xref>(<var>in</var>.<var class="field">[[ImportName]]</var>).</li><li>If <var>resolution</var> is either <emu-val>null</emu-val> or <emu-const>ambiguous</emu-const>, throw a <emu-val>SyntaxError</emu-val> exception.</li><li>If <var>resolution</var>.<var class="field">[[BindingName]]</var> is <emu-const>namespace</emu-const>, then<ol><li>Let <var>namespace</var> be <emu-xref aoid="GetModuleNamespace" id="_ref_9089"><a href="ecmascript-language-scripts-and-modules.html#sec-getmodulenamespace">GetModuleNamespace</a></emu-xref>(<var>resolution</var>.<var class="field">[[Module]]</var>).</li><li>Perform ! <var>env</var>.<emu-xref aoid="CreateImmutableBinding" id="_ref_9090"><a href="executable-code-and-execution-contexts.html#abstract-createimmutablebinding">CreateImmutableBinding</a></emu-xref>(<var>in</var>.<var class="field">[[LocalName]]</var>, <emu-val>true</emu-val>).</li><li>Perform ! <var>env</var>.<emu-xref aoid="InitializeBinding" id="_ref_9091"><a href="executable-code-and-execution-contexts.html#abstract-initializebinding">InitializeBinding</a></emu-xref>(<var>in</var>.<var class="field">[[LocalName]]</var>, <var>namespace</var>).</li></ol></li><li>Else,<ol><li>Perform <emu-xref aoid="CreateImportBinding" id="_ref_9092"><a href="executable-code-and-execution-contexts.html#sec-createimportbinding">CreateImportBinding</a></emu-xref>(<var>env</var>, <var>in</var>.<var class="field">[[LocalName]]</var>, <var>resolution</var>.<var class="field">[[Module]]</var>, <var>resolution</var>.<var class="field">[[BindingName]]</var>).</li></ol></li></ol></li></ol></li><li>Let <var>moduleContext</var> be a new <emu-xref href="#ecmascript-code-execution-context" id="_ref_9093"><a href="executable-code-and-execution-contexts.html#ecmascript-code-execution-context">ECMAScript code execution context</a></emu-xref>.</li><li>Set the Function of <var>moduleContext</var> to <emu-val>null</emu-val>.</li><li><emu-xref href="#assert" id="_ref_9094"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[Realm]]</var> is not <emu-val>undefined</emu-val>.</li><li>Set the <emu-xref href="#realm" id="_ref_9095"><a href="executable-code-and-execution-contexts.html#realm">Realm</a></emu-xref> of <var>moduleContext</var> to <var>module</var>.<var class="field">[[Realm]]</var>.</li><li>Set the ScriptOrModule of <var>moduleContext</var> to <var>module</var>.</li><li>Set the VariableEnvironment of <var>moduleContext</var> to <var>module</var>.<var class="field">[[Environment]]</var>.</li><li>Set the LexicalEnvironment of <var>moduleContext</var> to <var>module</var>.<var class="field">[[Environment]]</var>.</li><li>Set the PrivateEnvironment of <var>moduleContext</var> to <emu-val>null</emu-val>.</li><li>Set <var>module</var>.<var class="field">[[Context]]</var> to <var>moduleContext</var>.</li><li>Push <var>moduleContext</var> onto the <emu-xref href="#execution-context-stack" id="_ref_9096"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref>; <var>moduleContext</var> is now the <emu-xref href="#running-execution-context" id="_ref_9097"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>code</var> be <var>module</var>.<var class="field">[[ECMAScriptCode]]</var>.</li><li>Let <var>varDeclarations</var> be the <emu-xref aoid="VarScopedDeclarations" id="_ref_9098"><a href="syntax-directed-operations.html#sec-static-semantics-varscopeddeclarations">VarScopedDeclarations</a></emu-xref> of <var>code</var>.</li><li>Let <var>declaredVarNames</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9099"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>For each element <var>d</var> of <var>varDeclarations</var>, do<ol><li>For each element <var>dn</var> of the <emu-xref aoid="BoundNames" id="_ref_9100"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <var>d</var>, do<ol><li>If <var>declaredVarNames</var> does not contain <var>dn</var>, then<ol><li>Perform ! <var>env</var>.<emu-xref aoid="CreateMutableBinding" id="_ref_9101"><a href="executable-code-and-execution-contexts.html#abstract-createmutablebinding">CreateMutableBinding</a></emu-xref>(<var>dn</var>, <emu-val>false</emu-val>).</li><li>Perform ! <var>env</var>.<emu-xref aoid="InitializeBinding" id="_ref_9102"><a href="executable-code-and-execution-contexts.html#abstract-initializebinding">InitializeBinding</a></emu-xref>(<var>dn</var>, <emu-val>undefined</emu-val>).</li><li>Append <var>dn</var> to <var>declaredVarNames</var>.</li></ol></li></ol></li></ol></li><li>Let <var>lexDeclarations</var> be the <emu-xref aoid="LexicallyScopedDeclarations" id="_ref_9103"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallyscopeddeclarations">LexicallyScopedDeclarations</a></emu-xref> of <var>code</var>.</li><li>Let <var>privateEnv</var> be <emu-val>null</emu-val>.</li><li>For each element <var>d</var> of <var>lexDeclarations</var>, do<ol><li>For each element <var>dn</var> of the <emu-xref aoid="BoundNames" id="_ref_9104"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <var>d</var>, do<ol><li>If <emu-xref aoid="IsConstantDeclaration" id="_ref_9105"><a href="syntax-directed-operations.html#sec-static-semantics-isconstantdeclaration">IsConstantDeclaration</a></emu-xref> of <var>d</var> is <emu-val>true</emu-val>, then<ol><li>Perform ! <var>env</var>.<emu-xref aoid="CreateImmutableBinding" id="_ref_9106"><a href="executable-code-and-execution-contexts.html#abstract-createimmutablebinding">CreateImmutableBinding</a></emu-xref>(<var>dn</var>, <emu-val>true</emu-val>).</li></ol></li><li>Else,<ol><li>Perform ! <var>env</var>.<emu-xref aoid="CreateMutableBinding" id="_ref_9107"><a href="executable-code-and-execution-contexts.html#abstract-createmutablebinding">CreateMutableBinding</a></emu-xref>(<var>dn</var>, <emu-val>false</emu-val>).</li></ol></li><li>If <var>d</var> is either a <emu-nt id="_ref_23512"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt>, a <emu-nt id="_ref_23513"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorDeclaration">GeneratorDeclaration</a></emu-nt>, an <emu-nt id="_ref_23514"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionDeclaration">AsyncFunctionDeclaration</a></emu-nt>, or an <emu-nt id="_ref_23515"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorDeclaration">AsyncGeneratorDeclaration</a></emu-nt>, then<ol><li>Let <var>fo</var> be <emu-xref aoid="InstantiateFunctionObject" id="_ref_9108"><a href="syntax-directed-operations.html#sec-runtime-semantics-instantiatefunctionobject">InstantiateFunctionObject</a></emu-xref> of <var>d</var> with arguments <var>env</var> and <var>privateEnv</var>.</li><li>Perform ! <var>env</var>.<emu-xref aoid="InitializeBinding" id="_ref_9109"><a href="executable-code-and-execution-contexts.html#abstract-initializebinding">InitializeBinding</a></emu-xref>(<var>dn</var>, <var>fo</var>).</li></ol></li></ol></li></ol></li><li>Remove <var>moduleContext</var> from the <emu-xref href="#execution-context-stack" id="_ref_9110"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref>.</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-source-text-module-record-execute-module" type="concrete method">
|
|
<h1><span class="secnum">16.2.1.7.3.2</span> ExecuteModule ( [ <var>capability</var> ] )</h1>
|
|
<p>The <emu-xref aoid="ExecuteModule" id="_ref_9111"><a href="ecmascript-language-scripts-and-modules.html#abstract-executemodule">ExecuteModule</a></emu-xref> concrete method of a <emu-xref href="#sourctextmodule-record" id="_ref_9112"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Record</a></emu-xref> <var>module</var> takes optional argument <var>capability</var> (a <emu-xref href="#sec-promisecapability-records" id="_ref_9113"><a href="control-abstraction-objects.html#sec-promisecapability-records">PromiseCapability Record</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_9114"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-const>unused</emu-const> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_9115"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li>Let <var>moduleContext</var> be a new <emu-xref href="#ecmascript-code-execution-context" id="_ref_9116"><a href="executable-code-and-execution-contexts.html#ecmascript-code-execution-context">ECMAScript code execution context</a></emu-xref>.</li><li>Set the Function of <var>moduleContext</var> to <emu-val>null</emu-val>.</li><li>Set the <emu-xref href="#realm" id="_ref_9117"><a href="executable-code-and-execution-contexts.html#realm">Realm</a></emu-xref> of <var>moduleContext</var> to <var>module</var>.<var class="field">[[Realm]]</var>.</li><li>Set the ScriptOrModule of <var>moduleContext</var> to <var>module</var>.</li><li><emu-xref href="#assert" id="_ref_9118"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var> has been linked and declarations in its module environment have been instantiated.</li><li>Set the VariableEnvironment of <var>moduleContext</var> to <var>module</var>.<var class="field">[[Environment]]</var>.</li><li>Set the LexicalEnvironment of <var>moduleContext</var> to <var>module</var>.<var class="field">[[Environment]]</var>.</li><li>Suspend the <emu-xref href="#running-execution-context" id="_ref_9119"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>If <var>module</var>.<var class="field">[[HasTLA]]</var> is <emu-val>false</emu-val>, then<ol><li><emu-xref href="#assert" id="_ref_9120"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>capability</var> is not present.</li><li>Push <var>moduleContext</var> onto the <emu-xref href="#execution-context-stack" id="_ref_9121"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref>; <var>moduleContext</var> is now the <emu-xref href="#running-execution-context" id="_ref_9122"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>result</var> be <emu-xref aoid="Completion" id="_ref_9123"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="Evaluation" id="_ref_9124"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <var>module</var>.<var class="field">[[ECMAScriptCode]]</var>).</li><li>Suspend <var>moduleContext</var> and remove it from the <emu-xref href="#execution-context-stack" id="_ref_9125"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref>.</li><li>Resume the context that is now on the top of the <emu-xref href="#execution-context-stack" id="_ref_9126"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref> as the <emu-xref href="#running-execution-context" id="_ref_9127"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>If <var>result</var> is an <emu-xref href="#sec-completion-record-specification-type" id="_ref_9128"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>, then<ol><li>Return ? <var>result</var>.</li></ol></li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_9129"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>capability</var> is a <emu-xref href="#sec-promisecapability-records" id="_ref_9130"><a href="control-abstraction-objects.html#sec-promisecapability-records">PromiseCapability Record</a></emu-xref>.</li><li>Perform <emu-xref aoid="AsyncBlockStart" id="_ref_9131"><a href="control-abstraction-objects.html#sec-asyncblockstart" class="e-user-code">AsyncBlockStart</a></emu-xref>(<var>capability</var>, <var>module</var>.<var class="field">[[ECMAScriptCode]]</var>, <var>moduleContext</var>).</li></ol></li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-synthetic-module-records">
|
|
<h1><span class="secnum">16.2.1.8</span> Synthetic Module Records</h1>
|
|
|
|
<p>A <dfn variants="Synthetic Module Records" tabindex="-1">Synthetic Module Record</dfn> is used to represent information about a module that is defined by specifications. Its exported names are statically defined at creation, while their corresponding values can change over time using <emu-xref aoid="SetSyntheticModuleExport" id="_ref_9132"><a href="ecmascript-language-scripts-and-modules.html#sec-setsyntheticmoduleexport">SetSyntheticModuleExport</a></emu-xref>. It has no imports or dependencies.</p>
|
|
|
|
<emu-note><span class="note">Note</span><div class="note-contents">A Synthetic Module Record could be used for defining a variety of module types: for example, JSON modules or CSS modules.</div></emu-note>
|
|
|
|
<p>In addition to the fields defined in <emu-xref href="#table-module-record-fields" id="_ref_510"><a href="ecmascript-language-scripts-and-modules.html#table-module-record-fields">Table 38</a></emu-xref> Synthetic Module Records have the additional fields listed in <emu-xref href="#table-synthetic-module-record-fields" id="_ref_511"><a href="ecmascript-language-scripts-and-modules.html#table-synthetic-module-record-fields">Table 57</a></emu-xref>.</p>
|
|
|
|
<emu-table id="table-synthetic-module-record-fields" caption="Additional Fields of Synthetic Module Records"><figure><figcaption>Table 57: Additional Fields of <emu-xref href="#sec-synthetic-module-records" id="_ref_9133"><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records">Synthetic Module Records</a></emu-xref></figcaption>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Field Name</th>
|
|
<th>Value Type</th>
|
|
<th>Meaning</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<td><var class="field">[[ExportNames]]</var></td>
|
|
<td>a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9134"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Strings</td>
|
|
<td>The names of the exports of the module. This list does not contain duplicates.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><var class="field">[[EvaluationSteps]]</var></td>
|
|
<td>an <emu-xref href="#sec-abstract-closure" id="_ref_9135"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref></td>
|
|
<td>The initialization logic to perform upon evaluation of the module, taking the <emu-xref href="#sec-synthetic-module-records" id="_ref_9136"><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records">Synthetic Module Record</a></emu-xref> as its sole argument. It must not modify <var class="field">[[ExportNames]]</var>. It may return an <emu-xref href="#sec-completion-record-specification-type" id="_ref_9137"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>.</td>
|
|
</tr>
|
|
</tbody></table>
|
|
</figure></emu-table>
|
|
|
|
<emu-clause id="sec-create-default-export-synthetic-module" type="abstract operation" aoid="CreateDefaultExportSyntheticModule">
|
|
<h1><span class="secnum">16.2.1.8.1</span> CreateDefaultExportSyntheticModule ( <var>defaultExport</var> )</h1>
|
|
<p>The abstract operation CreateDefaultExportSyntheticModule takes argument <var>defaultExport</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_9138"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and returns a <emu-xref href="#sec-synthetic-module-records" id="_ref_9139"><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records">Synthetic Module Record</a></emu-xref>. It creates a <emu-xref href="#sec-synthetic-module-records" id="_ref_9140"><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records">Synthetic Module Record</a></emu-xref> whose default export is <var>defaultExport</var>. It performs the following steps when called:</p>
|
|
<emu-alg><ol><li>Let <var>realm</var> be <emu-xref href="#current-realm" id="_ref_9141"><a href="executable-code-and-execution-contexts.html#current-realm">the current Realm Record</a></emu-xref>.</li><li>Let <var>setDefaultExport</var> be a new <emu-xref href="#sec-abstract-closure" id="_ref_9142"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> with parameters (<var>module</var>) that captures <var>defaultExport</var> and performs the following steps when called:<ol><li>Perform <emu-xref aoid="SetSyntheticModuleExport" id="_ref_9143"><a href="ecmascript-language-scripts-and-modules.html#sec-setsyntheticmoduleexport">SetSyntheticModuleExport</a></emu-xref>(<var>module</var>, <emu-val>"default"</emu-val>, <var>defaultExport</var>).</li><li>Return <emu-xref aoid="NormalCompletion" id="_ref_9144"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(<emu-const>unused</emu-const>).</li></ol></li><li>Return the <emu-xref href="#sec-synthetic-module-records" id="_ref_9145"><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records">Synthetic Module Record</a></emu-xref> { <var class="field">[[Realm]]</var>: <var>realm</var>, <var class="field">[[Environment]]</var>: <emu-const>empty</emu-const>, <var class="field">[[Namespace]]</var>: <emu-const>empty</emu-const>, <var class="field">[[HostDefined]]</var>: <emu-val>undefined</emu-val>, <var class="field">[[ExportNames]]</var>: « <emu-val>"default"</emu-val> », <var class="field">[[EvaluationSteps]]</var>: <var>setDefaultExport</var> }.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-parse-json-module" type="abstract operation" aoid="ParseJSONModule">
|
|
<h1><span class="secnum">16.2.1.8.2</span> ParseJSONModule ( <var>source</var> )</h1>
|
|
<p>The abstract operation ParseJSONModule takes argument <var>source</var> (a String) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_9146"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a <emu-xref href="#sec-synthetic-module-records" id="_ref_9147"><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records">Synthetic Module Record</a></emu-xref>, or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_9148"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li>Let <var>json</var> be ? <emu-xref aoid="ParseJSON" id="_ref_9149"><a href="structured-data.html#sec-ParseJSON">ParseJSON</a></emu-xref>(<var>source</var>).</li><li>Return <emu-xref aoid="CreateDefaultExportSyntheticModule" id="_ref_9150"><a href="ecmascript-language-scripts-and-modules.html#sec-create-default-export-synthetic-module">CreateDefaultExportSyntheticModule</a></emu-xref>(<var>json</var>).</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-setsyntheticmoduleexport" type="abstract operation" aoid="SetSyntheticModuleExport">
|
|
<h1><span class="secnum">16.2.1.8.3</span> SetSyntheticModuleExport ( <var>module</var>, <var>exportName</var>, <var>exportValue</var> )</h1>
|
|
<p>The abstract operation SetSyntheticModuleExport takes arguments <var>module</var> (a <emu-xref href="#sec-synthetic-module-records" id="_ref_9151"><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records">Synthetic Module Record</a></emu-xref>), <var>exportName</var> (a String), and <var>exportValue</var> (an <emu-xref href="#sec-ecmascript-language-types" id="_ref_9152"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language value</a></emu-xref>) and returns <emu-const>unused</emu-const>. It can be used to set or change the exported value for an existing export of a <emu-xref href="#sec-synthetic-module-records" id="_ref_9153"><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records">Synthetic Module Record</a></emu-xref>. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_9154"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>module</var>.<var class="field">[[ExportNames]]</var> contains <var>exportName</var>.</li><li>Let <var>envRec</var> be <var>module</var>.<var class="field">[[Environment]]</var>.</li><li><emu-xref href="#assert" id="_ref_9155"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>envRec</var> is not <emu-const>empty</emu-const>.</li><li>Perform ! <var>envRec</var>.<emu-xref aoid="SetMutableBinding" id="_ref_9156"><a href="executable-code-and-execution-contexts.html#abstract-setmutablebinding">SetMutableBinding</a></emu-xref>(<var>exportName</var>, <var>exportValue</var>, <emu-val>true</emu-val>).</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-smr-module-record-methods">
|
|
<h1><span class="secnum">16.2.1.8.4</span> Implementation of Module Record Abstract Methods</h1>
|
|
|
|
<p>The following are the concrete methods for <emu-xref href="#sec-synthetic-module-records" id="_ref_9157"><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records">Synthetic Module Record</a></emu-xref> that implement the corresponding <emu-xref href="#sec-abstract-module-records" id="_ref_9158"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref> abstract methods defined in <emu-xref href="#table-abstract-methods-of-module-records" id="_ref_512"><a href="ecmascript-language-scripts-and-modules.html#table-abstract-methods-of-module-records">Table 39</a></emu-xref>.</p>
|
|
|
|
<emu-clause id="sec-smr-LoadRequestedModules" type="concrete method">
|
|
<h1><span class="secnum">16.2.1.8.4.1</span> LoadRequestedModules ( [ <var>hostDefined</var> ] )</h1>
|
|
<p>The <emu-xref aoid="LoadRequestedModules" id="_ref_9159"><a href="ecmascript-language-scripts-and-modules.html#abstract-loadrequestedmodules">LoadRequestedModules</a></emu-xref> concrete method of a <emu-xref href="#sec-synthetic-module-records" id="_ref_9160"><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records">Synthetic Module Record</a></emu-xref> <var>module</var> takes optional argument <var>hostDefined</var> (anything) and returns a Promise. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li>NOTE: This implementation of <emu-xref aoid="LoadRequestedModules" id="_ref_9161"><a href="ecmascript-language-scripts-and-modules.html#abstract-loadrequestedmodules">LoadRequestedModules</a></emu-xref> does not use <var>hostDefined</var>.</li><li>Return ! <emu-xref aoid="PromiseResolve" id="_ref_9162"><a href="control-abstraction-objects.html#sec-promise-resolve">PromiseResolve</a></emu-xref>(<emu-xref href="#sec-promise-constructor" id="_ref_9163"><a href="control-abstraction-objects.html#sec-promise-constructor">%Promise%</a></emu-xref>, <emu-val>undefined</emu-val>).</li></ol></emu-alg>
|
|
|
|
<emu-note><span class="note">Note</span><div class="note-contents">
|
|
<emu-xref href="#sec-synthetic-module-records" id="_ref_9164"><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records">Synthetic Module Records</a></emu-xref> have no dependencies.
|
|
</div></emu-note>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-smr-getexportednames" type="concrete method">
|
|
<h1><span class="secnum">16.2.1.8.4.2</span> GetExportedNames ( [ <var>exportStarSet</var> ] )</h1>
|
|
<p>The <emu-xref aoid="GetExportedNames" id="_ref_9165"><a href="ecmascript-language-scripts-and-modules.html#abstract-getexportednames">GetExportedNames</a></emu-xref> concrete method of a <emu-xref href="#sec-synthetic-module-records" id="_ref_9166"><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records">Synthetic Module Record</a></emu-xref> <var>module</var> takes optional argument <var>exportStarSet</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9167"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sourctextmodule-record" id="_ref_9168"><a href="ecmascript-language-scripts-and-modules.html#sourctextmodule-record">Source Text Module Records</a></emu-xref>) and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9169"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Strings. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li>NOTE: This implementation of <emu-xref aoid="GetExportedNames" id="_ref_9170"><a href="ecmascript-language-scripts-and-modules.html#abstract-getexportednames">GetExportedNames</a></emu-xref> does not use <var>exportStarSet</var>.</li><li>Return <var>module</var>.<var class="field">[[ExportNames]]</var>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-smr-resolveexport" type="concrete method">
|
|
<h1><span class="secnum">16.2.1.8.4.3</span> ResolveExport ( <var>exportName</var> [ , <var>resolveSet</var> ] )</h1>
|
|
<p>The <emu-xref aoid="ResolveExport" id="_ref_9171"><a href="ecmascript-language-scripts-and-modules.html#abstract-resolveexport">ResolveExport</a></emu-xref> concrete method of a <emu-xref href="#sec-synthetic-module-records" id="_ref_9172"><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records">Synthetic Module Record</a></emu-xref> <var>module</var> takes argument <var>exportName</var> (a String) and optional argument <var>resolveSet</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9173"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9174"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Records</a></emu-xref> with fields <var class="field">[[Module]]</var> (a <emu-xref href="#sec-abstract-module-records" id="_ref_9175"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>) and <var class="field">[[ExportName]]</var> (a String)) and returns a <emu-xref href="#resolvedbinding-record" id="_ref_9176"><a href="ecmascript-language-scripts-and-modules.html#resolvedbinding-record">ResolvedBinding Record</a></emu-xref>, <emu-val>null</emu-val>, or <emu-const>ambiguous</emu-const>. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li>NOTE: This implementation of <emu-xref aoid="ResolveExport" id="_ref_9177"><a href="ecmascript-language-scripts-and-modules.html#abstract-resolveexport">ResolveExport</a></emu-xref> does not use <var>resolveSet</var>.</li><li>If <var>module</var>.<var class="field">[[ExportNames]]</var> does not contain <var>exportName</var>, return <emu-val>null</emu-val>.</li><li>Return <emu-xref href="#resolvedbinding-record" id="_ref_9178"><a href="ecmascript-language-scripts-and-modules.html#resolvedbinding-record">ResolvedBinding Record</a></emu-xref> { <var class="field">[[Module]]</var>: <var>module</var>, <var class="field">[[BindingName]]</var>: <var>exportName</var> }.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-smr-Link" type="concrete method">
|
|
<h1><span class="secnum">16.2.1.8.4.4</span> Link ( )</h1>
|
|
<p>The <emu-xref aoid="Link" id="_ref_9179"><a href="ecmascript-language-scripts-and-modules.html#abstract-link">Link</a></emu-xref> concrete method of a <emu-xref href="#sec-synthetic-module-records" id="_ref_9180"><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records">Synthetic Module Record</a></emu-xref> <var>module</var> takes no arguments and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_9181"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> <emu-const>unused</emu-const>. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li>Let <var>realm</var> be <var>module</var>.<var class="field">[[Realm]]</var>.</li><li>Let <var>env</var> be <emu-xref aoid="NewModuleEnvironment" id="_ref_9182"><a href="executable-code-and-execution-contexts.html#sec-newmoduleenvironment">NewModuleEnvironment</a></emu-xref>(<var>realm</var>.<var class="field">[[GlobalEnv]]</var>).</li><li>Set <var>module</var>.<var class="field">[[Environment]]</var> to <var>env</var>.</li><li>For each String <var>exportName</var> of <var>module</var>.<var class="field">[[ExportNames]]</var>, do<ol><li>Perform ! <var>env</var>.<emu-xref aoid="CreateMutableBinding" id="_ref_9183"><a href="executable-code-and-execution-contexts.html#abstract-createmutablebinding">CreateMutableBinding</a></emu-xref>(<var>exportName</var>, <emu-val>false</emu-val>).</li><li>Perform ! <var>env</var>.<emu-xref aoid="InitializeBinding" id="_ref_9184"><a href="executable-code-and-execution-contexts.html#abstract-initializebinding">InitializeBinding</a></emu-xref>(<var>exportName</var>, <emu-val>undefined</emu-val>).</li></ol></li><li>Return <emu-xref aoid="NormalCompletion" id="_ref_9185"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(<emu-const>unused</emu-const>).</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-smr-Evaluate" type="concrete method">
|
|
<h1><span class="secnum">16.2.1.8.4.5</span> Evaluate ( )</h1>
|
|
<p>The <emu-xref aoid="Evaluate" id="_ref_9186"><a href="ecmascript-language-scripts-and-modules.html#abstract-evaluate">Evaluate</a></emu-xref> concrete method of a <emu-xref href="#sec-synthetic-module-records" id="_ref_9187"><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records">Synthetic Module Record</a></emu-xref> <var>module</var> takes no arguments and returns a Promise. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li>Let <var>moduleContext</var> be a new <emu-xref href="#ecmascript-code-execution-context" id="_ref_9188"><a href="executable-code-and-execution-contexts.html#ecmascript-code-execution-context">ECMAScript code execution context</a></emu-xref>.</li><li>Set the Function of <var>moduleContext</var> to <emu-val>null</emu-val>.</li><li>Set the <emu-xref href="#realm" id="_ref_9189"><a href="executable-code-and-execution-contexts.html#realm">Realm</a></emu-xref> of <var>moduleContext</var> to <var>module</var>.<var class="field">[[Realm]]</var>.</li><li>Set the ScriptOrModule of <var>moduleContext</var> to <var>module</var>.</li><li>Set the VariableEnvironment of <var>moduleContext</var> to <var>module</var>.<var class="field">[[Environment]]</var>.</li><li>Set the LexicalEnvironment of <var>moduleContext</var> to <var>module</var>.<var class="field">[[Environment]]</var>.</li><li>Suspend the <emu-xref href="#running-execution-context" id="_ref_9190"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Push <var>moduleContext</var> onto the <emu-xref href="#execution-context-stack" id="_ref_9191"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref>; <var>moduleContext</var> is now the <emu-xref href="#running-execution-context" id="_ref_9192"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>steps</var> be <var>module</var>.<var class="field">[[EvaluationSteps]]</var>.</li><li>Let <var>result</var> be <emu-xref aoid="Completion" id="_ref_9193"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<var>steps</var>(<var>module</var>)).</li><li>Suspend <var>moduleContext</var> and remove it from the <emu-xref href="#execution-context-stack" id="_ref_9194"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref>.</li><li>Resume the context that is now on the top of the <emu-xref href="#execution-context-stack" id="_ref_9195"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref> as the <emu-xref href="#running-execution-context" id="_ref_9196"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>pc</var> be ! <emu-xref aoid="NewPromiseCapability" id="_ref_9197"><a href="control-abstraction-objects.html#sec-newpromisecapability">NewPromiseCapability</a></emu-xref>(<emu-xref href="#sec-promise-constructor" id="_ref_9198"><a href="control-abstraction-objects.html#sec-promise-constructor">%Promise%</a></emu-xref>).</li><li><emu-xref aoid="IfAbruptRejectPromise" id="_ref_9199"><a href="control-abstraction-objects.html#sec-ifabruptrejectpromise" class="e-user-code">IfAbruptRejectPromise</a></emu-xref>(<var>result</var>, <var>pc</var>).</li><li>Perform ! <emu-xref aoid="Call" id="_ref_9200"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>pc</var>.<var class="field">[[Resolve]]</var>, <emu-val>undefined</emu-val>, « <emu-val>undefined</emu-val> »).</li><li>Return <var>pc</var>.<var class="field">[[Promise]]</var>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-GetImportedModule" type="abstract operation" aoid="GetImportedModule">
|
|
<h1><span class="secnum">16.2.1.9</span> GetImportedModule ( <var>referrer</var>, <var>request</var> )</h1>
|
|
<p>The abstract operation GetImportedModule takes arguments <var>referrer</var> (a <emu-xref href="#cyclic-module-record" id="_ref_9201"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>) and <var>request</var> (a <emu-xref href="#modulerequest-record" id="_ref_9202"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref>) and returns a <emu-xref href="#sec-abstract-module-records" id="_ref_9203"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li declared="r">Let <var>records</var> be a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9204"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> consisting of each <emu-xref href="#loadedmodulerequest-record" id="_ref_9205"><a href="ecmascript-language-scripts-and-modules.html#loadedmodulerequest-record">LoadedModuleRequest Record</a></emu-xref> <var>r</var> of <var>referrer</var>.<var class="field">[[LoadedModules]]</var> such that <emu-xref aoid="ModuleRequestsEqual" id="_ref_9206"><a href="ecmascript-language-scripts-and-modules.html#sec-ModuleRequestsEqual">ModuleRequestsEqual</a></emu-xref>(<var>r</var>, <var>request</var>) is <emu-val>true</emu-val>.</li><li><emu-xref href="#assert" id="_ref_9207"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>records</var> has exactly one element, since <emu-xref aoid="LoadRequestedModules" id="_ref_9208"><a href="ecmascript-language-scripts-and-modules.html#abstract-loadrequestedmodules">LoadRequestedModules</a></emu-xref> has completed successfully on <var>referrer</var> prior to invoking this abstract operation.</li><li>Let <var>record</var> be the sole element of <var>records</var>.</li><li>Return <var>record</var>.<var class="field">[[Module]]</var>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-HostLoadImportedModule" type="host-defined abstract operation" oldids="sec-hostresolveimportedmodule,sec-hostimportmoduledynamically" aoid="HostLoadImportedModule"><span id="sec-hostimportmoduledynamically"></span><span id="sec-hostresolveimportedmodule"></span>
|
|
<h1><span class="secnum">16.2.1.10</span> HostLoadImportedModule ( <var>referrer</var>, <var>moduleRequest</var>, <var>hostDefined</var>, <var>payload</var> )</h1>
|
|
<p>The <emu-xref href="#host-defined" id="_ref_9209"><a href="overview.html#host-defined">host-defined</a></emu-xref> abstract operation HostLoadImportedModule takes arguments <var>referrer</var> (a <emu-xref href="#script-record" id="_ref_9210"><a href="ecmascript-language-scripts-and-modules.html#script-record">Script Record</a></emu-xref>, a <emu-xref href="#cyclic-module-record" id="_ref_9211"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>, or a <emu-xref href="#realm-record" id="_ref_9212"><a href="executable-code-and-execution-contexts.html#realm-record">Realm Record</a></emu-xref>), <var>moduleRequest</var> (a <emu-xref href="#modulerequest-record" id="_ref_9213"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref>), <var>hostDefined</var> (anything), and <var>payload</var> (a <emu-xref href="#graphloadingstate-record" id="_ref_9214"><a href="ecmascript-language-scripts-and-modules.html#graphloadingstate-record">GraphLoadingState Record</a></emu-xref> or a <emu-xref href="#sec-promisecapability-records" id="_ref_9215"><a href="control-abstraction-objects.html#sec-promisecapability-records">PromiseCapability Record</a></emu-xref>) and returns <emu-const>unused</emu-const>.</p>
|
|
|
|
<emu-note id="note-HostLoadImportedModule-referrer-Realm-Record"><span class="note"><a href="ecmascript-language-scripts-and-modules.html#note-HostLoadImportedModule-referrer-Realm-Record">Note 1</a></span><div class="note-contents">
|
|
<p>An example of when <var>referrer</var> can be a <emu-xref href="#realm-record" id="_ref_9216"><a href="executable-code-and-execution-contexts.html#realm-record">Realm Record</a></emu-xref> is in a web browser <emu-xref href="#host" id="_ref_9217"><a href="overview.html#host">host</a></emu-xref>. There, if a user clicks on a control given by</p>
|
|
|
|
<pre><code class="html hljs"><span class="hljs-tag"><<span class="hljs-name">button</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"button"</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">"import('./foo.mjs')"</span>></span>Click me<span class="hljs-tag"></<span class="hljs-name">button</span>></span></code></pre>
|
|
|
|
<p>there will be no <emu-xref href="#job-activescriptormodule" id="_ref_9218"><a href="executable-code-and-execution-contexts.html#job-activescriptormodule">active script or module</a></emu-xref> at the time the <emu-xref href="#sec-import-calls" id="_ref_513"><a href="ecmascript-language-expressions.html#sec-import-calls"><code>import()</code></a></emu-xref> expression runs. More generally, this can happen in any situation where the <emu-xref href="#host" id="_ref_9219"><a href="overview.html#host">host</a></emu-xref> pushes <emu-xref href="#sec-execution-contexts" id="_ref_9220"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution contexts</a></emu-xref> with <emu-val>null</emu-val> ScriptOrModule components onto the <emu-xref href="#execution-context-stack" id="_ref_9221"><a href="executable-code-and-execution-contexts.html#execution-context-stack">execution context stack</a></emu-xref>.</p>
|
|
</div></emu-note>
|
|
|
|
<p>An implementation of HostLoadImportedModule must conform to the following requirements:</p>
|
|
<ul>
|
|
<li>
|
|
The <emu-xref href="#host-environment" id="_ref_9222"><a href="overview.html#host-environment">host environment</a></emu-xref> must perform <emu-xref aoid="FinishLoadingImportedModule" id="_ref_9223"><a href="ecmascript-language-scripts-and-modules.html#sec-FinishLoadingImportedModule">FinishLoadingImportedModule</a></emu-xref>(<var>referrer</var>, <var>moduleRequest</var>, <var>payload</var>, <var>result</var>), where <var>result</var> is either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_9224"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> the loaded <emu-xref href="#sec-abstract-module-records" id="_ref_9225"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_9226"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>, either synchronously or asynchronously.
|
|
</li>
|
|
<li>
|
|
<p>If this operation is called multiple times with two (<var>referrer</var>, <var>moduleRequest</var>) pairs such that:</p>
|
|
<ul>
|
|
<li>the first <var>referrer</var> is the same as the second <var>referrer</var>;</li>
|
|
<li><emu-xref aoid="ModuleRequestsEqual" id="_ref_9227"><a href="ecmascript-language-scripts-and-modules.html#sec-ModuleRequestsEqual">ModuleRequestsEqual</a></emu-xref>(the first <var>moduleRequest</var>, the second <var>moduleRequest</var>) is <emu-val>true</emu-val>;</li>
|
|
</ul>
|
|
<p>and it performs <emu-xref aoid="FinishLoadingImportedModule" id="_ref_9228"><a href="ecmascript-language-scripts-and-modules.html#sec-FinishLoadingImportedModule">FinishLoadingImportedModule</a></emu-xref>(<var>referrer</var>, <var>moduleRequest</var>, <var>payload</var>, <var>result</var>) where <var>result</var> is a <emu-xref href="#sec-completion-record-specification-type" id="_ref_9229"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion</a></emu-xref>, then it must perform <emu-xref aoid="FinishLoadingImportedModule" id="_ref_9230"><a href="ecmascript-language-scripts-and-modules.html#sec-FinishLoadingImportedModule">FinishLoadingImportedModule</a></emu-xref>(<var>referrer</var>, <var>moduleRequest</var>, <var>payload</var>, <var>result</var>) with the same <var>result</var> each time.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <var>moduleRequest</var>.<var class="field">[[Attributes]]</var> has an entry <var>entry</var> such that <var>entry</var>.<var class="field">[[Key]]</var> is <emu-val>"type"</emu-val> and <var>entry</var>.<var class="field">[[Value]]</var> is <emu-val>"json"</emu-val>, when the <emu-xref href="#host-environment" id="_ref_9231"><a href="overview.html#host-environment">host environment</a></emu-xref> performs <emu-xref aoid="FinishLoadingImportedModule" id="_ref_9232"><a href="ecmascript-language-scripts-and-modules.html#sec-FinishLoadingImportedModule">FinishLoadingImportedModule</a></emu-xref>(<var>referrer</var>, <var>moduleRequest</var>, <var>payload</var>, <var>result</var>), <var>result</var> must either be the <emu-xref href="#sec-completion-record-specification-type" id="_ref_9233"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">Completion Record</a></emu-xref> returned by an invocation of <emu-xref aoid="ParseJSONModule" id="_ref_9234"><a href="ecmascript-language-scripts-and-modules.html#sec-parse-json-module">ParseJSONModule</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_9235"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>.</p>
|
|
</li>
|
|
<li>
|
|
The operation must treat <var>payload</var> as an opaque value to be passed through to <emu-xref aoid="FinishLoadingImportedModule" id="_ref_9236"><a href="ecmascript-language-scripts-and-modules.html#sec-FinishLoadingImportedModule">FinishLoadingImportedModule</a></emu-xref>.
|
|
</li>
|
|
</ul>
|
|
|
|
<p>The actual process performed is <emu-xref href="#host-defined" id="_ref_9237"><a href="overview.html#host-defined">host-defined</a></emu-xref>, but typically consists of performing whatever I/O operations are necessary to load the appropriate <emu-xref href="#sec-abstract-module-records" id="_ref_9238"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>. Multiple different (<var>referrer</var>, <var>moduleRequest</var>.<var class="field">[[Specifier]]</var>, <var>moduleRequest</var>.<var class="field">[[Attributes]]</var>) triples may map to the same <emu-xref href="#sec-abstract-module-records" id="_ref_9239"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref> instance. The actual mapping semantics is <emu-xref href="#host-defined" id="_ref_9240"><a href="overview.html#host-defined">host-defined</a></emu-xref> but typically a normalization process is applied to <var>specifier</var> as part of the mapping process. A typical normalization process would include actions such as expansion of relative and abbreviated path specifiers.</p>
|
|
|
|
<emu-note><span class="note">Note 2</span><div class="note-contents">
|
|
<p>The above text requires that <emu-xref href="#host" id="_ref_9241"><a href="overview.html#host">hosts</a></emu-xref> support JSON modules when imported with <code>type: "json"</code> (and HostLoadImportedModule completes normally), but it does not prohibit <emu-xref href="#host" id="_ref_9242"><a href="overview.html#host">hosts</a></emu-xref> from supporting JSON modules when imported without <code>type: "json"</code>.</p>
|
|
</div></emu-note>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-FinishLoadingImportedModule" type="abstract operation" oldids="sec-finishdynamicimport" aoid="FinishLoadingImportedModule"><span id="sec-finishdynamicimport"></span>
|
|
<h1><span class="secnum">16.2.1.11</span> FinishLoadingImportedModule ( <var>referrer</var>, <var>moduleRequest</var>, <var>payload</var>, <var>result</var> )</h1>
|
|
<p>The abstract operation FinishLoadingImportedModule takes arguments <var>referrer</var> (a <emu-xref href="#script-record" id="_ref_9243"><a href="ecmascript-language-scripts-and-modules.html#script-record">Script Record</a></emu-xref>, a <emu-xref href="#cyclic-module-record" id="_ref_9244"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>, or a <emu-xref href="#realm-record" id="_ref_9245"><a href="executable-code-and-execution-contexts.html#realm-record">Realm Record</a></emu-xref>), <var>moduleRequest</var> (a <emu-xref href="#modulerequest-record" id="_ref_9246"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref>), <var>payload</var> (a <emu-xref href="#graphloadingstate-record" id="_ref_9247"><a href="ecmascript-language-scripts-and-modules.html#graphloadingstate-record">GraphLoadingState Record</a></emu-xref> or a <emu-xref href="#sec-promisecapability-records" id="_ref_9248"><a href="control-abstraction-objects.html#sec-promisecapability-records">PromiseCapability Record</a></emu-xref>), and <var>result</var> (either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_9249"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a <emu-xref href="#sec-abstract-module-records" id="_ref_9250"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_9251"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>) and returns <emu-const>unused</emu-const>. It performs the following steps when called:</p>
|
|
<emu-alg><ol><li>If <var>result</var> is a <emu-xref href="#sec-completion-record-specification-type" id="_ref_9252"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion</a></emu-xref>, then<ol><li>If <var>referrer</var>.<var class="field">[[LoadedModules]]</var> contains a <emu-xref href="#loadedmodulerequest-record" id="_ref_9253"><a href="ecmascript-language-scripts-and-modules.html#loadedmodulerequest-record">LoadedModuleRequest Record</a></emu-xref> <var>record</var> such that <emu-xref aoid="ModuleRequestsEqual" id="_ref_9254"><a href="ecmascript-language-scripts-and-modules.html#sec-ModuleRequestsEqual">ModuleRequestsEqual</a></emu-xref>(<var>record</var>, <var>moduleRequest</var>) is <emu-val>true</emu-val>, then<ol><li><emu-xref href="#assert" id="_ref_9255"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>record</var>.<var class="field">[[Module]]</var> and <var>result</var>.<var class="field">[[Value]]</var> are the same <emu-xref href="#sec-abstract-module-records" id="_ref_9256"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>.</li></ol></li><li>Else,<ol><li>Append the <emu-xref href="#loadedmodulerequest-record" id="_ref_9257"><a href="ecmascript-language-scripts-and-modules.html#loadedmodulerequest-record">LoadedModuleRequest Record</a></emu-xref> { <var class="field">[[Specifier]]</var>: <var>moduleRequest</var>.<var class="field">[[Specifier]]</var>, <var class="field">[[Attributes]]</var>: <var>moduleRequest</var>.<var class="field">[[Attributes]]</var>, <var class="field">[[Module]]</var>: <var>result</var>.<var class="field">[[Value]]</var> } to <var>referrer</var>.<var class="field">[[LoadedModules]]</var>.</li></ol></li></ol></li><li>If <var>payload</var> is a <emu-xref href="#graphloadingstate-record" id="_ref_9258"><a href="ecmascript-language-scripts-and-modules.html#graphloadingstate-record">GraphLoadingState Record</a></emu-xref>, then<ol><li>Perform <emu-xref aoid="ContinueModuleLoading" id="_ref_9259"><a href="ecmascript-language-scripts-and-modules.html#sec-ContinueModuleLoading">ContinueModuleLoading</a></emu-xref>(<var>payload</var>, <var>result</var>).</li></ol></li><li>Else,<ol><li>Perform <emu-xref aoid="ContinueDynamicImport" id="_ref_9260"><a href="ecmascript-language-expressions.html#sec-ContinueDynamicImport">ContinueDynamicImport</a></emu-xref>(<var>payload</var>, <var>result</var>).</li></ol></li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-AllImportAttributesSupported" type="abstract operation" aoid="AllImportAttributesSupported">
|
|
<h1><span class="secnum">16.2.1.12</span> AllImportAttributesSupported ( <var>attributes</var> )</h1>
|
|
<p>The abstract operation AllImportAttributesSupported takes argument <var>attributes</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9261"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#importattribute-record" id="_ref_9262"><a href="ecmascript-language-scripts-and-modules.html#importattribute-record">ImportAttribute Records</a></emu-xref>) and returns a Boolean. It performs the following steps when called:</p>
|
|
<emu-alg><ol><li>Let <var>supported</var> be <emu-xref aoid="HostGetSupportedImportAttributes" id="_ref_9263"><a href="ecmascript-language-scripts-and-modules.html#sec-hostgetsupportedimportattributes">HostGetSupportedImportAttributes</a></emu-xref>().</li><li>For each <emu-xref href="#importattribute-record" id="_ref_9264"><a href="ecmascript-language-scripts-and-modules.html#importattribute-record">ImportAttribute Record</a></emu-xref> <var>attribute</var> of <var>attributes</var>, do<ol><li>If <var>supported</var> does not contain <var>attribute</var>.<var class="field">[[Key]]</var>, return <emu-val>false</emu-val>.</li></ol></li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
|
|
|
|
<emu-clause id="sec-hostgetsupportedimportattributes" type="host-defined abstract operation" aoid="HostGetSupportedImportAttributes">
|
|
<h1><span class="secnum">16.2.1.12.1</span> HostGetSupportedImportAttributes ( )</h1>
|
|
<p>The <emu-xref href="#host-defined" id="_ref_9265"><a href="overview.html#host-defined">host-defined</a></emu-xref> abstract operation HostGetSupportedImportAttributes takes no arguments and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9266"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Strings. It allows <emu-xref href="#host-environment" id="_ref_9267"><a href="overview.html#host-environment">host environments</a></emu-xref> to specify which import attributes they support. Only attributes with supported keys will be provided to the <emu-xref href="#host" id="_ref_9268"><a href="overview.html#host">host</a></emu-xref>.</p>
|
|
|
|
<p>An implementation of HostGetSupportedImportAttributes must conform to the following requirements:</p>
|
|
|
|
<ul>
|
|
<li>It must return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9269"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Strings, each indicating a supported attribute.</li>
|
|
|
|
<li>Each time this operation is called, it must return the same <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9270"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> with the same contents in the same order.</li>
|
|
</ul>
|
|
|
|
<p>The default implementation of HostGetSupportedImportAttributes is to return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9271"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</p>
|
|
|
|
<emu-note><span class="note">Note</span><div class="note-contents">The purpose of requiring the <emu-xref href="#host" id="_ref_9272"><a href="overview.html#host">host</a></emu-xref> to specify its supported import attributes, rather than passing all attributes to the <emu-xref href="#host" id="_ref_9273"><a href="overview.html#host">host</a></emu-xref> and letting it then choose which ones it wants to handle, is to ensure that unsupported attributes are handled in a consistent way across different <emu-xref href="#host" id="_ref_9274"><a href="overview.html#host">hosts</a></emu-xref>.</div></emu-note>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-getmodulenamespace" type="abstract operation" aoid="GetModuleNamespace">
|
|
<h1><span class="secnum">16.2.1.13</span> GetModuleNamespace ( <var>module</var> )</h1>
|
|
<p>The abstract operation GetModuleNamespace takes argument <var>module</var> (an instance of a concrete subclass of <emu-xref href="#sec-abstract-module-records" id="_ref_9275"><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records">Module Record</a></emu-xref>) and returns a Module Namespace Object. It retrieves the Module Namespace Object representing <var>module</var>'s exports, lazily creating it the first time it was requested, and storing it in <var>module</var>.<var class="field">[[Namespace]]</var> for future retrieval. It performs the following steps when called:</p>
|
|
|
|
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_9276"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: If <var>module</var> is a <emu-xref href="#cyclic-module-record" id="_ref_9277"><a href="ecmascript-language-scripts-and-modules.html#cyclic-module-record">Cyclic Module Record</a></emu-xref>, then <var>module</var>.<var class="field">[[Status]]</var> is not <emu-const>new</emu-const> or <emu-const>unlinked</emu-const>.</li><li>Let <var>namespace</var> be <var>module</var>.<var class="field">[[Namespace]]</var>.</li><li>If <var>namespace</var> is <emu-const>empty</emu-const>, then<ol><li>Let <var>exportedNames</var> be <var>module</var>.<emu-xref aoid="GetExportedNames" id="_ref_9278"><a href="ecmascript-language-scripts-and-modules.html#abstract-getexportednames">GetExportedNames</a></emu-xref>().</li><li>Let <var>unambiguousNames</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9279"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>For each element <var>name</var> of <var>exportedNames</var>, do<ol><li>Let <var>resolution</var> be <var>module</var>.<emu-xref aoid="ResolveExport" id="_ref_9280"><a href="ecmascript-language-scripts-and-modules.html#abstract-resolveexport">ResolveExport</a></emu-xref>(<var>name</var>).</li><li>If <var>resolution</var> is a <emu-xref href="#resolvedbinding-record" id="_ref_9281"><a href="ecmascript-language-scripts-and-modules.html#resolvedbinding-record">ResolvedBinding Record</a></emu-xref>, append <var>name</var> to <var>unambiguousNames</var>.</li></ol></li><li>Set <var>namespace</var> to <emu-xref aoid="ModuleNamespaceCreate" id="_ref_9282"><a href="ordinary-and-exotic-objects-behaviours.html#sec-modulenamespacecreate">ModuleNamespaceCreate</a></emu-xref>(<var>module</var>, <var>unambiguousNames</var>).</li></ol></li><li>Return <var>namespace</var>.</li></ol></emu-alg>
|
|
<emu-note><span class="note">Note</span><div class="note-contents">
|
|
<p>GetModuleNamespace never throws. Instead, unresolvable names are simply excluded from the namespace at this point. They will lead to a real linking error later unless they are all ambiguous star exports that are not explicitly requested anywhere.</p>
|
|
</div></emu-note>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-module-semantics-runtime-semantics-evaluation" type="sdo">
|
|
<h1><span class="secnum">16.2.1.14</span> Runtime Semantics: Evaluation</h1>
|
|
<emu-grammar><emu-production name="Module" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n7nathbb" id="prod-950spMs_"><emu-gann>[empty]</emu-gann></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return <emu-val>undefined</emu-val>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ModuleBody" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleBody">ModuleBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="iqenfemp" id="prod-6SEwZT9o"><emu-nt id="_ref_23516"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>result</var> be <emu-xref aoid="Completion" id="_ref_9283"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="Evaluation" id="_ref_9284"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_23517"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>).</li><li>If <var>result</var> is a <emu-xref href="#sec-completion-record-specification-type" id="_ref_9285"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion</a></emu-xref> and <var>result</var>.<var class="field">[[Value]]</var> is <emu-const>empty</emu-const>, then<ol><li>Return <emu-val>undefined</emu-val>.</li></ol></li><li>Return ? <var>result</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ModuleItemList" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dd23jrxs" id="prod-a5nZ7X_y">
|
|
<emu-nt id="_ref_23518"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>
|
|
<emu-nt id="_ref_23519"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>sl</var> be ? <emu-xref aoid="Evaluation" id="_ref_9286"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_23520"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>.</li><li>Let <var>s</var> be <emu-xref aoid="Completion" id="_ref_9287"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="Evaluation" id="_ref_9288"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_23521"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt>).</li><li>Return ? <emu-xref aoid="UpdateEmpty" id="_ref_9289"><a href="ecmascript-data-types-and-values.html#sec-updateempty">UpdateEmpty</a></emu-xref>(<var>s</var>, <var>sl</var>).</li></ol></emu-alg>
|
|
<emu-note><span class="note">Note</span><div class="note-contents">
|
|
<p>The value of a <emu-nt id="_ref_23522"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> is the value of the last value-producing item in the <emu-nt id="_ref_23523"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>.</p>
|
|
</div></emu-note>
|
|
<emu-grammar><emu-production name="ModuleItem" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4fwtd8-6" id="prod-45q8t20X"><emu-nt id="_ref_23524"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return <emu-const>empty</emu-const>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-imports">
|
|
<h1><span class="secnum">16.2.2</span> Imports</h1>
|
|
<h2>Syntax</h2>
|
|
<emu-grammar type="definition"><emu-production name="ImportDeclaration" id="prod-ImportDeclaration">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="3jk_0iim" id="prod-z-GN-HIp">
|
|
<emu-t>import</emu-t>
|
|
<emu-nt id="_ref_23525"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportClause">ImportClause</a></emu-nt>
|
|
<emu-nt id="_ref_23526"><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt>
|
|
<emu-nt optional="" id="_ref_23527"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
<emu-rhs a="wzi3qp4_" id="prod-OCPQ4qHa">
|
|
<emu-t>import</emu-t>
|
|
<emu-nt id="_ref_23528"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleSpecifier">ModuleSpecifier</a></emu-nt>
|
|
<emu-nt optional="" id="_ref_23529"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="ImportClause" id="prod-ImportClause">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportClause">ImportClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="oi8izote">
|
|
<emu-nt id="_ref_23530"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedDefaultBinding">ImportedDefaultBinding</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="81tm-dw4">
|
|
<emu-nt id="_ref_23531"><a href="ecmascript-language-scripts-and-modules.html#prod-NameSpaceImport">NameSpaceImport</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="zfagpfvq">
|
|
<emu-nt id="_ref_23532"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedImports">NamedImports</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="y9r1l58g" id="prod-kEa0XgB6">
|
|
<emu-nt id="_ref_23533"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedDefaultBinding">ImportedDefaultBinding</a></emu-nt>
|
|
<emu-t>,</emu-t>
|
|
<emu-nt id="_ref_23534"><a href="ecmascript-language-scripts-and-modules.html#prod-NameSpaceImport">NameSpaceImport</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="ih8rgsdx" id="prod-wyOKxI9w">
|
|
<emu-nt id="_ref_23535"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedDefaultBinding">ImportedDefaultBinding</a></emu-nt>
|
|
<emu-t>,</emu-t>
|
|
<emu-nt id="_ref_23536"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedImports">NamedImports</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="ImportedDefaultBinding" id="prod-ImportedDefaultBinding">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedDefaultBinding">ImportedDefaultBinding</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vt7awvcp" id="prod-XHs8lcig">
|
|
<emu-nt id="_ref_23537"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedBinding">ImportedBinding</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="NameSpaceImport" id="prod-NameSpaceImport">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-NameSpaceImport">NameSpaceImport</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="t2qf80pb" id="prod-AScJop1Y">
|
|
<emu-t>*</emu-t>
|
|
<emu-t>as</emu-t>
|
|
<emu-nt id="_ref_23538"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedBinding">ImportedBinding</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="NamedImports" id="prod-NamedImports">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-NamedImports">NamedImports</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gbpaspne" id="prod-SkqVKtrZ">
|
|
<emu-t>{</emu-t>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
<emu-rhs a="g1js-lhi">
|
|
<emu-t>{</emu-t>
|
|
<emu-nt id="_ref_23539"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportsList">ImportsList</a></emu-nt>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
<emu-rhs a="bxjtogxx">
|
|
<emu-t>{</emu-t>
|
|
<emu-nt id="_ref_23540"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportsList">ImportsList</a></emu-nt>
|
|
<emu-t>,</emu-t>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="FromClause" id="prod-FromClause">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="rev6es22">
|
|
<emu-t>from</emu-t>
|
|
<emu-nt id="_ref_23541"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleSpecifier">ModuleSpecifier</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="ImportsList" id="prod-ImportsList">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportsList">ImportsList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="upllvvnq">
|
|
<emu-nt id="_ref_23542"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportSpecifier">ImportSpecifier</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="ggcfvgot" id="prod-UCgvcMcb">
|
|
<emu-nt id="_ref_23543"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportsList">ImportsList</a></emu-nt>
|
|
<emu-t>,</emu-t>
|
|
<emu-nt id="_ref_23544"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportSpecifier">ImportSpecifier</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="ImportSpecifier" id="prod-ImportSpecifier">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportSpecifier">ImportSpecifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vt7awvcp" id="prod-z0N66GR4">
|
|
<emu-nt id="_ref_23545"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedBinding">ImportedBinding</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="nso-0w0x" id="prod-7GW8ul0v">
|
|
<emu-nt id="_ref_23546"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
<emu-t>as</emu-t>
|
|
<emu-nt id="_ref_23547"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedBinding">ImportedBinding</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="ModuleSpecifier" id="prod-ModuleSpecifier">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleSpecifier">ModuleSpecifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xhtltz00">
|
|
<emu-nt id="_ref_23548"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="ImportedBinding" id="prod-ImportedBinding">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedBinding">ImportedBinding</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ni7cnis3">
|
|
<emu-nt params="~Yield, +Await" id="_ref_23549"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[~Yield, +Await]</emu-params></emu-mods></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="WithClause" id="prod-WithClause">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="f2ll3iev" id="prod-xLj2bJln">
|
|
<emu-t>with</emu-t>
|
|
<emu-t>{</emu-t>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
<emu-rhs a="o54eack7" id="prod-d4roO8vu">
|
|
<emu-t>with</emu-t>
|
|
<emu-t>{</emu-t>
|
|
<emu-nt id="_ref_23550"><a href="ecmascript-language-scripts-and-modules.html#prod-WithEntries">WithEntries</a></emu-nt>
|
|
<emu-t optional="">,<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="WithEntries" id="prod-WithEntries">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-WithEntries">WithEntries</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="km78hpv7" id="prod-0HE4RviZ">
|
|
<emu-nt id="_ref_23551"><a href="ecmascript-language-scripts-and-modules.html#prod-AttributeKey">AttributeKey</a></emu-nt>
|
|
<emu-t>:</emu-t>
|
|
<emu-nt id="_ref_23552"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="eu8tt0zo" id="prod-oClSJ6kb">
|
|
<emu-nt id="_ref_23553"><a href="ecmascript-language-scripts-and-modules.html#prod-AttributeKey">AttributeKey</a></emu-nt>
|
|
<emu-t>:</emu-t>
|
|
<emu-nt id="_ref_23554"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt>
|
|
<emu-t>,</emu-t>
|
|
<emu-nt id="_ref_23555"><a href="ecmascript-language-scripts-and-modules.html#prod-WithEntries">WithEntries</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="AttributeKey" id="prod-AttributeKey">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-AttributeKey">AttributeKey</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="drsx4tka" id="prod-OoOZVSpA">
|
|
<emu-nt id="_ref_23556"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="xhtltz00" id="prod-CstywuHG">
|
|
<emu-nt id="_ref_23557"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
|
|
<emu-clause id="sec-imports-static-semantics-early-errors">
|
|
<h1><span class="secnum">16.2.2.1</span> Static Semantics: Early Errors</h1>
|
|
<emu-grammar><emu-production name="ModuleItem" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4fwtd8-6"><emu-nt id="_ref_23558"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<ul>
|
|
<li>
|
|
It is a Syntax Error if the <emu-xref aoid="BoundNames" id="_ref_9290"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_23559"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt> contains any duplicate entries.
|
|
</li>
|
|
</ul>
|
|
|
|
<emu-grammar><emu-production name="WithClause" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="o54eack7">
|
|
<emu-t>with</emu-t>
|
|
<emu-t>{</emu-t>
|
|
<emu-nt id="_ref_23560"><a href="ecmascript-language-scripts-and-modules.html#prod-WithEntries">WithEntries</a></emu-nt>
|
|
<emu-t optional="">,<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<ul>
|
|
<li>
|
|
It is a Syntax Error if <emu-xref aoid="WithClauseToAttributes" id="_ref_9291"><a href="ecmascript-language-scripts-and-modules.html#sec-withclausetoattributes">WithClauseToAttributes</a></emu-xref> of <emu-nt id="_ref_23561"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a></emu-nt> has two different entries <var>a</var> and <var>b</var> such that <var>a</var>.<var class="field">[[Key]]</var> is <var>b</var>.<var class="field">[[Key]]</var>.
|
|
</li>
|
|
</ul>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-static-semantics-importentries" oldids="sec-module-semantics-static-semantics-importentries,sec-imports-static-semantics-importentries" type="sdo" aoid="ImportEntries"><span id="sec-imports-static-semantics-importentries"></span><span id="sec-module-semantics-static-semantics-importentries"></span>
|
|
<h1><span class="secnum">16.2.2.2</span> Static Semantics: ImportEntries</h1>
|
|
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_9292"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ImportEntries takes no arguments and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9293"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#importentry-record" id="_ref_9294"><a href="ecmascript-language-scripts-and-modules.html#importentry-record">ImportEntry Records</a></emu-xref>. It is defined piecewise over the following productions:</p>
|
|
<emu-grammar><emu-production name="Module" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n7nathbb" id="prod-65kV3a3C"><emu-gann>[empty]</emu-gann></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9295"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ModuleItemList" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dd23jrxs" id="prod-8cqfbQ1C">
|
|
<emu-nt id="_ref_23562"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>
|
|
<emu-nt id="_ref_23563"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>entries1</var> be the <emu-xref aoid="ImportEntries" id="_ref_9296"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentries">ImportEntries</a></emu-xref> of <emu-nt id="_ref_23564"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>.</li><li>Let <var>entries2</var> be the <emu-xref aoid="ImportEntries" id="_ref_9297"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentries">ImportEntries</a></emu-xref> of <emu-nt id="_ref_23565"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_9298"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>entries1</var> and <var>entries2</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ModuleItem">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ky6bsn7x" id="prod-qEXtoziY">
|
|
<emu-nt id="_ref_23566"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="15hryu6r" id="prod-myYDa7qJ">
|
|
<emu-nt id="_ref_23567"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementListItem">StatementListItem</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9299"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ImportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="3jk_0iim" id="prod-38hkzOjh">
|
|
<emu-t>import</emu-t>
|
|
<emu-nt id="_ref_23568"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportClause">ImportClause</a></emu-nt>
|
|
<emu-nt id="_ref_23569"><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt>
|
|
<emu-nt optional="" id="_ref_23570"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>module</var> be the sole element of the <emu-xref aoid="ModuleRequests" id="_ref_9300"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-modulerequests">ModuleRequests</a></emu-xref> of <emu-nt id="_ref_23571"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt>.</li><li>Return the <emu-xref aoid="ImportEntriesForModule" id="_ref_9301"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentriesformodule">ImportEntriesForModule</a></emu-xref> of <emu-nt id="_ref_23572"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportClause">ImportClause</a></emu-nt> with argument <var>module</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ImportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="wzi3qp4_" id="prod-C5SFxtu0">
|
|
<emu-t>import</emu-t>
|
|
<emu-nt id="_ref_23573"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleSpecifier">ModuleSpecifier</a></emu-nt>
|
|
<emu-nt optional="" id="_ref_23574"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9302"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-static-semantics-importentriesformodule" type="sdo" aoid="ImportEntriesForModule">
|
|
<h1><span class="secnum">16.2.2.3</span> Static Semantics: ImportEntriesForModule</h1>
|
|
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_9303"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ImportEntriesForModule takes argument <var>module</var> (a <emu-xref href="#modulerequest-record" id="_ref_9304"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref>) and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9305"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#importentry-record" id="_ref_9306"><a href="ecmascript-language-scripts-and-modules.html#importentry-record">ImportEntry Records</a></emu-xref>. It is defined piecewise over the following productions:</p>
|
|
<emu-grammar><emu-production name="ImportClause" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportClause">ImportClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="y9r1l58g" id="prod-ejkMSdRd">
|
|
<emu-nt id="_ref_23575"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedDefaultBinding">ImportedDefaultBinding</a></emu-nt>
|
|
<emu-t>,</emu-t>
|
|
<emu-nt id="_ref_23576"><a href="ecmascript-language-scripts-and-modules.html#prod-NameSpaceImport">NameSpaceImport</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>entries1</var> be the <emu-xref aoid="ImportEntriesForModule" id="_ref_9307"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentriesformodule">ImportEntriesForModule</a></emu-xref> of <emu-nt id="_ref_23577"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedDefaultBinding">ImportedDefaultBinding</a></emu-nt> with argument <var>module</var>.</li><li>Let <var>entries2</var> be the <emu-xref aoid="ImportEntriesForModule" id="_ref_9308"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentriesformodule">ImportEntriesForModule</a></emu-xref> of <emu-nt id="_ref_23578"><a href="ecmascript-language-scripts-and-modules.html#prod-NameSpaceImport">NameSpaceImport</a></emu-nt> with argument <var>module</var>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_9309"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>entries1</var> and <var>entries2</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ImportClause" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportClause">ImportClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ih8rgsdx" id="prod-0jSzNM4w">
|
|
<emu-nt id="_ref_23579"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedDefaultBinding">ImportedDefaultBinding</a></emu-nt>
|
|
<emu-t>,</emu-t>
|
|
<emu-nt id="_ref_23580"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedImports">NamedImports</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>entries1</var> be the <emu-xref aoid="ImportEntriesForModule" id="_ref_9310"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentriesformodule">ImportEntriesForModule</a></emu-xref> of <emu-nt id="_ref_23581"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedDefaultBinding">ImportedDefaultBinding</a></emu-nt> with argument <var>module</var>.</li><li>Let <var>entries2</var> be the <emu-xref aoid="ImportEntriesForModule" id="_ref_9311"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentriesformodule">ImportEntriesForModule</a></emu-xref> of <emu-nt id="_ref_23582"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedImports">NamedImports</a></emu-nt> with argument <var>module</var>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_9312"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>entries1</var> and <var>entries2</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ImportedDefaultBinding" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedDefaultBinding">ImportedDefaultBinding</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vt7awvcp" id="prod-8iON-ECl"><emu-nt id="_ref_23583"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedBinding">ImportedBinding</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>localName</var> be the sole element of the <emu-xref aoid="BoundNames" id="_ref_9313"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_23584"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedBinding">ImportedBinding</a></emu-nt>.</li><li>Let <var>defaultEntry</var> be the <emu-xref href="#importentry-record" id="_ref_9314"><a href="ecmascript-language-scripts-and-modules.html#importentry-record">ImportEntry Record</a></emu-xref> { <var class="field">[[ModuleRequest]]</var>: <var>module</var>, <var class="field">[[ImportName]]</var>: <emu-val>"default"</emu-val>, <var class="field">[[LocalName]]</var>: <var>localName</var> }.</li><li>Return « <var>defaultEntry</var> ».</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="NameSpaceImport" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-NameSpaceImport">NameSpaceImport</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="t2qf80pb" id="prod-UUrB05kM">
|
|
<emu-t>*</emu-t>
|
|
<emu-t>as</emu-t>
|
|
<emu-nt id="_ref_23585"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedBinding">ImportedBinding</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>localName</var> be the <emu-xref aoid="StringValue" id="_ref_9315"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_23586"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedBinding">ImportedBinding</a></emu-nt>.</li><li>Let <var>entry</var> be the <emu-xref href="#importentry-record" id="_ref_9316"><a href="ecmascript-language-scripts-and-modules.html#importentry-record">ImportEntry Record</a></emu-xref> { <var class="field">[[ModuleRequest]]</var>: <var>module</var>, <var class="field">[[ImportName]]</var>: <emu-const>namespace-object</emu-const>, <var class="field">[[LocalName]]</var>: <var>localName</var> }.</li><li>Return « <var>entry</var> ».</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="NamedImports" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-NamedImports">NamedImports</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gbpaspne" id="prod-Cg-QzVAj">
|
|
<emu-t>{</emu-t>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9317"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ImportsList" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportsList">ImportsList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ggcfvgot" id="prod-nXrDLJR0">
|
|
<emu-nt id="_ref_23587"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportsList">ImportsList</a></emu-nt>
|
|
<emu-t>,</emu-t>
|
|
<emu-nt id="_ref_23588"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportSpecifier">ImportSpecifier</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>specs1</var> be the <emu-xref aoid="ImportEntriesForModule" id="_ref_9318"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentriesformodule">ImportEntriesForModule</a></emu-xref> of <emu-nt id="_ref_23589"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportsList">ImportsList</a></emu-nt> with argument <var>module</var>.</li><li>Let <var>specs2</var> be the <emu-xref aoid="ImportEntriesForModule" id="_ref_9319"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentriesformodule">ImportEntriesForModule</a></emu-xref> of <emu-nt id="_ref_23590"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportSpecifier">ImportSpecifier</a></emu-nt> with argument <var>module</var>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_9320"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>specs1</var> and <var>specs2</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ImportSpecifier" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportSpecifier">ImportSpecifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vt7awvcp" id="prod-EknrR_3b"><emu-nt id="_ref_23591"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedBinding">ImportedBinding</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>localName</var> be the sole element of the <emu-xref aoid="BoundNames" id="_ref_9321"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_23592"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedBinding">ImportedBinding</a></emu-nt>.</li><li>Let <var>entry</var> be the <emu-xref href="#importentry-record" id="_ref_9322"><a href="ecmascript-language-scripts-and-modules.html#importentry-record">ImportEntry Record</a></emu-xref> { <var class="field">[[ModuleRequest]]</var>: <var>module</var>, <var class="field">[[ImportName]]</var>: <var>localName</var>, <var class="field">[[LocalName]]</var>: <var>localName</var> }.</li><li>Return « <var>entry</var> ».</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ImportSpecifier" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ImportSpecifier">ImportSpecifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nso-0w0x" id="prod-iQJyYMlU">
|
|
<emu-nt id="_ref_23593"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
<emu-t>as</emu-t>
|
|
<emu-nt id="_ref_23594"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedBinding">ImportedBinding</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>importName</var> be the <emu-xref aoid="StringValue" id="_ref_9323"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_23595"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>.</li><li>Let <var>localName</var> be the <emu-xref aoid="StringValue" id="_ref_9324"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_23596"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportedBinding">ImportedBinding</a></emu-nt>.</li><li>Let <var>entry</var> be the <emu-xref href="#importentry-record" id="_ref_9325"><a href="ecmascript-language-scripts-and-modules.html#importentry-record">ImportEntry Record</a></emu-xref> { <var class="field">[[ModuleRequest]]</var>: <var>module</var>, <var class="field">[[ImportName]]</var>: <var>importName</var>, <var class="field">[[LocalName]]</var>: <var>localName</var> }.</li><li>Return « <var>entry</var> ».</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-withclausetoattributes" type="sdo" aoid="WithClauseToAttributes">
|
|
<h1><span class="secnum">16.2.2.4</span> Static Semantics: WithClauseToAttributes</h1>
|
|
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_9326"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> WithClauseToAttributes takes no arguments and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9327"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#importattribute-record" id="_ref_9328"><a href="ecmascript-language-scripts-and-modules.html#importattribute-record">ImportAttribute Records</a></emu-xref>. It is defined piecewise over the following productions:</p>
|
|
|
|
<emu-grammar><emu-production name="WithClause" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="f2ll3iev" id="prod-1UPpcS0w">
|
|
<emu-t>with</emu-t>
|
|
<emu-t>{</emu-t>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9329"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
|
|
<emu-grammar><emu-production name="WithClause" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="o54eack7" id="prod-8QmTjvbt">
|
|
<emu-t>with</emu-t>
|
|
<emu-t>{</emu-t>
|
|
<emu-nt id="_ref_23597"><a href="ecmascript-language-scripts-and-modules.html#prod-WithEntries">WithEntries</a></emu-nt>
|
|
<emu-t optional="">,<emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-t>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>attributes</var> be <emu-xref aoid="WithClauseToAttributes" id="_ref_9330"><a href="ecmascript-language-scripts-and-modules.html#sec-withclausetoattributes">WithClauseToAttributes</a></emu-xref> of <emu-nt id="_ref_23598"><a href="ecmascript-language-scripts-and-modules.html#prod-WithEntries">WithEntries</a></emu-nt>.</li><li>Sort <var>attributes</var> according to the lexicographic order of their <var class="field">[[Key]]</var> field, treating the value of each such field as a sequence of UTF-16 code unit values. NOTE: This sorting is observable only in that <emu-xref href="#host" id="_ref_9331"><a href="overview.html#host">hosts</a></emu-xref> are prohibited from changing behaviour based on the order in which attributes are enumerated.</li><li>Return <var>attributes</var>.</li></ol></emu-alg>
|
|
|
|
<emu-grammar><emu-production name="WithEntries" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-WithEntries">WithEntries</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="km78hpv7" id="prod-_N0cbM5m">
|
|
<emu-nt id="_ref_23599"><a href="ecmascript-language-scripts-and-modules.html#prod-AttributeKey">AttributeKey</a></emu-nt>
|
|
<emu-t>:</emu-t>
|
|
<emu-nt id="_ref_23600"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>key</var> be the <emu-xref aoid="PropName" id="_ref_9332"><a href="syntax-directed-operations.html#sec-static-semantics-propname">PropName</a></emu-xref> of <emu-nt id="_ref_23601"><a href="ecmascript-language-scripts-and-modules.html#prod-AttributeKey">AttributeKey</a></emu-nt>.</li><li>Let <var>entry</var> be the <emu-xref href="#importattribute-record" id="_ref_9333"><a href="ecmascript-language-scripts-and-modules.html#importattribute-record">ImportAttribute Record</a></emu-xref> { <var class="field">[[Key]]</var>: <var>key</var>, <var class="field">[[Value]]</var>: the <emu-xref aoid="SV" id="_ref_9334"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv">SV</a></emu-xref> of <emu-nt id="_ref_23602"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt> }.</li><li>Return « <var>entry</var> ».</li></ol></emu-alg>
|
|
|
|
<emu-grammar><emu-production name="WithEntries" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-WithEntries">WithEntries</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="eu8tt0zo" id="prod-yNAe-CX-">
|
|
<emu-nt id="_ref_23603"><a href="ecmascript-language-scripts-and-modules.html#prod-AttributeKey">AttributeKey</a></emu-nt>
|
|
<emu-t>:</emu-t>
|
|
<emu-nt id="_ref_23604"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt>
|
|
<emu-t>,</emu-t>
|
|
<emu-nt id="_ref_23605"><a href="ecmascript-language-scripts-and-modules.html#prod-WithEntries">WithEntries</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>key</var> be the <emu-xref aoid="PropName" id="_ref_9335"><a href="syntax-directed-operations.html#sec-static-semantics-propname">PropName</a></emu-xref> of <emu-nt id="_ref_23606"><a href="ecmascript-language-scripts-and-modules.html#prod-AttributeKey">AttributeKey</a></emu-nt>.</li><li>Let <var>entry</var> be the <emu-xref href="#importattribute-record" id="_ref_9336"><a href="ecmascript-language-scripts-and-modules.html#importattribute-record">ImportAttribute Record</a></emu-xref> { <var class="field">[[Key]]</var>: <var>key</var>, <var class="field">[[Value]]</var>: the <emu-xref aoid="SV" id="_ref_9337"><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv">SV</a></emu-xref> of <emu-nt id="_ref_23607"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt> }.</li><li>Let <var>rest</var> be <emu-xref aoid="WithClauseToAttributes" id="_ref_9338"><a href="ecmascript-language-scripts-and-modules.html#sec-withclausetoattributes">WithClauseToAttributes</a></emu-xref> of <emu-nt id="_ref_23608"><a href="ecmascript-language-scripts-and-modules.html#prod-WithEntries">WithEntries</a></emu-nt>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_9339"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of « <var>entry</var> » and <var>rest</var>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-exports">
|
|
<h1><span class="secnum">16.2.3</span> Exports</h1>
|
|
<h2>Syntax</h2>
|
|
<emu-grammar type="definition"><emu-production name="ExportDeclaration" id="prod-ExportDeclaration">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gperhudl" id="prod-HJoNzJ3e">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23609"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportFromClause">ExportFromClause</a></emu-nt>
|
|
<emu-nt id="_ref_23610"><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt>
|
|
<emu-nt optional="" id="_ref_23611"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
<emu-rhs a="j2lh_kda" id="prod---2Mdo2Q">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23612"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
<emu-rhs a="rudz_osj" id="prod-w_WAVAwX">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt params="~Yield, +Await" id="_ref_23613"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableStatement">VariableStatement</a><emu-mods><emu-params>[~Yield, +Await]</emu-params></emu-mods></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="cshvsnoo" id="prod-60Xh0dpZ">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt params="~Yield, +Await" id="_ref_23614"><a href="ecmascript-language-statements-and-declarations.html#prod-Declaration">Declaration</a><emu-mods><emu-params>[~Yield, +Await]</emu-params></emu-mods></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="pkwjy2r6" id="prod-bE4rfMak">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt params="~Yield, +Await, +Default" id="_ref_23615"><a href="ecmascript-language-statements-and-declarations.html#prod-HoistableDeclaration">HoistableDeclaration</a><emu-mods><emu-params>[~Yield, +Await, +Default]</emu-params></emu-mods></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="hf5nsghg" id="prod-KPFnW3Lq">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt params="~Yield, +Await, +Default" id="_ref_23616"><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a><emu-mods><emu-params>[~Yield, +Await, +Default]</emu-params></emu-mods></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="33r7jf_e" id="prod-GUPXSqcT">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-gann>[lookahead ∉ { <emu-t>function</emu-t>, <emu-t>async</emu-t>
|
|
<emu-gann>[no <emu-nt id="_ref_23617"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
|
|
<emu-t>function</emu-t>, <emu-t>class</emu-t> }]</emu-gann>
|
|
<emu-nt params="+In, ~Yield, +Await" id="_ref_23618"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[+In, ~Yield, +Await]</emu-params></emu-mods></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="ExportFromClause" id="prod-ExportFromClause">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportFromClause">ExportFromClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="sb5ztei-" id="prod-efW0NtUW">
|
|
<emu-t>*</emu-t>
|
|
</emu-rhs>
|
|
<emu-rhs a="hf05qfgg" id="prod-N6rwTU5m">
|
|
<emu-t>*</emu-t>
|
|
<emu-t>as</emu-t>
|
|
<emu-nt id="_ref_23619"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="_xs5tuve" id="prod-gG1rdVmA">
|
|
<emu-nt id="_ref_23620"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="NamedExports" id="prod-NamedExports">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gbpaspne" id="prod-tKOro2Xm">
|
|
<emu-t>{</emu-t>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
<emu-rhs a="kbfbtt8z">
|
|
<emu-t>{</emu-t>
|
|
<emu-nt id="_ref_23621"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
<emu-rhs a="wwyi_qo2">
|
|
<emu-t>{</emu-t>
|
|
<emu-nt id="_ref_23622"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt>
|
|
<emu-t>,</emu-t>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="ExportsList" id="prod-ExportsList">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="w1vp78-i">
|
|
<emu-nt id="_ref_23623"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="gqfndot_" id="prod-JgWQiNCe">
|
|
<emu-nt id="_ref_23624"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt>
|
|
<emu-t>,</emu-t>
|
|
<emu-nt id="_ref_23625"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
<emu-production name="ExportSpecifier" id="prod-ExportSpecifier">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="6isvnzvv" id="prod-GlqP_AXb">
|
|
<emu-nt id="_ref_23626"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="hbgjxuav" id="prod-ya486nM7">
|
|
<emu-nt id="_ref_23627"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
<emu-t>as</emu-t>
|
|
<emu-nt id="_ref_23628"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
|
|
<emu-clause id="sec-exports-static-semantics-early-errors">
|
|
<h1><span class="secnum">16.2.3.1</span> Static Semantics: Early Errors</h1>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="j2lh_kda">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23629"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<ul>
|
|
<li>
|
|
It is a Syntax Error if the <emu-xref aoid="ReferencedBindings" id="_ref_9340"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-referencedbindings">ReferencedBindings</a></emu-xref> of <emu-nt id="_ref_23630"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt> contains any <emu-nt id="_ref_23631"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt>s.
|
|
</li>
|
|
<li>
|
|
For each <emu-nt id="_ref_23632"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt> <var>n</var> in the <emu-xref aoid="ReferencedBindings" id="_ref_9341"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-referencedbindings">ReferencedBindings</a></emu-xref> of <emu-nt id="_ref_23633"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt>: It is a Syntax Error if the <emu-xref aoid="StringValue" id="_ref_9342"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <var>n</var> is a <emu-nt id="_ref_23634"><a href="ecmascript-language-lexical-grammar.html#prod-ReservedWord">ReservedWord</a></emu-nt> or the <emu-xref aoid="StringValue" id="_ref_9343"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <var>n</var> is one of <emu-val>"implements"</emu-val>, <emu-val>"interface"</emu-val>, <emu-val>"let"</emu-val>, <emu-val>"package"</emu-val>, <emu-val>"private"</emu-val>, <emu-val>"protected"</emu-val>, <emu-val>"public"</emu-val>, or <emu-val>"static"</emu-val>.
|
|
</li>
|
|
</ul>
|
|
<emu-note><span class="note">Note</span><div class="note-contents">
|
|
<p>The above rule means that each <emu-xref aoid="ReferencedBindings" id="_ref_9344"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-referencedbindings">ReferencedBindings</a></emu-xref> of <emu-nt id="_ref_23635"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt> is treated as an <emu-nt id="_ref_23636"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt>.</p>
|
|
</div></emu-note>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-static-semantics-exportedbindings" oldids="sec-module-semantics-static-semantics-exportedbindings,sec-exports-static-semantics-exportedbindings" type="sdo" aoid="ExportedBindings"><span id="sec-exports-static-semantics-exportedbindings"></span><span id="sec-module-semantics-static-semantics-exportedbindings"></span>
|
|
<h1><span class="secnum">16.2.3.2</span> Static Semantics: ExportedBindings</h1>
|
|
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_9345"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ExportedBindings takes no arguments and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9346"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Strings.</p>
|
|
<emu-note><span class="note">Note</span><div class="note-contents">
|
|
<p>ExportedBindings are the locally bound names that are explicitly associated with a <emu-nt id="_ref_23637"><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt>'s <emu-xref aoid="ExportedNames" id="_ref_9347"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportednames">ExportedNames</a></emu-xref>.</p>
|
|
</div></emu-note>
|
|
<p>It is defined piecewise over the following productions:</p>
|
|
<emu-grammar><emu-production name="ModuleItemList" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dd23jrxs" id="prod-hxF0P9sA">
|
|
<emu-nt id="_ref_23638"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>
|
|
<emu-nt id="_ref_23639"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>names1</var> be the <emu-xref aoid="ExportedBindings" id="_ref_9348"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportedbindings">ExportedBindings</a></emu-xref> of <emu-nt id="_ref_23640"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>.</li><li>Let <var>names2</var> be the <emu-xref aoid="ExportedBindings" id="_ref_9349"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportedbindings">ExportedBindings</a></emu-xref> of <emu-nt id="_ref_23641"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_9350"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>names1</var> and <var>names2</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ModuleItem">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4fwtd8-6" id="prod-6U1eQAFM">
|
|
<emu-nt id="_ref_23642"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="15hryu6r" id="prod-KKQ0xR-v">
|
|
<emu-nt id="_ref_23643"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementListItem">StatementListItem</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9351"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gperhudl" id="prod-WUct3Vhy">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23644"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportFromClause">ExportFromClause</a></emu-nt>
|
|
<emu-nt id="_ref_23645"><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt>
|
|
<emu-nt optional="" id="_ref_23646"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9352"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="j2lh_kda" id="prod-OFghu2j_">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23647"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return the <emu-xref aoid="ExportedBindings" id="_ref_9353"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportedbindings">ExportedBindings</a></emu-xref> of <emu-nt id="_ref_23648"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bg3oaw2m" id="prod-IJxf-Cdm">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23649"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableStatement">VariableStatement</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return the <emu-xref aoid="BoundNames" id="_ref_9354"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_23650"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableStatement">VariableStatement</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="go9a4xdq" id="prod-PahxJv8L">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23651"><a href="ecmascript-language-statements-and-declarations.html#prod-Declaration">Declaration</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return the <emu-xref aoid="BoundNames" id="_ref_9355"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_23652"><a href="ecmascript-language-statements-and-declarations.html#prod-Declaration">Declaration</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cdfbfvfu" id="prod-Ltk1AbDn">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt id="_ref_23653"><a href="ecmascript-language-statements-and-declarations.html#prod-HoistableDeclaration">HoistableDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="w8pljwgc" id="prod-kSrXZybF">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt id="_ref_23654"><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="4f6ct71n" id="prod-tftEFTtX">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt id="_ref_23655"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return the <emu-xref aoid="BoundNames" id="_ref_9356"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of this <emu-nt id="_ref_23656"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="NamedExports" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gbpaspne" id="prod-TQTcajTg">
|
|
<emu-t>{</emu-t>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9357"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportsList" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gqfndot_" id="prod-2N5gUMor">
|
|
<emu-nt id="_ref_23657"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt>
|
|
<emu-t>,</emu-t>
|
|
<emu-nt id="_ref_23658"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>names1</var> be the <emu-xref aoid="ExportedBindings" id="_ref_9358"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportedbindings">ExportedBindings</a></emu-xref> of <emu-nt id="_ref_23659"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt>.</li><li>Let <var>names2</var> be the <emu-xref aoid="ExportedBindings" id="_ref_9359"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportedbindings">ExportedBindings</a></emu-xref> of <emu-nt id="_ref_23660"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_9360"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>names1</var> and <var>names2</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportSpecifier" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="6isvnzvv" id="prod-XDdQfOn3"><emu-nt id="_ref_23661"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9361"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is the <emu-xref aoid="StringValue" id="_ref_9362"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_23662"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportSpecifier" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hbgjxuav" id="prod-Hr-D5Mzb">
|
|
<emu-nt id="_ref_23663"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
<emu-t>as</emu-t>
|
|
<emu-nt id="_ref_23664"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9363"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is the <emu-xref aoid="StringValue" id="_ref_9364"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of the first <emu-nt id="_ref_23665"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-static-semantics-exportednames" oldids="sec-module-semantics-static-semantics-exportednames,sec-exports-static-semantics-exportednames" type="sdo" aoid="ExportedNames"><span id="sec-exports-static-semantics-exportednames"></span><span id="sec-module-semantics-static-semantics-exportednames"></span>
|
|
<h1><span class="secnum">16.2.3.3</span> Static Semantics: ExportedNames</h1>
|
|
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_9365"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ExportedNames takes no arguments and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9366"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Strings.</p>
|
|
<emu-note><span class="note">Note</span><div class="note-contents">
|
|
<p>ExportedNames are the externally visible names that a <emu-nt id="_ref_23666"><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt> explicitly maps to one of its local name bindings.</p>
|
|
</div></emu-note>
|
|
<p>It is defined piecewise over the following productions:</p>
|
|
<emu-grammar><emu-production name="ModuleItemList" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dd23jrxs" id="prod-Td0h-qi5">
|
|
<emu-nt id="_ref_23667"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>
|
|
<emu-nt id="_ref_23668"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>names1</var> be the <emu-xref aoid="ExportedNames" id="_ref_9367"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportednames">ExportedNames</a></emu-xref> of <emu-nt id="_ref_23669"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>.</li><li>Let <var>names2</var> be the <emu-xref aoid="ExportedNames" id="_ref_9368"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportednames">ExportedNames</a></emu-xref> of <emu-nt id="_ref_23670"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_9369"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>names1</var> and <var>names2</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ModuleItem" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ky6bsn7x" id="prod-ebSwvFft"><emu-nt id="_ref_23671"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return the <emu-xref aoid="ExportedNames" id="_ref_9370"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportednames">ExportedNames</a></emu-xref> of <emu-nt id="_ref_23672"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ModuleItem">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4fwtd8-6" id="prod-Nqbdsw0J">
|
|
<emu-nt id="_ref_23673"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="15hryu6r" id="prod-fa0LziO_">
|
|
<emu-nt id="_ref_23674"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementListItem">StatementListItem</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9371"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gperhudl" id="prod-HjY0mN3h">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23675"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportFromClause">ExportFromClause</a></emu-nt>
|
|
<emu-nt id="_ref_23676"><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt>
|
|
<emu-nt optional="" id="_ref_23677"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return the <emu-xref aoid="ExportedNames" id="_ref_9372"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportednames">ExportedNames</a></emu-xref> of <emu-nt id="_ref_23678"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportFromClause">ExportFromClause</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportFromClause" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportFromClause">ExportFromClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="sb5ztei-" id="prod-H38kB23_"><emu-t>*</emu-t></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9373"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportFromClause" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportFromClause">ExportFromClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hf05qfgg" id="prod-2_hHRuoS">
|
|
<emu-t>*</emu-t>
|
|
<emu-t>as</emu-t>
|
|
<emu-nt id="_ref_23679"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9374"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is the <emu-xref aoid="StringValue" id="_ref_9375"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_23680"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportFromClause" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportFromClause">ExportFromClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="_xs5tuve" id="prod-zlltzYPM"><emu-nt id="_ref_23681"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return the <emu-xref aoid="ExportedNames" id="_ref_9376"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportednames">ExportedNames</a></emu-xref> of <emu-nt id="_ref_23682"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bg3oaw2m" id="prod-n6JkNQnf">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23683"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableStatement">VariableStatement</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return the <emu-xref aoid="BoundNames" id="_ref_9377"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_23684"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableStatement">VariableStatement</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="go9a4xdq" id="prod-NjdAgwQZ">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23685"><a href="ecmascript-language-statements-and-declarations.html#prod-Declaration">Declaration</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return the <emu-xref aoid="BoundNames" id="_ref_9378"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_23686"><a href="ecmascript-language-statements-and-declarations.html#prod-Declaration">Declaration</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cdfbfvfu" id="prod-iOoR-XLv">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt id="_ref_23687"><a href="ecmascript-language-statements-and-declarations.html#prod-HoistableDeclaration">HoistableDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="w8pljwgc" id="prod-BuNuTBV9">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt id="_ref_23688"><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="4f6ct71n" id="prod-fWfjxGVB">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt id="_ref_23689"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return « <emu-val>"default"</emu-val> ».</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="NamedExports" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gbpaspne" id="prod-tyOEKkRB">
|
|
<emu-t>{</emu-t>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9379"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportsList" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gqfndot_" id="prod-VeE5fiYD">
|
|
<emu-nt id="_ref_23690"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt>
|
|
<emu-t>,</emu-t>
|
|
<emu-nt id="_ref_23691"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>names1</var> be the <emu-xref aoid="ExportedNames" id="_ref_9380"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportednames">ExportedNames</a></emu-xref> of <emu-nt id="_ref_23692"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt>.</li><li>Let <var>names2</var> be the <emu-xref aoid="ExportedNames" id="_ref_9381"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportednames">ExportedNames</a></emu-xref> of <emu-nt id="_ref_23693"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_9382"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>names1</var> and <var>names2</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportSpecifier" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="6isvnzvv" id="prod-KtpQleM7"><emu-nt id="_ref_23694"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9383"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is the <emu-xref aoid="StringValue" id="_ref_9384"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_23695"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportSpecifier" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hbgjxuav" id="prod-jiop1t1m">
|
|
<emu-nt id="_ref_23696"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
<emu-t>as</emu-t>
|
|
<emu-nt id="_ref_23697"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9385"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is the <emu-xref aoid="StringValue" id="_ref_9386"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of the second <emu-nt id="_ref_23698"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-static-semantics-exportentries" oldids="sec-module-semantics-static-semantics-exportentries,sec-exports-static-semantics-exportentries" type="sdo" aoid="ExportEntries"><span id="sec-exports-static-semantics-exportentries"></span><span id="sec-module-semantics-static-semantics-exportentries"></span>
|
|
<h1><span class="secnum">16.2.3.4</span> Static Semantics: ExportEntries</h1>
|
|
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_9387"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ExportEntries takes no arguments and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9388"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#exportentry-record" id="_ref_9389"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Records</a></emu-xref>. It is defined piecewise over the following productions:</p>
|
|
<emu-grammar><emu-production name="Module" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n7nathbb" id="prod-VtH9KIhP"><emu-gann>[empty]</emu-gann></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9390"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ModuleItemList" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dd23jrxs" id="prod-paVpIqc4">
|
|
<emu-nt id="_ref_23699"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>
|
|
<emu-nt id="_ref_23700"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>entries1</var> be the <emu-xref aoid="ExportEntries" id="_ref_9391"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportentries">ExportEntries</a></emu-xref> of <emu-nt id="_ref_23701"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItemList">ModuleItemList</a></emu-nt>.</li><li>Let <var>entries2</var> be the <emu-xref aoid="ExportEntries" id="_ref_9392"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportentries">ExportEntries</a></emu-xref> of <emu-nt id="_ref_23702"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_9393"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>entries1</var> and <var>entries2</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ModuleItem">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleItem">ModuleItem</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4fwtd8-6" id="prod-AebNVOm2">
|
|
<emu-nt id="_ref_23703"><a href="ecmascript-language-scripts-and-modules.html#prod-ImportDeclaration">ImportDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
<emu-rhs a="15hryu6r" id="prod-K7CKbuyc">
|
|
<emu-nt id="_ref_23704"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementListItem">StatementListItem</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9394"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gperhudl" id="prod-7s6Etzt0">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23705"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportFromClause">ExportFromClause</a></emu-nt>
|
|
<emu-nt id="_ref_23706"><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt>
|
|
<emu-nt optional="" id="_ref_23707"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>module</var> be the sole element of the <emu-xref aoid="ModuleRequests" id="_ref_9395"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-modulerequests">ModuleRequests</a></emu-xref> of <emu-nt id="_ref_23708"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt>.</li><li>Return the <emu-xref aoid="ExportEntriesForModule" id="_ref_9396"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportentriesformodule">ExportEntriesForModule</a></emu-xref> of <emu-nt id="_ref_23709"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportFromClause">ExportFromClause</a></emu-nt> with argument <var>module</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="j2lh_kda" id="prod-VQKcYkbx">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23710"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return the <emu-xref aoid="ExportEntriesForModule" id="_ref_9397"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportentriesformodule">ExportEntriesForModule</a></emu-xref> of <emu-nt id="_ref_23711"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt> with argument <emu-val>null</emu-val>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bg3oaw2m" id="prod-vHJuGFG0">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23712"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableStatement">VariableStatement</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>entries</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9398"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>names</var> be the <emu-xref aoid="BoundNames" id="_ref_9399"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_23713"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableStatement">VariableStatement</a></emu-nt>.</li><li>For each element <var>name</var> of <var>names</var>, do<ol><li>Append the <emu-xref href="#exportentry-record" id="_ref_9400"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> { <var class="field">[[ModuleRequest]]</var>: <emu-val>null</emu-val>, <var class="field">[[ImportName]]</var>: <emu-val>null</emu-val>, <var class="field">[[LocalName]]</var>: <var>name</var>, <var class="field">[[ExportName]]</var>: <var>name</var> } to <var>entries</var>.</li></ol></li><li>Return <var>entries</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="go9a4xdq" id="prod-7BCAocpR">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23714"><a href="ecmascript-language-statements-and-declarations.html#prod-Declaration">Declaration</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>entries</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9401"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>names</var> be the <emu-xref aoid="BoundNames" id="_ref_9402"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_23715"><a href="ecmascript-language-statements-and-declarations.html#prod-Declaration">Declaration</a></emu-nt>.</li><li>For each element <var>name</var> of <var>names</var>, do<ol><li>Append the <emu-xref href="#exportentry-record" id="_ref_9403"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> { <var class="field">[[ModuleRequest]]</var>: <emu-val>null</emu-val>, <var class="field">[[ImportName]]</var>: <emu-val>null</emu-val>, <var class="field">[[LocalName]]</var>: <var>name</var>, <var class="field">[[ExportName]]</var>: <var>name</var> } to <var>entries</var>.</li></ol></li><li>Return <var>entries</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cdfbfvfu" id="prod-rg_YnEcS">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt id="_ref_23716"><a href="ecmascript-language-statements-and-declarations.html#prod-HoistableDeclaration">HoistableDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>names</var> be the <emu-xref aoid="BoundNames" id="_ref_9404"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_23717"><a href="ecmascript-language-statements-and-declarations.html#prod-HoistableDeclaration">HoistableDeclaration</a></emu-nt>.</li><li>Let <var>localName</var> be the sole element of <var>names</var>.</li><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9405"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is a new <emu-xref href="#exportentry-record" id="_ref_9406"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> { <var class="field">[[ModuleRequest]]</var>: <emu-val>null</emu-val>, <var class="field">[[ImportName]]</var>: <emu-val>null</emu-val>, <var class="field">[[LocalName]]</var>: <var>localName</var>, <var class="field">[[ExportName]]</var>: <emu-val>"default"</emu-val> }.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="w8pljwgc" id="prod-A54_tyTm">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt id="_ref_23718"><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>names</var> be the <emu-xref aoid="BoundNames" id="_ref_9407"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_23719"><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt>.</li><li>Let <var>localName</var> be the sole element of <var>names</var>.</li><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9408"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is a new <emu-xref href="#exportentry-record" id="_ref_9409"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> { <var class="field">[[ModuleRequest]]</var>: <emu-val>null</emu-val>, <var class="field">[[ImportName]]</var>: <emu-val>null</emu-val>, <var class="field">[[LocalName]]</var>: <var>localName</var>, <var class="field">[[ExportName]]</var>: <emu-val>"default"</emu-val> }.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4f6ct71n" id="prod-04PQQ9j2">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt id="_ref_23720"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>entry</var> be the <emu-xref href="#exportentry-record" id="_ref_9410"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> { <var class="field">[[ModuleRequest]]</var>: <emu-val>null</emu-val>, <var class="field">[[ImportName]]</var>: <emu-val>null</emu-val>, <var class="field">[[LocalName]]</var>: <emu-val>"*default*"</emu-val>, <var class="field">[[ExportName]]</var>: <emu-val>"default"</emu-val> }.</li><li>Return « <var>entry</var> ».</li></ol></emu-alg>
|
|
<emu-note><span class="note">Note</span><div class="note-contents">
|
|
<p><emu-val>"*default*"</emu-val> is used within this specification as a synthetic name for anonymous default export values. See <emu-xref href="#note-star-default-star" id="_ref_514"><a href="syntax-directed-operations.html#note-star-default-star">this note</a></emu-xref> for more details.</p>
|
|
</div></emu-note>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-static-semantics-exportentriesformodule" type="sdo" aoid="ExportEntriesForModule">
|
|
<h1><span class="secnum">16.2.3.5</span> Static Semantics: ExportEntriesForModule</h1>
|
|
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_9411"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ExportEntriesForModule takes argument <var>module</var> (a <emu-xref href="#modulerequest-record" id="_ref_9412"><a href="ecmascript-language-scripts-and-modules.html#modulerequest-record">ModuleRequest Record</a></emu-xref> or <emu-val>null</emu-val>) and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9413"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#exportentry-record" id="_ref_9414"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Records</a></emu-xref>. It is defined piecewise over the following productions:</p>
|
|
<emu-grammar><emu-production name="ExportFromClause" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportFromClause">ExportFromClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="sb5ztei-" id="prod-Xa_xAKMV"><emu-t>*</emu-t></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>entry</var> be the <emu-xref href="#exportentry-record" id="_ref_9415"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> { <var class="field">[[ModuleRequest]]</var>: <var>module</var>, <var class="field">[[ImportName]]</var>: <emu-const>all-but-default</emu-const>, <var class="field">[[LocalName]]</var>: <emu-val>null</emu-val>, <var class="field">[[ExportName]]</var>: <emu-val>null</emu-val> }.</li><li>Return « <var>entry</var> ».</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportFromClause" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportFromClause">ExportFromClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hf05qfgg" id="prod-1scalAlY">
|
|
<emu-t>*</emu-t>
|
|
<emu-t>as</emu-t>
|
|
<emu-nt id="_ref_23721"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>exportName</var> be the <emu-xref aoid="StringValue" id="_ref_9416"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_23722"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>.</li><li>Let <var>entry</var> be the <emu-xref href="#exportentry-record" id="_ref_9417"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> { <var class="field">[[ModuleRequest]]</var>: <var>module</var>, <var class="field">[[ImportName]]</var>: <emu-const>all</emu-const>, <var class="field">[[LocalName]]</var>: <emu-val>null</emu-val>, <var class="field">[[ExportName]]</var>: <var>exportName</var> }.</li><li>Return « <var>entry</var> ».</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="NamedExports" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gbpaspne" id="prod-mzZ83dVi">
|
|
<emu-t>{</emu-t>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9418"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportsList" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gqfndot_" id="prod-zadzACBk">
|
|
<emu-nt id="_ref_23723"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt>
|
|
<emu-t>,</emu-t>
|
|
<emu-nt id="_ref_23724"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>specs1</var> be the <emu-xref aoid="ExportEntriesForModule" id="_ref_9419"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportentriesformodule">ExportEntriesForModule</a></emu-xref> of <emu-nt id="_ref_23725"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt> with argument <var>module</var>.</li><li>Let <var>specs2</var> be the <emu-xref aoid="ExportEntriesForModule" id="_ref_9420"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportentriesformodule">ExportEntriesForModule</a></emu-xref> of <emu-nt id="_ref_23726"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt> with argument <var>module</var>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_9421"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>specs1</var> and <var>specs2</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportSpecifier" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="6isvnzvv" id="prod-IZvnHgpZ"><emu-nt id="_ref_23727"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>sourceName</var> be the <emu-xref aoid="StringValue" id="_ref_9422"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_23728"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>.</li><li>If <var>module</var> is <emu-val>null</emu-val>, then<ol><li>Let <var>localName</var> be <var>sourceName</var>.</li><li>Let <var>importName</var> be <emu-val>null</emu-val>.</li></ol></li><li>Else,<ol><li>Let <var>localName</var> be <emu-val>null</emu-val>.</li><li>Let <var>importName</var> be <var>sourceName</var>.</li></ol></li><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9423"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is a new <emu-xref href="#exportentry-record" id="_ref_9424"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> { <var class="field">[[ModuleRequest]]</var>: <var>module</var>, <var class="field">[[ImportName]]</var>: <var>importName</var>, <var class="field">[[LocalName]]</var>: <var>localName</var>, <var class="field">[[ExportName]]</var>: <var>sourceName</var> }.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportSpecifier" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hbgjxuav" id="prod-WH6U71Y1">
|
|
<emu-nt id="_ref_23729"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
<emu-t>as</emu-t>
|
|
<emu-nt id="_ref_23730"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>sourceName</var> be the <emu-xref aoid="StringValue" id="_ref_9425"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of the first <emu-nt id="_ref_23731"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>.</li><li>Let <var>exportName</var> be the <emu-xref aoid="StringValue" id="_ref_9426"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of the second <emu-nt id="_ref_23732"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>.</li><li>If <var>module</var> is <emu-val>null</emu-val>, then<ol><li>Let <var>localName</var> be <var>sourceName</var>.</li><li>Let <var>importName</var> be <emu-val>null</emu-val>.</li></ol></li><li>Else,<ol><li>Let <var>localName</var> be <emu-val>null</emu-val>.</li><li>Let <var>importName</var> be <var>sourceName</var>.</li></ol></li><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9427"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is a new <emu-xref href="#exportentry-record" id="_ref_9428"><a href="ecmascript-language-scripts-and-modules.html#exportentry-record">ExportEntry Record</a></emu-xref> { <var class="field">[[ModuleRequest]]</var>: <var>module</var>, <var class="field">[[ImportName]]</var>: <var>importName</var>, <var class="field">[[LocalName]]</var>: <var>localName</var>, <var class="field">[[ExportName]]</var>: <var>exportName</var> }.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-static-semantics-referencedbindings" type="sdo" aoid="ReferencedBindings">
|
|
<h1><span class="secnum">16.2.3.6</span> Static Semantics: ReferencedBindings</h1>
|
|
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_9429"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ReferencedBindings takes no arguments and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9430"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sec-syntactic-grammar" id="_ref_9431"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Nodes</a></emu-xref>. It is defined piecewise over the following productions:</p>
|
|
<emu-grammar><emu-production name="NamedExports" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gbpaspne" id="prod-SuOfrU8K">
|
|
<emu-t>{</emu-t>
|
|
<emu-t>}</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9432"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportsList" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gqfndot_" id="prod-eGw90zQ9">
|
|
<emu-nt id="_ref_23733"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt>
|
|
<emu-t>,</emu-t>
|
|
<emu-nt id="_ref_23734"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>names1</var> be the <emu-xref aoid="ReferencedBindings" id="_ref_9433"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-referencedbindings">ReferencedBindings</a></emu-xref> of <emu-nt id="_ref_23735"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportsList">ExportsList</a></emu-nt>.</li><li>Let <var>names2</var> be the <emu-xref aoid="ReferencedBindings" id="_ref_9434"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-referencedbindings">ReferencedBindings</a></emu-xref> of <emu-nt id="_ref_23736"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_9435"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>names1</var> and <var>names2</var>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportSpecifier" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportSpecifier">ExportSpecifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hbgjxuav" id="prod-tdM6ZJNC">
|
|
<emu-nt id="_ref_23737"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
<emu-t>as</emu-t>
|
|
<emu-nt id="_ref_23738"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return the <emu-xref aoid="ReferencedBindings" id="_ref_9436"><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-referencedbindings">ReferencedBindings</a></emu-xref> of the first <emu-nt id="_ref_23739"><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ModuleExportName" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="drsx4tka" id="prod-YJpWFrW7"><emu-nt id="_ref_23740"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9437"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is the <emu-nt id="_ref_23741"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ModuleExportName" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ModuleExportName">ModuleExportName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xhtltz00" id="prod-hGf2GDb1"><emu-nt id="_ref_23742"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt></emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_9438"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is the <emu-nt id="_ref_23743"><a href="ecmascript-language-lexical-grammar.html#prod-StringLiteral">StringLiteral</a></emu-nt>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
|
|
<emu-clause id="sec-exports-runtime-semantics-evaluation" type="sdo">
|
|
<h1><span class="secnum">16.2.3.7</span> Runtime Semantics: Evaluation</h1>
|
|
<emu-grammar><emu-production name="ExportDeclaration">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gperhudl" id="prod-QE-X40JL">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23744"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportFromClause">ExportFromClause</a></emu-nt>
|
|
<emu-nt id="_ref_23745"><a href="ecmascript-language-scripts-and-modules.html#prod-FromClause">FromClause</a></emu-nt>
|
|
<emu-nt optional="" id="_ref_23746"><a href="ecmascript-language-scripts-and-modules.html#prod-WithClause">WithClause</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
<emu-rhs a="j2lh_kda" id="prod-HmLCnng_">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23747"><a href="ecmascript-language-scripts-and-modules.html#prod-NamedExports">NamedExports</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return <emu-const>empty</emu-const>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bg3oaw2m" id="prod-qMwuQwD4">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23748"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableStatement">VariableStatement</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return ? <emu-xref aoid="Evaluation" id="_ref_9439"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_23749"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableStatement">VariableStatement</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="go9a4xdq" id="prod-RU5ba9t5">
|
|
<emu-t>export</emu-t>
|
|
<emu-nt id="_ref_23750"><a href="ecmascript-language-statements-and-declarations.html#prod-Declaration">Declaration</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return ? <emu-xref aoid="Evaluation" id="_ref_9440"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_23751"><a href="ecmascript-language-statements-and-declarations.html#prod-Declaration">Declaration</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cdfbfvfu" id="prod-7GDTz4eH">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt id="_ref_23752"><a href="ecmascript-language-statements-and-declarations.html#prod-HoistableDeclaration">HoistableDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Return ? <emu-xref aoid="Evaluation" id="_ref_9441"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_23753"><a href="ecmascript-language-statements-and-declarations.html#prod-HoistableDeclaration">HoistableDeclaration</a></emu-nt>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="w8pljwgc" id="prod-963jyNzQ">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt id="_ref_23754"><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>Let <var>value</var> be ? <emu-xref aoid="BindingClassDeclarationEvaluation" id="_ref_9442"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-bindingclassdeclarationevaluation" class="e-user-code">BindingClassDeclarationEvaluation</a></emu-xref> of <emu-nt id="_ref_23755"><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt>.</li><li>Let <var>className</var> be the sole element of the <emu-xref aoid="BoundNames" id="_ref_9443"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_23756"><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt>.</li><li>If <var>className</var> is <emu-val>"*default*"</emu-val>, then<ol><li>Let <var>env</var> be the <emu-xref href="#running-execution-context" id="_ref_9444"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment.</li><li>Perform ? <emu-xref aoid="InitializeBoundName" id="_ref_9445"><a href="syntax-directed-operations.html#sec-initializeboundname" class="e-user-code">InitializeBoundName</a></emu-xref>(<emu-val>"*default*"</emu-val>, <var>value</var>, <var>env</var>).</li></ol></li><li>Return <emu-const>empty</emu-const>.</li></ol></emu-alg>
|
|
<emu-grammar><emu-production name="ExportDeclaration" collapsed="">
|
|
<emu-nt><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4f6ct71n" id="prod-KpBQ_5fa">
|
|
<emu-t>export</emu-t>
|
|
<emu-t>default</emu-t>
|
|
<emu-nt id="_ref_23757"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
|
|
<emu-t>;</emu-t>
|
|
</emu-rhs>
|
|
</emu-production>
|
|
</emu-grammar>
|
|
<emu-alg><ol><li>If <emu-xref aoid="IsAnonymousFunctionDefinition" id="_ref_9446"><a href="syntax-directed-operations.html#sec-isanonymousfunctiondefinition">IsAnonymousFunctionDefinition</a></emu-xref>(<emu-nt id="_ref_23758"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>) is <emu-val>true</emu-val>, then<ol><li>Let <var>value</var> be ? <emu-xref aoid="NamedEvaluation" id="_ref_9447"><a href="syntax-directed-operations.html#sec-runtime-semantics-namedevaluation" class="e-user-code">NamedEvaluation</a></emu-xref> of <emu-nt id="_ref_23759"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> with argument <emu-val>"default"</emu-val>.</li></ol></li><li>Else,<ol><li>Let <var>rhs</var> be ? <emu-xref aoid="Evaluation" id="_ref_9448"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_23760"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>value</var> be ? <emu-xref aoid="GetValue" id="_ref_9449"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>rhs</var>).</li></ol></li><li>Let <var>env</var> be the <emu-xref href="#running-execution-context" id="_ref_9450"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment.</li><li>Perform ? <emu-xref aoid="InitializeBoundName" id="_ref_9451"><a href="syntax-directed-operations.html#sec-initializeboundname" class="e-user-code">InitializeBoundName</a></emu-xref>(<emu-val>"*default*"</emu-val>, <var>value</var>, <var>env</var>).</li><li>Return <emu-const>empty</emu-const>.</li></ol></emu-alg>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
</emu-clause>
|
|
</emu-clause></div></body> |