# RUN: %fish %s

# A for-loop-variable is a local variable in the enclosing scope.
set -g i global
# implicit set -l i $i
for i in local
end
set -ql i && echo $i
# CHECK: local

# The loop variable is initialized with any previous value.
set -g j global
for j in
end
set -ql j && echo $j
# CHECK: global

# Loop variables exist only locally in the enclosing local scope.
# They do not modify other local/global/universal variables.
set -g k global
begin
    for k in local1
        echo $k
        # CHECK: local1
        for k in local2
        end
        echo $k
        # CHECK: local2
    end
    echo $k
    # CHECK: local1
end
echo $k
# CHECK: global

function foo --on-variable foo
    echo foo set
end

for foo in 1 2 3
    true
end
# CHECK: foo set
# CHECK: foo set
# CHECK: foo set

for x in 1 2 3
    test $x -eq 2 && set -l foo bar
    echo foo value is $foo
end
# We keep the old value from outside the loop
# CHECK: foo value is 3
# CHECK: foo set
# CHECK: foo value is bar
# CHECK: foo value is 3