@@ -1649,13 +1649,13 @@ private FunctionExpression ParseMethod(bool isGenerator, bool isAsync = false, b
16491649
16501650 NodeList < Node > parameters = ParseBindingList ( close : TokenType . ParenRight , allowEmptyElement : false , allowTrailingComma : _tokenizerOptions . _ecmaVersion >= EcmaVersion . ES8 ) ! ;
16511651 CheckYieldAwaitInDefaultParams ( ) ;
1652- var body = ParseFunctionBody ( id : null , parameters , isArrowFunction : false , isMethod : true , ExpressionContext . Default , out _ ) ;
1652+ var scope = ParseFunctionBody ( id : null , parameters , isArrowFunction : false , isMethod : true , ExpressionContext . Default , out _ , out var body ) ;
16531653
16541654 _yieldPosition = oldYieldPos ;
16551655 _awaitPosition = oldAwaitPos ;
16561656 _awaitIdentifierPosition = oldAwaitIdentPos ;
16571657
1658- return FinishNode ( startMarker , new FunctionExpression ( id : null , parameters , ( FunctionBody ) body , isGenerator , isAsync ) ) ;
1658+ return FinishNode ( startMarker , new FunctionExpression ( id : null , parameters , ( FunctionBody ) body , isGenerator , isAsync ) , scope ) ;
16591659 }
16601660
16611661 // Parse arrow function expression with given parameters.
@@ -1674,24 +1674,22 @@ private ArrowFunctionExpression ParseArrowExpression(in Marker startMarker, in N
16741674 EnterScope ( FunctionFlags ( isAsync , generator : false ) | ScopeFlags . Arrow ) ;
16751675
16761676 NodeList < Node > paramList = ToAssignableList ( parameters ! , isBinding : true , isParams : true ) ! ;
1677- var body = ParseFunctionBody ( id : null , paramList , isArrowFunction : true , isMethod : false , context , out var expression ) ;
1677+ var scope = ParseFunctionBody ( id : null , paramList , isArrowFunction : true , isMethod : false , context , out var expression , out var body ) ;
16781678
16791679 _yieldPosition = oldYieldPos ;
16801680 _awaitPosition = oldAwaitPos ;
16811681 _awaitIdentifierPosition = oldAwaitIdentPos ;
16821682
1683- return FinishNode ( startMarker , new ArrowFunctionExpression ( paramList , body , expression , isAsync ) ) ;
1683+ return FinishNode ( startMarker , new ArrowFunctionExpression ( paramList , body , expression , isAsync ) , scope ) ;
16841684 }
16851685
16861686 // Parse function body and check parameters.
1687- private StatementOrExpression ParseFunctionBody ( Identifier ? id , in NodeList < Node > parameters ,
1688- bool isArrowFunction , bool isMethod , ExpressionContext context , out bool expression )
1687+ private ReadOnlyRef < Scope > ParseFunctionBody ( Identifier ? id , in NodeList < Node > parameters , bool isArrowFunction , bool isMethod , ExpressionContext context ,
1688+ out bool expression , out StatementOrExpression body )
16891689 {
16901690 // https://github.com/acornjs/acorn/blob/8.11.3/acorn/src/expression.js > `pp.parseFunctionBody = function`
16911691
16921692 expression = isArrowFunction && _tokenizer . _type != TokenType . BraceLeft ;
1693-
1694- StatementOrExpression body ;
16951693 if ( expression )
16961694 {
16971695 CheckParams ( parameters , allowDuplicates : false ) ;
@@ -1722,15 +1720,13 @@ private StatementOrExpression ParseFunctionBody(Identifier? id, in NodeList<Node
17221720 // flag (restore them to their old value afterwards).
17231721 var oldLabels = _labels ;
17241722 _labels = new ArrayList < Label > ( ) ;
1725- ParseBlock ( ref statements , createNewLexicalScope : false , exitStrict : strict && ! oldStrict ) ;
1723+ var scope = ParseBlock ( ref statements , createNewLexicalScope : false , exitStrict : strict && ! oldStrict ) ;
17261724 _labels = oldLabels ;
17271725
1728- body = FinishNode ( startMarker , new FunctionBody ( NodeList . From ( ref statements ) , strict ) ) ;
1726+ body = FinishNode ( startMarker , new FunctionBody ( NodeList . From ( ref statements ) , strict ) , scope ) ;
17291727 }
17301728
1731- ExitScope ( ) ;
1732-
1733- return body ;
1729+ return ExitScope ( ) ;
17341730 }
17351731
17361732 private static bool IsSimpleParamList ( in NodeList < Node > parameters )
@@ -1761,6 +1757,9 @@ private void CheckParams(in NodeList<Node> parameters, bool allowDuplicates)
17611757 Debug . Assert ( param is not null ) ;
17621758 CheckLValInnerPattern ( param ! , BindingType . Var , checkClashes : nameHash ) ;
17631759 }
1760+
1761+ ref var varList = ref CurrentScope . _var ;
1762+ varList . ParamCount = varList . Count ;
17641763 }
17651764
17661765 // Parses a comma-separated list of expressions, and returns them as
0 commit comments