mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 20:27:45 +00:00
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:
parent
72f8d90dc5
commit
38fd980b0c
6 changed files with 79 additions and 22 deletions
|
@ -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 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue