From 0059192f611132bbd7dd97223f9f208deb22ece3 Mon Sep 17 00:00:00 2001 From: Fabian Homborg Date: Wed, 4 Aug 2021 17:54:58 +0200 Subject: [PATCH] Allow erasing vars via function-scope This triggered an assert because the remove code had no idea how to find the function scope. Oops! --- src/env.cpp | 7 +++++++ tests/checks/set.fish | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/env.cpp b/src/env.cpp index c11a60ba4..0d2625007 100644 --- a/src/env.cpp +++ b/src/env.cpp @@ -1251,6 +1251,13 @@ mod_result_t env_stack_impl_t::remove(const wcstring &key, int mode) { result.global_modified = true; } else if (query.local) { result.status = remove_from_chain(locals_, key) ? ENV_OK : ENV_NOT_FOUND; + } else if (query.function) { + auto node = locals_; + while (node->next) { + node = node->next; + if (node->new_scope) break; + } + result.status = remove_from_chain(node, key) ? ENV_OK : ENV_NOT_FOUND; } else { DIE("Unknown scope"); } diff --git a/tests/checks/set.fish b/tests/checks/set.fish index 2ebf91896..2d448519f 100644 --- a/tests/checks/set.fish +++ b/tests/checks/set.fish @@ -806,3 +806,17 @@ end test-function-scope echo $funcvar $funcvar2 # CHECK: + +function erase-funcvar + set -l banana 1 + begin + set -l banana 2 + set -ef banana + echo $banana + # CHECK: 2 + end + echo $banana + # CHECK: +end + +erase-funcvar