mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-08 07:34:07 +00:00
Correctly report out-of-scope gotos
Bug was in `fscope_exit`: if a loop contains a break `gola_fixup` will not be called leaving unresolved labels undetected. This cannot cause problems for valid code because `parse_label` calls `gola_resolve` on each newly parsed label. Fixes #228.
This commit is contained in:
parent
a25c0b99b8
commit
596439f6e8
@ -1282,12 +1282,15 @@ static void fscope_end(FuncState *fs)
|
||||
MSize idx = gola_new(ls, NAME_BREAK, VSTACK_LABEL, fs->pc);
|
||||
ls->vtop = idx; /* Drop break label immediately. */
|
||||
gola_resolve(ls, bl, idx);
|
||||
} else {
|
||||
/* need the fixup step to propagate the breaks. */
|
||||
gola_fixup(ls, bl);
|
||||
return;
|
||||
} /* else: need the fixup step to propagate the breaks. */
|
||||
} else if (!(bl->flags & FSCOPE_GOLA)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if ((bl->flags & FSCOPE_GOLA)) {
|
||||
gola_fixup(ls, bl);
|
||||
}
|
||||
gola_fixup(ls, bl);
|
||||
}
|
||||
|
||||
/* Mark scope as having an upvalue. */
|
||||
|
Loading…
Reference in New Issue
Block a user