aboutsummaryrefslogtreecommitdiff
path: root/testes/goto.lua
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2018-10-29 14:26:48 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2018-10-29 14:26:48 -0300
commita006514ea138a29b6031058d9002b48a572b5dd6 (patch)
treeb289a8af0c0497f2555784a0cf666659ceab0236 /testes/goto.lua
parent6e9b719694bffb8de711f182d405ec37d32ae0b1 (diff)
downloadlua-a006514ea138a29b6031058d9002b48a572b5dd6.tar.gz
lua-a006514ea138a29b6031058d9002b48a572b5dd6.tar.bz2
lua-a006514ea138a29b6031058d9002b48a572b5dd6.zip
Big revamp in the implmentation of labels/gotos
Added restriction that, when a label is created, there cannot be another label with the same name visible. That allows backward goto's to be resolved when they are read. Backward goto's get a close if they jump out of the scope of some variable; labels get a close only if previous goto to it jumps out of the scope of some upvalue.
Diffstat (limited to 'testes/goto.lua')
-rw-r--r--testes/goto.lua3
1 files changed, 1 insertions, 2 deletions
diff --git a/testes/goto.lua b/testes/goto.lua
index 238bc04a..85038d02 100644
--- a/testes/goto.lua
+++ b/testes/goto.lua
@@ -14,6 +14,7 @@ errmsg([[ do ::l1:: end goto l1; ]], "label 'l1'")
14 14
15-- repeated label 15-- repeated label
16errmsg([[ ::l1:: ::l1:: ]], "label 'l1'") 16errmsg([[ ::l1:: ::l1:: ]], "label 'l1'")
17errmsg([[ ::l1:: do ::l1:: end]], "label 'l1'")
17 18
18 19
19-- undefined label 20-- undefined label
@@ -67,8 +68,6 @@ do
67 assert(assert(load(prog))() == 31) 68 assert(assert(load(prog))() == 31)
68end 69end
69 70
70-- goto to correct label when nested
71do goto l3; ::l3:: end -- does not loop jumping to previous label 'l3'
72 71
73-- ok to jump over local dec. to end of block 72-- ok to jump over local dec. to end of block
74do 73do