mirror of
https://github.com/RGBCube/serenity
synced 2025-05-18 21:45:08 +00:00
Shell: Make for/match/functions put their variables only in the new scope
Otherwise, a function would, for example, overwrite its parent scope: ```sh foo(x) { } x=1 foo 2 # would make x=2 otherwise ```
This commit is contained in:
parent
97c5a78d27
commit
9bd81f34a5
3 changed files with 9 additions and 4 deletions
|
@ -1034,7 +1034,7 @@ RefPtr<Value> ForLoop::run(RefPtr<Shell> shell)
|
|||
|
||||
{
|
||||
auto frame = shell->push_frame(String::formatted("for ({})", this));
|
||||
shell->set_local_variable(m_variable_name, value);
|
||||
shell->set_local_variable(m_variable_name, value, true);
|
||||
|
||||
block_value = m_block->run(shell);
|
||||
}
|
||||
|
@ -1587,7 +1587,7 @@ RefPtr<Value> MatchExpr::run(RefPtr<Shell> shell)
|
|||
|
||||
auto frame = shell->push_frame(String::formatted("match ({})", this));
|
||||
if (!m_expr_name.is_empty())
|
||||
shell->set_local_variable(m_expr_name, value);
|
||||
shell->set_local_variable(m_expr_name, value, true);
|
||||
|
||||
for (auto& entry : m_entries) {
|
||||
for (auto& option : entry.options) {
|
||||
|
@ -1598,7 +1598,7 @@ RefPtr<Value> MatchExpr::run(RefPtr<Shell> shell)
|
|||
size_t i = 0;
|
||||
for (auto& name : entry.match_names.value()) {
|
||||
if (spans.size() > i)
|
||||
shell->set_local_variable(name, create<AST::StringValue>(spans[i]));
|
||||
shell->set_local_variable(name, create<AST::StringValue>(spans[i]), true);
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue