From af5467d63201c8659272777b4b7968fb3e624f4f Mon Sep 17 00:00:00 2001 From: Michael Dyck Date: Sat, 10 Jul 2021 13:45:40 -0700 Subject: [PATCH] Editorial: Define+use "list-concatenation" (#2383) --- spec.html | 453 +++++++++++++++++++++++++++--------------------------- 1 file changed, 224 insertions(+), 229 deletions(-) diff --git a/spec.html b/spec.html index 626dc5c4da..fcf3db959c 100644 --- a/spec.html +++ b/spec.html @@ -3452,6 +3452,7 @@

The List and Record Specification Types

The List type is used to explain the evaluation of argument lists (see ) in `new` expressions, in function calls, and in other algorithms where a simple ordered list of values is needed. Values of the List type are simply ordered sequences of list elements containing the individual values. These sequences may be of any length. The elements of a list may be randomly accessed using 0-origin indices. For notational convenience an array-like syntax can be used to access List elements. For example, _arguments_[2] is shorthand for saying the 3rd element of the List _arguments_.

When an algorithm iterates over the elements of a List without specifying an order, the order used is the order of the elements in the List.

For notational convenience within this specification, a literal syntax can be used to express a new List value. For example, « 1, 2 » defines a List value that has two elements each of which is initialized to a specific value. A new empty List can be expressed as « ».

+

In this specification, the phrase "the list-concatenation of _A_, _B_, ..." (where each argument is a possibly empty List) denotes a new List value whose elements are the concatenation of the elements (in order) of each of the arguments (in order).

The Record type is used to describe data aggregations within the algorithms of this specification. A Record type value consists of one or more named fields. The value of each field is either an ECMAScript value or an abstract value represented by a name associated with the Record type. Field names are always enclosed in double brackets, for example [[Value]].

For notational convenience within this specification, an object literal-like syntax can be used to express a Record value. For example, { [[Field1]]: 42, [[Field2]]: *false*, [[Field3]]: ~empty~ } defines a Record value that has three fields, each of which is initialized to a specific value. Field name order is not significant. Any fields that are not explicitly listed are considered to be absent.

In specification text and algorithms, dot notation may be used to refer to a specific field of a Record value. For example, if R is the record shown in the previous paragraph then R.[[Field2]] is shorthand for “the field of R named [[Field2]]”.

@@ -5970,9 +5971,9 @@

Static Semantics: BoundNames

BindingList : BindingList `,` LexicalBinding - 1. Let _names_ be the BoundNames of |BindingList|. - 1. Append to _names_ the elements of the BoundNames of |LexicalBinding|. - 1. Return _names_. + 1. Let _names1_ be the BoundNames of |BindingList|. + 1. Let _names2_ be the BoundNames of |LexicalBinding|. + 1. Return the list-concatenation of _names1_ and _names2_. LexicalBinding : BindingIdentifier Initializer? @@ -5984,9 +5985,9 @@

Static Semantics: BoundNames

VariableDeclarationList : VariableDeclarationList `,` VariableDeclaration - 1. Let _names_ be BoundNames of |VariableDeclarationList|. - 1. Append to _names_ the elements of BoundNames of |VariableDeclaration|. - 1. Return _names_. + 1. Let _names1_ be BoundNames of |VariableDeclarationList|. + 1. Let _names2_ be BoundNames of |VariableDeclaration|. + 1. Return the list-concatenation of _names1_ and _names2_. VariableDeclaration : BindingIdentifier Initializer? @@ -6002,9 +6003,9 @@

Static Semantics: BoundNames

ObjectBindingPattern : `{` BindingPropertyList `,` BindingRestProperty `}` - 1. Let _names_ be BoundNames of |BindingPropertyList|. - 1. Append to _names_ the elements of BoundNames of |BindingRestProperty|. - 1. Return _names_. + 1. Let _names1_ be BoundNames of |BindingPropertyList|. + 1. Let _names2_ be BoundNames of |BindingRestProperty|. + 1. Return the list-concatenation of _names1_ and _names2_. ArrayBindingPattern : `[` Elision? `]` @@ -6020,21 +6021,21 @@

Static Semantics: BoundNames

ArrayBindingPattern : `[` BindingElementList `,` Elision? BindingRestElement `]` - 1. Let _names_ be BoundNames of |BindingElementList|. - 1. Append to _names_ the elements of BoundNames of |BindingRestElement|. - 1. Return _names_. + 1. Let _names1_ be BoundNames of |BindingElementList|. + 1. Let _names2_ be BoundNames of |BindingRestElement|. + 1. Return the list-concatenation of _names1_ and _names2_. BindingPropertyList : BindingPropertyList `,` BindingProperty - 1. Let _names_ be BoundNames of |BindingPropertyList|. - 1. Append to _names_ the elements of BoundNames of |BindingProperty|. - 1. Return _names_. + 1. Let _names1_ be BoundNames of |BindingPropertyList|. + 1. Let _names2_ be BoundNames of |BindingProperty|. + 1. Return the list-concatenation of _names1_ and _names2_. BindingElementList : BindingElementList `,` BindingElisionElement - 1. Let _names_ be BoundNames of |BindingElementList|. - 1. Append to _names_ the elements of BoundNames of |BindingElisionElement|. - 1. Return _names_. + 1. Let _names1_ be BoundNames of |BindingElementList|. + 1. Let _names2_ be BoundNames of |BindingElisionElement|. + 1. Return the list-concatenation of _names1_ and _names2_. BindingElisionElement : Elision? BindingElement @@ -6070,15 +6071,15 @@

Static Semantics: BoundNames

FormalParameters : FormalParameterList `,` FunctionRestParameter - 1. Let _names_ be BoundNames of |FormalParameterList|. - 1. Append to _names_ the BoundNames of |FunctionRestParameter|. - 1. Return _names_. + 1. Let _names1_ be BoundNames of |FormalParameterList|. + 1. Let _names2_ be BoundNames of |FunctionRestParameter|. + 1. Return the list-concatenation of _names1_ and _names2_. FormalParameterList : FormalParameterList `,` FormalParameter - 1. Let _names_ be BoundNames of |FormalParameterList|. - 1. Append to _names_ the BoundNames of |FormalParameter|. - 1. Return _names_. + 1. Let _names1_ be BoundNames of |FormalParameterList|. + 1. Let _names2_ be BoundNames of |FormalParameter|. + 1. Return the list-concatenation of _names1_ and _names2_. ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList @@ -6138,15 +6139,15 @@

Static Semantics: BoundNames

ImportClause : ImportedDefaultBinding `,` NameSpaceImport - 1. Let _names_ be the BoundNames of |ImportedDefaultBinding|. - 1. Append to _names_ the elements of the BoundNames of |NameSpaceImport|. - 1. Return _names_. + 1. Let _names1_ be the BoundNames of |ImportedDefaultBinding|. + 1. Let _names2_ be the BoundNames of |NameSpaceImport|. + 1. Return the list-concatenation of _names1_ and _names2_. ImportClause : ImportedDefaultBinding `,` NamedImports - 1. Let _names_ be the BoundNames of |ImportedDefaultBinding|. - 1. Append to _names_ the elements of the BoundNames of |NamedImports|. - 1. Return _names_. + 1. Let _names1_ be the BoundNames of |ImportedDefaultBinding|. + 1. Let _names2_ be the BoundNames of |NamedImports|. + 1. Return the list-concatenation of _names1_ and _names2_. NamedImports : `{` `}` @@ -6154,9 +6155,9 @@

Static Semantics: BoundNames

ImportsList : ImportsList `,` ImportSpecifier - 1. Let _names_ be the BoundNames of |ImportsList|. - 1. Append to _names_ the elements of the BoundNames of |ImportSpecifier|. - 1. Return _names_. + 1. Let _names1_ be the BoundNames of |ImportsList|. + 1. Let _names2_ be the BoundNames of |ImportSpecifier|. + 1. Return the list-concatenation of _names1_ and _names2_. ImportSpecifier : IdentifierName `as` ImportedBinding @@ -6288,9 +6289,9 @@

Static Semantics: LexicallyDeclaredNames

StatementList : StatementList StatementListItem - 1. Let _names_ be LexicallyDeclaredNames of |StatementList|. - 1. Append to _names_ the elements of the LexicallyDeclaredNames of |StatementListItem|. - 1. Return _names_. + 1. Let _names1_ be LexicallyDeclaredNames of |StatementList|. + 1. Let _names2_ be LexicallyDeclaredNames of |StatementListItem|. + 1. Return the list-concatenation of _names1_ and _names2_. StatementListItem : Statement @@ -6307,17 +6308,18 @@

Static Semantics: LexicallyDeclaredNames

CaseBlock : `{` CaseClauses? DefaultClause CaseClauses? `}` - 1. If the first |CaseClauses| is present, let _names_ be the LexicallyDeclaredNames of the first |CaseClauses|. - 1. Else, let _names_ be a new empty List. - 1. Append to _names_ the elements of the LexicallyDeclaredNames of |DefaultClause|. - 1. If the second |CaseClauses| is not present, return _names_. - 1. Return the result of appending to _names_ the elements of the LexicallyDeclaredNames of the second |CaseClauses|. + 1. If the first |CaseClauses| is present, let _names1_ be the LexicallyDeclaredNames of the first |CaseClauses|. + 1. Else, let _names1_ be a new empty List. + 1. Let _names2_ be LexicallyDeclaredNames of |DefaultClause|. + 1. If the second |CaseClauses| is present, let _names3_ be the LexicallyDeclaredNames of the second |CaseClauses|. + 1. Else, let _names3_ be a new empty List. + 1. Return the list-concatenation of _names1_, _names2_, and _names3_. CaseClauses : CaseClauses CaseClause - 1. Let _names_ be LexicallyDeclaredNames of |CaseClauses|. - 1. Append to _names_ the elements of the LexicallyDeclaredNames of |CaseClause|. - 1. Return _names_. + 1. Let _names1_ be LexicallyDeclaredNames of |CaseClauses|. + 1. Let _names2_ be LexicallyDeclaredNames of |CaseClause|. + 1. Return the list-concatenation of _names1_ and _names2_. CaseClause : `case` Expression `:` StatementList? @@ -6371,9 +6373,9 @@

Static Semantics: LexicallyDeclaredNames

ModuleItemList : ModuleItemList ModuleItem - 1. Let _names_ be LexicallyDeclaredNames of |ModuleItemList|. - 1. Append to _names_ the elements of the LexicallyDeclaredNames of |ModuleItem|. - 1. Return _names_. + 1. Let _names1_ be LexicallyDeclaredNames of |ModuleItemList|. + 1. Let _names2_ be LexicallyDeclaredNames of |ModuleItem|. + 1. Return the list-concatenation of _names1_ and _names2_. ModuleItem : ImportDeclaration @@ -6397,9 +6399,9 @@

Static Semantics: LexicallyDeclaredNames

Static Semantics: LexicallyScopedDeclarations

StatementList : StatementList StatementListItem - 1. Let _declarations_ be LexicallyScopedDeclarations of |StatementList|. - 1. Append to _declarations_ the elements of the LexicallyScopedDeclarations of |StatementListItem|. - 1. Return _declarations_. + 1. Let _declarations1_ be LexicallyScopedDeclarations of |StatementList|. + 1. Let _declarations2_ be LexicallyScopedDeclarations of |StatementListItem|. + 1. Return the list-concatenation of _declarations1_ and _declarations2_. StatementListItem : Statement @@ -6416,17 +6418,18 @@

Static Semantics: LexicallyScopedDeclarations

CaseBlock : `{` CaseClauses? DefaultClause CaseClauses? `}` - 1. If the first |CaseClauses| is present, let _declarations_ be the LexicallyScopedDeclarations of the first |CaseClauses|. - 1. Else, let _declarations_ be a new empty List. - 1. Append to _declarations_ the elements of the LexicallyScopedDeclarations of |DefaultClause|. - 1. If the second |CaseClauses| is not present, return _declarations_. - 1. Return the result of appending to _declarations_ the elements of the LexicallyScopedDeclarations of the second |CaseClauses|. + 1. If the first |CaseClauses| is present, let _declarations1_ be the LexicallyScopedDeclarations of the first |CaseClauses|. + 1. Else, let _declarations1_ be a new empty List. + 1. Let _declarations2_ be LexicallyScopedDeclarations of |DefaultClause|. + 1. If the second |CaseClauses| is present, let _declarations3_ be the LexicallyScopedDeclarations of the second |CaseClauses|. + 1. Else, let _declarations3_ be a new empty List. + 1. Return the list-concatenation of _declarations1_, _declarations2_, and _declarations3_. CaseClauses : CaseClauses CaseClause - 1. Let _declarations_ be LexicallyScopedDeclarations of |CaseClauses|. - 1. Append to _declarations_ the elements of the LexicallyScopedDeclarations of |CaseClause|. - 1. Return _declarations_. + 1. Let _declarations1_ be LexicallyScopedDeclarations of |CaseClauses|. + 1. Let _declarations2_ be LexicallyScopedDeclarations of |CaseClause|. + 1. Return the list-concatenation of _declarations1_ and _declarations2_. CaseClause : `case` Expression `:` StatementList? @@ -6478,9 +6481,9 @@

Static Semantics: LexicallyScopedDeclarations

ModuleItemList : ModuleItemList ModuleItem - 1. Let _declarations_ be LexicallyScopedDeclarations of |ModuleItemList|. - 1. Append to _declarations_ the elements of the LexicallyScopedDeclarations of |ModuleItem|. - 1. Return _declarations_. + 1. Let _declarations1_ be LexicallyScopedDeclarations of |ModuleItemList|. + 1. Let _declarations2_ be LexicallyScopedDeclarations of |ModuleItem|. + 1. Return the list-concatenation of _declarations1_ and _declarations2_. ModuleItem : ImportDeclaration @@ -6534,9 +6537,9 @@

Static Semantics: VarDeclaredNames

StatementList : StatementList StatementListItem - 1. Let _names_ be VarDeclaredNames of |StatementList|. - 1. Append to _names_ the elements of the VarDeclaredNames of |StatementListItem|. - 1. Return _names_. + 1. Let _names1_ be VarDeclaredNames of |StatementList|. + 1. Let _names2_ be VarDeclaredNames of |StatementListItem|. + 1. Return the list-concatenation of _names1_ and _names2_. StatementListItem : Declaration @@ -6548,9 +6551,9 @@

Static Semantics: VarDeclaredNames

IfStatement : `if` `(` Expression `)` Statement `else` Statement - 1. Let _names_ be VarDeclaredNames of the first |Statement|. - 1. Append to _names_ the elements of the VarDeclaredNames of the second |Statement|. - 1. Return _names_. + 1. Let _names1_ be VarDeclaredNames of the first |Statement|. + 1. Let _names2_ be VarDeclaredNames of the second |Statement|. + 1. Return the list-concatenation of _names1_ and _names2_. IfStatement : `if` `(` Expression `)` Statement @@ -6570,9 +6573,9 @@

Static Semantics: VarDeclaredNames

ForStatement : `for` `(` `var` VariableDeclarationList `;` Expression? `;` Expression? `)` Statement - 1. Let _names_ be BoundNames of |VariableDeclarationList|. - 1. Append to _names_ the elements of the VarDeclaredNames of |Statement|. - 1. Return _names_. + 1. Let _names1_ be BoundNames of |VariableDeclarationList|. + 1. Let _names2_ be VarDeclaredNames of |Statement|. + 1. Return the list-concatenation of _names1_ and _names2_. ForStatement : `for` `(` LexicalDeclaration Expression? `;` Expression? `)` Statement @@ -6597,9 +6600,9 @@

Static Semantics: VarDeclaredNames

`for` `await` `(` `var` ForBinding `of` AssignmentExpression `)` Statement - 1. Let _names_ be the BoundNames of |ForBinding|. - 1. Append to _names_ the elements of the VarDeclaredNames of |Statement|. - 1. Return _names_. + 1. Let _names1_ be the BoundNames of |ForBinding|. + 1. Let _names2_ be the VarDeclaredNames of |Statement|. + 1. Return the list-concatenation of _names1_ and _names2_.

This section is extended by Annex .

@@ -6618,17 +6621,18 @@

Static Semantics: VarDeclaredNames

CaseBlock : `{` CaseClauses? DefaultClause CaseClauses? `}` - 1. If the first |CaseClauses| is present, let _names_ be the VarDeclaredNames of the first |CaseClauses|. - 1. Else, let _names_ be a new empty List. - 1. Append to _names_ the elements of the VarDeclaredNames of |DefaultClause|. - 1. If the second |CaseClauses| is not present, return _names_. - 1. Return the result of appending to _names_ the elements of the VarDeclaredNames of the second |CaseClauses|. + 1. If the first |CaseClauses| is present, let _names1_ be the VarDeclaredNames of the first |CaseClauses|. + 1. Else, let _names1_ be a new empty List. + 1. Let _names2_ be VarDeclaredNames of |DefaultClause|. + 1. If the second |CaseClauses| is present, let _names3_ be the VarDeclaredNames of the second |CaseClauses|. + 1. Else, let _names3_ be a new empty List. + 1. Return the list-concatenation of _names1_, _names2_, and _names3_. CaseClauses : CaseClauses CaseClause - 1. Let _names_ be VarDeclaredNames of |CaseClauses|. - 1. Append to _names_ the elements of the VarDeclaredNames of |CaseClause|. - 1. Return _names_. + 1. Let _names1_ be VarDeclaredNames of |CaseClauses|. + 1. Let _names2_ be VarDeclaredNames of |CaseClause|. + 1. Return the list-concatenation of _names1_ and _names2_. CaseClause : `case` Expression `:` StatementList? @@ -6650,22 +6654,22 @@

Static Semantics: VarDeclaredNames

TryStatement : `try` Block Catch - 1. Let _names_ be VarDeclaredNames of |Block|. - 1. Append to _names_ the elements of the VarDeclaredNames of |Catch|. - 1. Return _names_. + 1. Let _names1_ be VarDeclaredNames of |Block|. + 1. Let _names2_ be VarDeclaredNames of |Catch|. + 1. Return the list-concatenation of _names1_ and _names2_. TryStatement : `try` Block Finally - 1. Let _names_ be VarDeclaredNames of |Block|. - 1. Append to _names_ the elements of the VarDeclaredNames of |Finally|. - 1. Return _names_. + 1. Let _names1_ be VarDeclaredNames of |Block|. + 1. Let _names2_ be VarDeclaredNames of |Finally|. + 1. Return the list-concatenation of _names1_ and _names2_. TryStatement : `try` Block Catch Finally - 1. Let _names_ be VarDeclaredNames of |Block|. - 1. Append to _names_ the elements of the VarDeclaredNames of |Catch|. - 1. Append to _names_ the elements of the VarDeclaredNames of |Finally|. - 1. Return _names_. + 1. Let _names1_ be VarDeclaredNames of |Block|. + 1. Let _names2_ be VarDeclaredNames of |Catch|. + 1. Let _names3_ be VarDeclaredNames of |Finally|. + 1. Return the list-concatenation of _names1_, _names2_, and _names3_. Catch : `catch` `(` CatchParameter `)` Block @@ -6699,9 +6703,9 @@

Static Semantics: VarDeclaredNames

ModuleItemList : ModuleItemList ModuleItem - 1. Let _names_ be VarDeclaredNames of |ModuleItemList|. - 1. Append to _names_ the elements of the VarDeclaredNames of |ModuleItem|. - 1. Return _names_. + 1. Let _names1_ be VarDeclaredNames of |ModuleItemList|. + 1. Let _names2_ be VarDeclaredNames of |ModuleItem|. + 1. Return the list-concatenation of _names1_ and _names2_. ModuleItem : ImportDeclaration @@ -6735,9 +6739,9 @@

Static Semantics: VarScopedDeclarations

StatementList : StatementList StatementListItem - 1. Let _declarations_ be VarScopedDeclarations of |StatementList|. - 1. Append to _declarations_ the elements of the VarScopedDeclarations of |StatementListItem|. - 1. Return _declarations_. + 1. Let _declarations1_ be VarScopedDeclarations of |StatementList|. + 1. Let _declarations2_ be VarScopedDeclarations of |StatementListItem|. + 1. Return the list-concatenation of _declarations1_ and _declarations2_. StatementListItem : Declaration @@ -6749,15 +6753,14 @@

Static Semantics: VarScopedDeclarations

VariableDeclarationList : VariableDeclarationList `,` VariableDeclaration - 1. Let _declarations_ be VarScopedDeclarations of |VariableDeclarationList|. - 1. Append |VariableDeclaration| to _declarations_. - 1. Return _declarations_. + 1. Let _declarations1_ be VarScopedDeclarations of |VariableDeclarationList|. + 1. Return the list-concatenation of _declarations1_ and « |VariableDeclaration| ». IfStatement : `if` `(` Expression `)` Statement `else` Statement - 1. Let _declarations_ be VarScopedDeclarations of the first |Statement|. - 1. Append to _declarations_ the elements of the VarScopedDeclarations of the second |Statement|. - 1. Return _declarations_. + 1. Let _declarations1_ be VarScopedDeclarations of the first |Statement|. + 1. Let _declarations2_ be VarScopedDeclarations of the second |Statement|. + 1. Return the list-concatenation of _declarations1_ and _declarations2_. IfStatement : `if` `(` Expression `)` Statement @@ -6777,9 +6780,9 @@

Static Semantics: VarScopedDeclarations

ForStatement : `for` `(` `var` VariableDeclarationList `;` Expression? `;` Expression? `)` Statement - 1. Let _declarations_ be VarScopedDeclarations of |VariableDeclarationList|. - 1. Append to _declarations_ the elements of the VarScopedDeclarations of |Statement|. - 1. Return _declarations_. + 1. Let _declarations1_ be VarScopedDeclarations of |VariableDeclarationList|. + 1. Let _declarations2_ be VarScopedDeclarations of |Statement|. + 1. Return the list-concatenation of _declarations1_ and _declarations2_. ForStatement : `for` `(` LexicalDeclaration Expression? `;` Expression? `)` Statement @@ -6804,9 +6807,9 @@

Static Semantics: VarScopedDeclarations

`for` `await` `(` `var` ForBinding `of` AssignmentExpression `)` Statement - 1. Let _declarations_ be a List whose sole element is |ForBinding|. - 1. Append to _declarations_ the elements of the VarScopedDeclarations of |Statement|. - 1. Return _declarations_. + 1. Let _declarations1_ be a List whose sole element is |ForBinding|. + 1. Let _declarations2_ be VarScopedDeclarations of |Statement|. + 1. Return the list-concatenation of _declarations1_ and _declarations2_.

This section is extended by Annex .

@@ -6825,17 +6828,18 @@

Static Semantics: VarScopedDeclarations

CaseBlock : `{` CaseClauses? DefaultClause CaseClauses? `}` - 1. If the first |CaseClauses| is present, let _declarations_ be the VarScopedDeclarations of the first |CaseClauses|. - 1. Else, let _declarations_ be a new empty List. - 1. Append to _declarations_ the elements of the VarScopedDeclarations of |DefaultClause|. - 1. If the second |CaseClauses| is not present, return _declarations_. - 1. Return the result of appending to _declarations_ the elements of the VarScopedDeclarations of the second |CaseClauses|. + 1. If the first |CaseClauses| is present, let _declarations1_ be the VarScopedDeclarations of the first |CaseClauses|. + 1. Else, let _declarations1_ be a new empty List. + 1. Let _declarations2_ be VarScopedDeclarations of |DefaultClause|. + 1. If the second |CaseClauses| is present, let _declarations3_ be the VarScopedDeclarations of the second |CaseClauses|. + 1. Else, let _declarations3_ be a new empty List. + 1. Return the list-concatenation of _declarations1_, _declarations2_, and _declarations3_. CaseClauses : CaseClauses CaseClause - 1. Let _declarations_ be VarScopedDeclarations of |CaseClauses|. - 1. Append to _declarations_ the elements of the VarScopedDeclarations of |CaseClause|. - 1. Return _declarations_. + 1. Let _declarations1_ be VarScopedDeclarations of |CaseClauses|. + 1. Let _declarations2_ be VarScopedDeclarations of |CaseClause|. + 1. Return the list-concatenation of _declarations1_ and _declarations2_. CaseClause : `case` Expression `:` StatementList? @@ -6857,22 +6861,22 @@

Static Semantics: VarScopedDeclarations

TryStatement : `try` Block Catch - 1. Let _declarations_ be VarScopedDeclarations of |Block|. - 1. Append to _declarations_ the elements of the VarScopedDeclarations of |Catch|. - 1. Return _declarations_. + 1. Let _declarations1_ be VarScopedDeclarations of |Block|. + 1. Let _declarations2_ be VarScopedDeclarations of |Catch|. + 1. Return the list-concatenation of _declarations1_ and _declarations2_. TryStatement : `try` Block Finally - 1. Let _declarations_ be VarScopedDeclarations of |Block|. - 1. Append to _declarations_ the elements of the VarScopedDeclarations of |Finally|. - 1. Return _declarations_. + 1. Let _declarations1_ be VarScopedDeclarations of |Block|. + 1. Let _declarations2_ be VarScopedDeclarations of |Finally|. + 1. Return the list-concatenation of _declarations1_ and _declarations2_. TryStatement : `try` Block Catch Finally - 1. Let _declarations_ be VarScopedDeclarations of |Block|. - 1. Append to _declarations_ the elements of the VarScopedDeclarations of |Catch|. - 1. Append to _declarations_ the elements of the VarScopedDeclarations of |Finally|. - 1. Return _declarations_. + 1. Let _declarations1_ be VarScopedDeclarations of |Block|. + 1. Let _declarations2_ be VarScopedDeclarations of |Catch|. + 1. Let _declarations3_ be VarScopedDeclarations of |Finally|. + 1. Return the list-concatenation of _declarations1_, _declarations2_, and _declarations3_. Catch : `catch` `(` CatchParameter `)` Block @@ -6906,9 +6910,9 @@

Static Semantics: VarScopedDeclarations

ModuleItemList : ModuleItemList ModuleItem - 1. Let _declarations_ be VarScopedDeclarations of |ModuleItemList|. - 1. Append to _declarations_ the elements of the VarScopedDeclarations of |ModuleItem|. - 1. Return _declarations_. + 1. Let _declarations1_ be VarScopedDeclarations of |ModuleItemList|. + 1. Let _declarations2_ be VarScopedDeclarations of |ModuleItem|. + 1. Return the list-concatenation of _declarations1_ and _declarations2_. ModuleItem : ImportDeclaration @@ -6925,9 +6929,9 @@

Static Semantics: VarScopedDeclarations

Static Semantics: TopLevelLexicallyDeclaredNames

StatementList : StatementList StatementListItem - 1. Let _names_ be TopLevelLexicallyDeclaredNames of |StatementList|. - 1. Append to _names_ the elements of the TopLevelLexicallyDeclaredNames of |StatementListItem|. - 1. Return _names_. + 1. Let _names1_ be TopLevelLexicallyDeclaredNames of |StatementList|. + 1. Let _names2_ be TopLevelLexicallyDeclaredNames of |StatementListItem|. + 1. Return the list-concatenation of _names1_ and _names2_. StatementListItem : Statement @@ -6956,9 +6960,9 @@

Static Semantics: TopLevelLexicallyScopedDeclarations

StatementList : StatementList StatementListItem - 1. Let _declarations_ be TopLevelLexicallyScopedDeclarations of |StatementList|. - 1. Append to _declarations_ the elements of the TopLevelLexicallyScopedDeclarations of |StatementListItem|. - 1. Return _declarations_. + 1. Let _declarations1_ be TopLevelLexicallyScopedDeclarations of |StatementList|. + 1. Let _declarations2_ be TopLevelLexicallyScopedDeclarations of |StatementListItem|. + 1. Return the list-concatenation of _declarations1_ and _declarations2_. StatementListItem : Statement @@ -6984,9 +6988,9 @@

Static Semantics: TopLevelVarDeclaredNames

StatementList : StatementList StatementListItem - 1. Let _names_ be TopLevelVarDeclaredNames of |StatementList|. - 1. Append to _names_ the elements of the TopLevelVarDeclaredNames of |StatementListItem|. - 1. Return _names_. + 1. Let _names1_ be TopLevelVarDeclaredNames of |StatementList|. + 1. Let _names2_ be TopLevelVarDeclaredNames of |StatementListItem|. + 1. Return the list-concatenation of _names1_ and _names2_. StatementListItem : Declaration @@ -7025,9 +7029,9 @@

Static Semantics: TopLevelVarScopedDeclarations

StatementList : StatementList StatementListItem - 1. Let _declarations_ be TopLevelVarScopedDeclarations of |StatementList|. - 1. Append to _declarations_ the elements of the TopLevelVarScopedDeclarations of |StatementListItem|. - 1. Return _declarations_. + 1. Let _declarations1_ be TopLevelVarScopedDeclarations of |StatementList|. + 1. Let _declarations2_ be TopLevelVarScopedDeclarations of |StatementListItem|. + 1. Return the list-concatenation of _declarations1_ and _declarations2_. StatementListItem : Statement @@ -7172,7 +7176,7 @@

Static Semantics: ContainsDuplicateLabels

1. Let _label_ be the StringValue of |LabelIdentifier|. 1. If _label_ is an element of _labelSet_, return *true*. - 1. Let _newLabelSet_ be a copy of _labelSet_ with _label_ appended. + 1. Let _newLabelSet_ be the list-concatenation of _labelSet_ and « _label_ ». 1. Return ContainsDuplicateLabels of |LabelledItem| with argument _newLabelSet_. LabelledItem : FunctionDeclaration @@ -7340,7 +7344,7 @@

Static Semantics: ContainsUndefinedBreakTarget

LabelledStatement : LabelIdentifier `:` LabelledItem 1. Let _label_ be the StringValue of |LabelIdentifier|. - 1. Let _newLabelSet_ be a copy of _labelSet_ with _label_ appended. + 1. Let _newLabelSet_ be the list-concatenation of _labelSet_ and « _label_ ». 1. Return ContainsUndefinedBreakTarget of |LabelledItem| with argument _newLabelSet_. LabelledItem : FunctionDeclaration @@ -7411,7 +7415,7 @@

Static Semantics: ContainsUndefinedContinueTarget

BreakableStatement : IterationStatement - 1. Let _newIterationSet_ be a copy of _iterationSet_ with all the elements of _labelSet_ appended. + 1. Let _newIterationSet_ be the list-concatenation of _iterationSet_ and _labelSet_. 1. Return ContainsUndefinedContinueTarget of |IterationStatement| with arguments _newIterationSet_ and « ». StatementList : StatementList StatementListItem @@ -7513,7 +7517,7 @@

Static Semantics: ContainsUndefinedContinueTarget

LabelledStatement : LabelIdentifier `:` LabelledItem 1. Let _label_ be the StringValue of |LabelIdentifier|. - 1. Let _newLabelSet_ be a copy of _labelSet_ with _label_ appended. + 1. Let _newLabelSet_ be the list-concatenation of _labelSet_ and « _label_ ». 1. Return ContainsUndefinedContinueTarget of |LabelledItem| with arguments _iterationSet_ and _newLabelSet_. LabelledItem : FunctionDeclaration @@ -11501,7 +11505,7 @@

FunctionDeclarationInstantiation ( _func_, _argumentsList_ )

1. Else, 1. Perform ! _env_.CreateMutableBinding(*"arguments"*, *false*). 1. Call _env_.InitializeBinding(*"arguments"*, _ao_). - 1. Let _parameterBindings_ be a List whose elements are the elements of _parameterNames_, followed by *"arguments"*. + 1. Let _parameterBindings_ be the list-concatenation of _parameterNames_ and « *"arguments"* ». 1. Else, 1. Let _parameterBindings_ be _parameterNames_. 1. Let _iteratorRecord_ be CreateListIteratorRecord(_argumentsList_). @@ -11693,7 +11697,7 @@

[[Call]] ( _thisArgument_, _argumentsList_ )

1. Let _target_ be _F_.[[BoundTargetFunction]]. 1. Let _boundThis_ be _F_.[[BoundThis]]. 1. Let _boundArgs_ be _F_.[[BoundArguments]]. - 1. Let _args_ be a List whose elements are the elements of _boundArgs_, followed by the elements of _argumentsList_. + 1. Let _args_ be the list-concatenation of _boundArgs_ and _argumentsList_. 1. Return ? Call(_target_, _boundThis_, _args_).
@@ -11705,7 +11709,7 @@

[[Construct]] ( _argumentsList_, _newTarget_ )

1. Let _target_ be _F_.[[BoundTargetFunction]]. 1. Assert: IsConstructor(_target_) is *true*. 1. Let _boundArgs_ be _F_.[[BoundArguments]]. - 1. Let _args_ be a List whose elements are the elements of _boundArgs_, followed by the elements of _argumentsList_. + 1. Let _args_ be the list-concatenation of _boundArgs_ and _argumentsList_. 1. If SameValue(_F_, _newTarget_) is *true*, set _newTarget_ to _target_. 1. Return ? Construct(_target_, _args_, _newTarget_).
@@ -12480,10 +12484,9 @@

[[Delete]] ( _P_ )

[[OwnPropertyKeys]] ( )

The [[OwnPropertyKeys]] internal method of a module namespace exotic object _O_ takes no arguments. It performs the following steps when called:

- 1. Let _exports_ be a copy of _O_.[[Exports]]. + 1. Let _exports_ be _O_.[[Exports]]. 1. Let _symbolKeys_ be ! OrdinaryOwnPropertyKeys(_O_). - 1. Append all the entries of _symbolKeys_ to the end of _exports_. - 1. Return _exports_. + 1. Return the list-concatenation of _exports_ and _symbolKeys_. @@ -15467,15 +15470,16 @@

Static Semantics: IsComputedPropertyKey

Static Semantics: PropertyNameList

PropertyDefinitionList : PropertyDefinition - 1. If PropName of |PropertyDefinition| is ~empty~, return a new empty List. - 1. Return a List whose sole element is PropName of |PropertyDefinition|. + 1. Let _propName_ be PropName of |PropertyDefinition|. + 1. If _propName_ is ~empty~, return a new empty List. + 1. Return a List whose sole element is _propName_. PropertyDefinitionList : PropertyDefinitionList `,` PropertyDefinition 1. Let _list_ be PropertyNameList of |PropertyDefinitionList|. - 1. If PropName of |PropertyDefinition| is ~empty~, return _list_. - 1. Append PropName of |PropertyDefinition| to the end of _list_. - 1. Return _list_. + 1. Let _propName_ be PropName of |PropertyDefinition|. + 1. If _propName_ is ~empty~, return _list_. + 1. Return the list-concatenation of _list_ and « _propName_ ». @@ -15722,7 +15726,7 @@

Static Semantics: TemplateStrings

1. Else, 1. Let _head_ be the TRV of |TemplateHead|. 1. Let _tail_ be TemplateStrings of |TemplateSpans| with argument _raw_. - 1. Return a List whose elements are _head_ followed by the elements of _tail_. + 1. Return the list-concatenation of « _head_ » and _tail_.
TemplateSpans : TemplateTail @@ -15739,7 +15743,7 @@

Static Semantics: TemplateStrings

1. Let _tail_ be the TV of |TemplateTail|. 1. Else, 1. Let _tail_ be the TRV of |TemplateTail|. - 1. Return a List whose elements are the elements of _middle_ followed by _tail_. + 1. Return the list-concatenation of _middle_ and « _tail_ ».
TemplateMiddleList : TemplateMiddle Expression @@ -15756,8 +15760,7 @@

Static Semantics: TemplateStrings

1. Let _last_ be the TV of |TemplateMiddle|. 1. Else, 1. Let _last_ be the TRV of |TemplateMiddle|. - 1. Append _last_ as the last element of the List _front_. - 1. Return _front_. + 1. Return the list-concatenation of _front_ and « _last_ ».
@@ -15822,8 +15825,7 @@

Runtime Semantics: SubstitutionEvaluation

1. Let _preceding_ be ? SubstitutionEvaluation of |TemplateMiddleList|. 1. Let _nextRef_ be the result of evaluating |Expression|. 1. Let _next_ be ? GetValue(_nextRef_). - 1. Append _next_ as the last element of the List _preceding_. - 1. Return _preceding_. + 1. Return the list-concatenation of _preceding_ and « _next_ ». @@ -16350,8 +16352,7 @@

Runtime Semantics: ArgumentListEvaluation

1. Let _precedingArgs_ be ? ArgumentListEvaluation of |ArgumentList|. 1. Let _ref_ be the result of evaluating |AssignmentExpression|. 1. Let _arg_ be ? GetValue(_ref_). - 1. Append _arg_ to the end of _precedingArgs_. - 1. Return _precedingArgs_. + 1. Return the list-concatenation of _precedingArgs_ and « _arg_ ». ArgumentList : ArgumentList `,` `...` AssignmentExpression @@ -16375,15 +16376,15 @@

Runtime Semantics: ArgumentListEvaluation

1. Let _templateLiteral_ be this |TemplateLiteral|. 1. Let _siteObj_ be GetTemplateObject(_templateLiteral_). 1. Let _remaining_ be ? ArgumentListEvaluation of |SubstitutionTemplate|. - 1. Return a List whose first element is _siteObj_ and whose subsequent elements are the elements of _remaining_. + 1. Return the list-concatenation of « _siteObj_ » and _remaining_.
SubstitutionTemplate : TemplateHead Expression TemplateSpans 1. Let _firstSubRef_ be the result of evaluating |Expression|. 1. Let _firstSub_ be ? GetValue(_firstSubRef_). 1. Let _restSub_ be ? SubstitutionEvaluation of |TemplateSpans|. - 1. Assert: _restSub_ is a List. - 1. Return a List whose first element is _firstSub_ and whose subsequent elements are the elements of _restSub_. _restSub_ may contain no elements. + 1. Assert: _restSub_ is a possibly empty List. + 1. Return the list-concatenation of « _firstSub_ » and _restSub_. @@ -17795,8 +17796,7 @@

Runtime Semantics: PropertyDestructuringAssignmentEvaluation

1. Let _propertyNames_ be ? PropertyDestructuringAssignmentEvaluation of |AssignmentPropertyList| with argument _value_. 1. Let _nextNames_ be ? PropertyDestructuringAssignmentEvaluation of |AssignmentProperty| with argument _value_. - 1. Append each item in _nextNames_ to the end of _propertyNames_. - 1. Return _propertyNames_. + 1. Return the list-concatenation of _propertyNames_ and _nextNames_. AssignmentProperty : IdentifierReference Initializer? @@ -18355,8 +18355,7 @@

Runtime Semantics: PropertyBindingInitialization

1. Let _boundNames_ be ? PropertyBindingInitialization of |BindingPropertyList| with arguments _value_ and _environment_. 1. Let _nextNames_ be ? PropertyBindingInitialization of |BindingProperty| with arguments _value_ and _environment_. - 1. Append each item in _nextNames_ to the end of _boundNames_. - 1. Return _boundNames_. + 1. Return the list-concatenation of _boundNames_ and _nextNames_. BindingProperty : SingleNameBinding @@ -19607,8 +19606,8 @@

Runtime Semantics: LabelledEvaluation

LabelledStatement : LabelIdentifier `:` LabelledItem 1. Let _label_ be the StringValue of |LabelIdentifier|. - 1. Append _label_ as an element of _labelSet_. - 1. Let _stmtResult_ be LabelledEvaluation of |LabelledItem| with argument _labelSet_. + 1. Let _newLabelSet_ be the list-concatenation of _labelSet_ and « _label_ ». + 1. Let _stmtResult_ be LabelledEvaluation of |LabelledItem| with argument _newLabelSet_. 1. If _stmtResult_.[[Type]] is ~break~ and SameValue(_stmtResult_.[[Target]], _label_) is *true*, then 1. Set _stmtResult_ to NormalCompletion(_stmtResult_.[[Value]]). 1. Return Completion(_stmtResult_). @@ -21163,17 +21162,18 @@

Static Semantics: NonConstructorElements

Static Semantics: PrototypePropertyNameList

ClassElementList : ClassElement - 1. If PropName of |ClassElement| is ~empty~, return a new empty List. + 1. Let _propName_ be PropName of |ClassElement|. + 1. If _propName_ is ~empty~, return a new empty List. 1. If IsStatic of |ClassElement| is *true*, return a new empty List. - 1. Return a List whose sole element is PropName of |ClassElement|. + 1. Return a List whose sole element is _propName_. ClassElementList : ClassElementList ClassElement 1. Let _list_ be PrototypePropertyNameList of |ClassElementList|. - 1. If PropName of |ClassElement| is ~empty~, return _list_. + 1. Let _propName_ be PropName of |ClassElement|. + 1. If _propName_ is ~empty~, return _list_. 1. If IsStatic of |ClassElement| is *true*, return _list_. - 1. Append PropName of |ClassElement| to the end of _list_. - 1. Return _list_. + 1. Return the list-concatenation of _list_ and « _propName_ ». @@ -21218,8 +21218,7 @@

Static Semantics: AllPrivateIdentifiersValid

ClassBody : ClassElementList - 1. Let _newNames_ be a copy of _names_. - 1. Append to _newNames_ the elements of PrivateBoundIdentifiers of |ClassBody|. + 1. Let _newNames_ be the list-concatenation of _names_ and PrivateBoundIdentifiers of |ClassBody|. 1. Return AllPrivateIdentifiersValid of |ClassElementList| with argument _newNames_. @@ -21253,9 +21252,9 @@

Static Semantics: PrivateBoundIdentifiers

ClassElementList : ClassElementList ClassElement - 1. Let _names_ be PrivateBoundIdentifiers of |ClassElementList|. - 1. Append to _names_ the elements of PrivateBoundIdentifiers of |ClassElement|. - 1. Return _names_. + 1. Let _names1_ be PrivateBoundIdentifiers of |ClassElementList|. + 1. Let _names2_ be PrivateBoundIdentifiers of |ClassElement|. + 1. Return the list-concatenation of _names1_ and _names2_. @@ -23907,9 +23906,9 @@

Static Semantics: ImportEntries

ModuleItemList : ModuleItemList ModuleItem - 1. Let _entries_ be ImportEntries of |ModuleItemList|. - 1. Append to _entries_ the elements of the ImportEntries of |ModuleItem|. - 1. Return _entries_. + 1. Let _entries1_ be ImportEntries of |ModuleItemList|. + 1. Let _entries2_ be ImportEntries of |ModuleItem|. + 1. Return the list-concatenation of _entries1_ and _entries2_. ModuleItem : @@ -23935,15 +23934,15 @@

Static Semantics: ImportEntriesForModule

With parameter _module_.

ImportClause : ImportedDefaultBinding `,` NameSpaceImport - 1. Let _entries_ be ImportEntriesForModule of |ImportedDefaultBinding| with argument _module_. - 1. Append to _entries_ the elements of the ImportEntriesForModule of |NameSpaceImport| with argument _module_. - 1. Return _entries_. + 1. Let _entries1_ be ImportEntriesForModule of |ImportedDefaultBinding| with argument _module_. + 1. Let _entries2_ be ImportEntriesForModule of |NameSpaceImport| with argument _module_. + 1. Return the list-concatenation of _entries1_ and _entries2_. ImportClause : ImportedDefaultBinding `,` NamedImports - 1. Let _entries_ be ImportEntriesForModule of |ImportedDefaultBinding| with argument _module_. - 1. Append to _entries_ the elements of the ImportEntriesForModule of |NamedImports| with argument _module_. - 1. Return _entries_. + 1. Let _entries1_ be ImportEntriesForModule of |ImportedDefaultBinding| with argument _module_. + 1. Let _entries2_ be ImportEntriesForModule of |NamedImports| with argument _module_. + 1. Return the list-concatenation of _entries1_ and _entries2_. ImportedDefaultBinding : ImportedBinding @@ -23963,9 +23962,9 @@

Static Semantics: ImportEntriesForModule

ImportsList : ImportsList `,` ImportSpecifier - 1. Let _specs_ be the ImportEntriesForModule of |ImportsList| with argument _module_. - 1. Append to _specs_ the elements of the ImportEntriesForModule of |ImportSpecifier| with argument _module_. - 1. Return _specs_. + 1. Let _specs1_ be the ImportEntriesForModule of |ImportsList| with argument _module_. + 1. Let _specs2_ be the ImportEntriesForModule of |ImportSpecifier| with argument _module_. + 1. Return the list-concatenation of _specs1_ and _specs2_. ImportSpecifier : ImportedBinding @@ -24035,9 +24034,9 @@

Static Semantics: ExportedBindings

ModuleItemList : ModuleItemList ModuleItem - 1. Let _names_ be ExportedBindings of |ModuleItemList|. - 1. Append to _names_ the elements of the ExportedBindings of |ModuleItem|. - 1. Return _names_. + 1. Let _names1_ be ExportedBindings of |ModuleItemList|. + 1. Let _names2_ be ExportedBindings of |ModuleItem|. + 1. Return the list-concatenation of _names1_ and _names2_. ModuleItem : @@ -24081,9 +24080,9 @@

Static Semantics: ExportedBindings

ExportsList : ExportsList `,` ExportSpecifier - 1. Let _names_ be the ExportedBindings of |ExportsList|. - 1. Append to _names_ the elements of the ExportedBindings of |ExportSpecifier|. - 1. Return _names_. + 1. Let _names1_ be the ExportedBindings of |ExportsList|. + 1. Let _names2_ be the ExportedBindings of |ExportSpecifier|. + 1. Return the list-concatenation of _names1_ and _names2_. ExportSpecifier : IdentifierName @@ -24102,9 +24101,9 @@

Static Semantics: ExportedNames

ModuleItemList : ModuleItemList ModuleItem - 1. Let _names_ be ExportedNames of |ModuleItemList|. - 1. Append to _names_ the elements of the ExportedNames of |ModuleItem|. - 1. Return _names_. + 1. Let _names1_ be ExportedNames of |ModuleItemList|. + 1. Let _names2_ be ExportedNames of |ModuleItem|. + 1. Return the list-concatenation of _names1_ and _names2_. ModuleItem : ExportDeclaration @@ -24157,9 +24156,9 @@

Static Semantics: ExportedNames

ExportsList : ExportsList `,` ExportSpecifier - 1. Let _names_ be the ExportedNames of |ExportsList|. - 1. Append to _names_ the elements of the ExportedNames of |ExportSpecifier|. - 1. Return _names_. + 1. Let _names1_ be the ExportedNames of |ExportsList|. + 1. Let _names2_ be the ExportedNames of |ExportSpecifier|. + 1. Return the list-concatenation of _names1_ and _names2_. ExportSpecifier : IdentifierName @@ -24179,9 +24178,9 @@

Static Semantics: ExportEntries

ModuleItemList : ModuleItemList ModuleItem - 1. Let _entries_ be ExportEntries of |ModuleItemList|. - 1. Append to _entries_ the elements of the ExportEntries of |ModuleItem|. - 1. Return _entries_. + 1. Let _entries1_ be ExportEntries of |ModuleItemList|. + 1. Let _entries2_ be ExportEntries of |ModuleItem|. + 1. Return the list-concatenation of _entries1_ and _entries2_. ModuleItem : @@ -24258,9 +24257,9 @@

Static Semantics: ExportEntriesForModule

ExportsList : ExportsList `,` ExportSpecifier - 1. Let _specs_ be the ExportEntriesForModule of |ExportsList| with argument _module_. - 1. Append to _specs_ the elements of the ExportEntriesForModule of |ExportSpecifier| with argument _module_. - 1. Return _specs_. + 1. Let _specs1_ be the ExportEntriesForModule of |ExportsList| with argument _module_. + 1. Let _specs2_ be the ExportEntriesForModule of |ExportSpecifier| with argument _module_. + 1. Return the list-concatenation of _specs1_ and _specs2_. ExportSpecifier : IdentifierName @@ -24295,9 +24294,9 @@

Static Semantics: ReferencedBindings

ExportsList : ExportsList `,` ExportSpecifier - 1. Let _names_ be the ReferencedBindings of |ExportsList|. - 1. Append to _names_ the elements of the ReferencedBindings of |ExportSpecifier|. - 1. Return _names_. + 1. Let _names1_ be the ReferencedBindings of |ExportsList|. + 1. Let _names2_ be the ReferencedBindings of |ExportSpecifier|. + 1. Return the list-concatenation of _names1_ and _names2_. ExportSpecifier : IdentifierName @@ -42678,9 +42677,7 @@

Changes to GlobalDeclarationInstantiation

1. Let _strict_ be IsStrict of _script_. 1. If _strict_ is *false*, then - 1. Let _declaredFunctionOrVarNames_ be a new empty List. - 1. Append to _declaredFunctionOrVarNames_ the elements of _declaredFunctionNames_. - 1. Append to _declaredFunctionOrVarNames_ the elements of _declaredVarNames_. + 1. Let _declaredFunctionOrVarNames_ be the list-concatenation of _declaredFunctionNames_ and _declaredVarNames_. 1. For each |FunctionDeclaration| _f_ that is directly contained in the |StatementList| of a |Block|, |CaseClause|, or |DefaultClause| Contained within _script_, do 1. Let _F_ be StringValue of the |BindingIdentifier| of _f_. 1. If replacing the |FunctionDeclaration| _f_ with a |VariableStatement| that has _F_ as a |BindingIdentifier| would not produce any Early Errors for _script_, then @@ -42704,9 +42701,7 @@

Changes to EvalDeclarationInstantiation

During EvalDeclarationInstantiation the following steps are performed in place of step :

1. If _strict_ is *false*, then - 1. Let _declaredFunctionOrVarNames_ be a new empty List. - 1. Append to _declaredFunctionOrVarNames_ the elements of _declaredFunctionNames_. - 1. Append to _declaredFunctionOrVarNames_ the elements of _declaredVarNames_. + 1. Let _declaredFunctionOrVarNames_ be the list-concatenation of _declaredFunctionNames_ and _declaredVarNames_. 1. For each |FunctionDeclaration| _f_ that is directly contained in the |StatementList| of a |Block|, |CaseClause|, or |DefaultClause| Contained within _body_, do 1. Let _F_ be StringValue of the |BindingIdentifier| of _f_. 1. If replacing the |FunctionDeclaration| _f_ with a |VariableStatement| that has _F_ as a |BindingIdentifier| would not produce any Early Errors for _body_, then @@ -42865,16 +42860,16 @@

Initializers in ForIn Statement Heads

The static semantics of VarDeclaredNames in are augmented with the following:

ForInOfStatement : `for` `(` `var` BindingIdentifier Initializer `in` Expression `)` Statement - 1. Let _names_ be the BoundNames of |BindingIdentifier|. - 1. Append to _names_ the elements of the VarDeclaredNames of |Statement|. - 1. Return _names_. + 1. Let _names1_ be the BoundNames of |BindingIdentifier|. + 1. Let _names2_ be the VarDeclaredNames of |Statement|. + 1. Return the list-concatenation of _names1_ and _names2_.

The static semantics of VarScopedDeclarations in are augmented with the following:

ForInOfStatement : `for` `(` `var` BindingIdentifier Initializer `in` Expression `)` Statement - 1. Let _declarations_ be a List whose sole element is |BindingIdentifier|. - 1. Append to _declarations_ the elements of the VarScopedDeclarations of |Statement|. - 1. Return _declarations_. + 1. Let _declarations1_ be a List whose sole element is |BindingIdentifier|. + 1. Let _declarations2_ be the VarScopedDeclarations of |Statement|. + 1. Return the list-concatenation of _declarations1_ and _declarations2_.

The runtime semantics of ForInOfLoopEvaluation in are augmented with the following:

ForInOfStatement : `for` `(` `var` BindingIdentifier Initializer `in` Expression `)` Statement