@@ -1826,26 +1826,6 @@ void Parser::FinishParseBlock(ParseNodeBlock *pnodeBlock, bool needScanRCurly)
1826
1826
}
1827
1827
}
1828
1828
1829
- void CheckFncExprNameCapturedInParamScope(ParseNodeFnc* pnodeFnc, ParseNodeBlock* pnodeFncExprScope)
1830
- {
1831
- ParseNodeBlock* bodyScope = pnodeFnc->pnodeBodyScope;
1832
- ParseNodePtr pnodeName = pnodeFnc->pnodeName;
1833
-
1834
- if (bodyScope == nullptr || pnodeName == nullptr || !pnodeFnc->IsBodyAndParamScopeMerged())
1835
- {
1836
- return;
1837
- }
1838
-
1839
- for (PidRefStack* ref = pnodeName->AsParseNodeVar()->pid->GetTopRef(); ref && ref->id > pnodeFncExprScope->blockId; ref = ref->prev)
1840
- {
1841
- if (ref->id < bodyScope->blockId && ref->id > pnodeFncExprScope->blockId)
1842
- {
1843
- pnodeFncExprScope->scope->SetIsObject();
1844
- return;
1845
- }
1846
- }
1847
- }
1848
-
1849
1829
void Parser::FinishParseFncExprScope(ParseNodeFnc * pnodeFnc, ParseNodeBlock * pnodeFncExprScope)
1850
1830
{
1851
1831
int fncExprScopeId = pnodeFncExprScope->blockId;
@@ -1993,6 +1973,20 @@ void Parser::BindPidRefsInScope(IdentPtr pid, Symbol *sym, int blockId, uint max
1993
1973
}
1994
1974
}
1995
1975
1976
+ if (m_currentNodeFunc && m_currentNodeFunc->pnodeName && pid == m_currentNodeFunc->pnodeName->pid && !m_currentNodeFunc->IsDeclaration() && m_currentNodeFunc->IsBodyAndParamScopeMerged())
1977
+ {
1978
+ Scope* funcExprScope = m_currentNodeFunc->scope;
1979
+ Assert(funcExprScope->GetScopeType() == ScopeType_FuncExpr);
1980
+
1981
+ ParseNodeBlock* bodyScope = m_currentNodeFunc->pnodeBodyScope;
1982
+ Assert(bodyScope->blockType == PnodeBlockType::Function);
1983
+
1984
+ if (ref->GetScopeId() < bodyScope->blockId && ref->GetScopeId() > blockId)
1985
+ {
1986
+ funcExprScope->SetIsObject();
1987
+ }
1988
+ }
1989
+
1996
1990
if (ref->GetScopeId() == blockId)
1997
1991
{
1998
1992
break;
@@ -6038,11 +6032,6 @@ void Parser::ParseFncDeclHelper(ParseNodeFnc * pnodeFnc, LPCOLESTR pNameHint, us
6038
6032
6039
6033
if (pnodeBlock)
6040
6034
{
6041
- if (pnodeFncExprScope)
6042
- {
6043
- CheckFncExprNameCapturedInParamScope(pnodeFnc, pnodeFncExprScope);
6044
- }
6045
-
6046
6035
FinishParseBlock(pnodeBlock, *pNeedScanRCurly);
6047
6036
}
6048
6037
0 commit comments