mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-26 03:12:07 -05:00
LibJS: Clean up the anonymous wrapper block in "for" using ScopeGuard
This ensures that we don't forget to pop the wrapper off of the scope stack when returning early due to an exception or some such. :^)
This commit is contained in:
parent
9ebd066ac8
commit
3c99c27db4
1 changed files with 6 additions and 3 deletions
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include <AK/Function.h>
|
||||
#include <AK/HashMap.h>
|
||||
#include <AK/ScopeGuard.h>
|
||||
#include <AK/StringBuilder.h>
|
||||
#include <LibJS/AST.h>
|
||||
#include <LibJS/Interpreter.h>
|
||||
|
@ -200,6 +201,11 @@ Value ForStatement::execute(Interpreter& interpreter) const
|
|||
interpreter.enter_scope(*wrapper, {}, ScopeType::Block);
|
||||
}
|
||||
|
||||
auto wrapper_cleanup = ScopeGuard([&] {
|
||||
if (wrapper)
|
||||
interpreter.exit_scope(*wrapper);
|
||||
});
|
||||
|
||||
Value last_value = js_undefined();
|
||||
|
||||
if (m_init) {
|
||||
|
@ -254,9 +260,6 @@ Value ForStatement::execute(Interpreter& interpreter) const
|
|||
}
|
||||
}
|
||||
|
||||
if (wrapper)
|
||||
interpreter.exit_scope(*wrapper);
|
||||
|
||||
return last_value;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue