From f914f00b4c54dfab93d392c531bd3774076b30b3 Mon Sep 17 00:00:00 2001 From: Michael Dyck Date: Thu, 27 Jun 2024 12:20:14 -0400 Subject: [PATCH] Editorial: Fix old bug in Annex B's changes to FunctionDeclarationInstantiation This PR completes a small bugfix from 9 years ago. Fixes #2663. ---- History: 2015-07-17: @bakkot identifies a problem in Annex B's "Changes to FunctionDeclarationInstantiation": https://esdiscuss.org/topic/block-level-function-declarations-web-legacy-compatibility-bug To remedy this, @allenwb submits bug 4427: https://tc39.es/archives/bugzilla/4427/ in which he recommends changing > For each FunctionDeclaration _f_ **in _varDeclarations_** that is directly contained in the |StatementList| of a |Block|, |CaseClause|, or |DefaultClause|, to > For each FunctionDeclaration _f_ that is directly contained in the |StatementList| of a |Block|, |CaseClause|, or |DefaultClause| **Contained within _code_**, (emphasis mine). 2015-10-29: @anba submits PR #141, claiming to fix bug 4427. It deletes "in _varDeclarations_", but doesn't add "Contained within _code_". My guess is, this was just an oversight. 2015-11-02: PR #141 is merged to master as commit efbfc88. 2022-02-13: @nicolo-ribaudo raises issue #2663 about this, and says he'd open a PR to fix it, but I don't think that happened. 2024-06-26: @gibson042 raises the problem again, in a commment on PR #2952: https://github.com/tc39/ecma262/pull/2952#discussion_r1655601962 --- spec.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec.html b/spec.html index e96f6b8795..40a7b919f2 100644 --- a/spec.html +++ b/spec.html @@ -50965,7 +50965,7 @@

Changes to FunctionDeclarationInstantiation

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

1. If _strict_ is *false*, then - 1. For each |FunctionDeclaration| _f_ that is directly contained in the |StatementList| of a |Block|, |CaseClause|, or |DefaultClause|, do + 1. For each |FunctionDeclaration| _f_ that is directly contained in the |StatementList| of a |Block|, |CaseClause|, or |DefaultClause| Contained within _code_, do 1. Let _F_ be the 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 _func_ and _parameterNames_ does not contain _F_, then 1. NOTE: A var binding for _F_ is only instantiated here if it is neither a VarDeclaredName, the name of a formal parameter, or another |FunctionDeclaration|.