128 lines
2.0 KiB
Julia
128 lines
2.0 KiB
Julia
# This file is a part of Julia. License is MIT: https://julialang.org/license
|
|
|
|
# Basic goto tests
|
|
|
|
function goto_test1()
|
|
@goto a
|
|
return false
|
|
@label a
|
|
return true
|
|
end
|
|
@test goto_test1()
|
|
|
|
|
|
@test_throws ErrorException eval(
|
|
quote
|
|
function goto_test2()
|
|
@goto a
|
|
@label a
|
|
@label a
|
|
return
|
|
end
|
|
end)
|
|
|
|
|
|
@test_throws ErrorException eval(
|
|
quote
|
|
function goto_test3()
|
|
@goto a
|
|
return
|
|
end
|
|
end)
|
|
|
|
|
|
@test_throws ErrorException eval(
|
|
quote
|
|
function goto_test4()
|
|
@goto a
|
|
try
|
|
@label a
|
|
catch
|
|
end
|
|
end
|
|
end)
|
|
|
|
|
|
# test that labels in macros are reassigned
|
|
macro goto_test5_macro()
|
|
@label a
|
|
end
|
|
|
|
@test_throws ErrorException eval(
|
|
quote
|
|
function goto_test5()
|
|
@goto a
|
|
@goto_test5_macro
|
|
return
|
|
end
|
|
end)
|
|
|
|
|
|
@test_throws ErrorException eval(
|
|
quote
|
|
function goto_test6()
|
|
try
|
|
@goto a
|
|
finally
|
|
end
|
|
@label a
|
|
return
|
|
end
|
|
end)
|
|
|
|
|
|
function goto_test6()
|
|
@goto a
|
|
@label a
|
|
end
|
|
|
|
@test goto_test6() === nothing
|
|
|
|
|
|
function goto_test7(x)
|
|
@label a
|
|
if x
|
|
@goto a
|
|
end
|
|
end
|
|
|
|
@test goto_test7(false) === nothing
|
|
|
|
module GotoMacroTest
|
|
macro goto_test8_macro()
|
|
quote
|
|
function $(esc(:goto_test8))()
|
|
@label a
|
|
@goto a
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
GotoMacroTest.@goto_test8_macro
|
|
|
|
# issue #15600
|
|
function t0_15600(flag)
|
|
flag && @goto return2
|
|
return 1
|
|
@label return2
|
|
return 2
|
|
end
|
|
@test t0_15600(true) == 2
|
|
@test t0_15600(false) == 1
|
|
function t1_15600(flag)
|
|
flag || @goto return2
|
|
return 1
|
|
@label return2
|
|
return 2
|
|
end
|
|
@test t1_15600(true) == 1
|
|
@test t1_15600(false) == 2
|
|
|
|
# issue #15561
|
|
function f15561()
|
|
a = @goto crater
|
|
@label crater
|
|
end
|
|
@test f15561() === nothing
|