mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-28 19:59:17 +00:00
LibJS: Hoist function declarations
This patch adds function declaration hoisting. The mechanism is similar to var hoisting. Hoisted function declarations are to be put before the hoisted var declarations, hence they have to be treated separately.
This commit is contained in:
parent
e162b59a5e
commit
2579d0bf55
Notes:
sideshowbarker
2024-07-19 05:48:41 +09:00
Author: https://github.com/nooga
Commit: 2579d0bf55
Pull-request: https://github.com/SerenityOS/serenity/pull/2497
6 changed files with 73 additions and 15 deletions
|
@ -35,6 +35,7 @@
|
|||
#include <LibJS/Runtime/NativeFunction.h>
|
||||
#include <LibJS/Runtime/Object.h>
|
||||
#include <LibJS/Runtime/Reference.h>
|
||||
#include <LibJS/Runtime/ScriptFunction.h>
|
||||
#include <LibJS/Runtime/Shape.h>
|
||||
#include <LibJS/Runtime/SymbolObject.h>
|
||||
#include <LibJS/Runtime/Value.h>
|
||||
|
@ -91,6 +92,11 @@ Value Interpreter::run(const Statement& statement, ArgumentVector arguments, Sco
|
|||
|
||||
void Interpreter::enter_scope(const ScopeNode& scope_node, ArgumentVector arguments, ScopeType scope_type)
|
||||
{
|
||||
for (auto& declaration : scope_node.functions()) {
|
||||
auto* function = ScriptFunction::create(global_object(), declaration.name(), declaration.body(), declaration.parameters(), declaration.function_length(), current_environment());
|
||||
set_variable(declaration.name(), function);
|
||||
}
|
||||
|
||||
if (scope_type == ScopeType::Function) {
|
||||
m_scope_stack.append({ scope_type, scope_node, false });
|
||||
return;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue