LibJS: Improve function hoisting across blocks

The parser now keeps track of a scope chain so that it can hoist
function declarations to the closest function scope.
This commit is contained in:
Hendi 2021-07-04 03:15:52 +02:00 committed by Linus Groh
commit 38fd980b0c
Notes: sideshowbarker 2024-07-18 10:20:15 +09:00
6 changed files with 79 additions and 22 deletions

View file

@ -145,8 +145,10 @@ public:
void add_variables(NonnullRefPtrVector<VariableDeclaration>);
void add_functions(NonnullRefPtrVector<FunctionDeclaration>);
void add_hoisted_functions(NonnullRefPtrVector<FunctionDeclaration>);
NonnullRefPtrVector<VariableDeclaration> const& variables() const { return m_variables; }
NonnullRefPtrVector<FunctionDeclaration> const& functions() const { return m_functions; }
NonnullRefPtrVector<FunctionDeclaration> const& hoisted_functions() const { return m_hoisted_functions; }
protected:
explicit ScopeNode(SourceRange source_range)
@ -160,6 +162,7 @@ private:
NonnullRefPtrVector<Statement> m_children;
NonnullRefPtrVector<VariableDeclaration> m_variables;
NonnullRefPtrVector<FunctionDeclaration> m_functions;
NonnullRefPtrVector<FunctionDeclaration> m_hoisted_functions;
};
class Program final : public ScopeNode {