lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On Wed, Jun 22, 2011 at 9:46 AM, Gé Weijers <ge@weijers.org> wrote:
> - disallow a definition of a label if that label is already visible in the scope.

When might we ever want to allow two labels of the same name to be
visible from a goto?  I don't see a good use case.  Here's one
possible case I came up with:

  for _,tt in ipairs(t) do
    if f(tt) then goto continue end
    for _,v in ipairs(tt) do
      if g(v) then goto continue end
      gg()
      ::continue::
    end
    ff()
    ::continue::
  end

Personally, I would prefer to differentiate the outer label (e.g.
`::continue2::`) for clarity, and I may need to do that anyway if the
inner loop had to continue the outer loop.  (Note: I also
differentiate locals t and tt for similar reasons, but I don't do so
for `_` since I don't care about `_`.)

On the other hand, from the perspective of code generators, if a macro
expands to that inner loop, the macro doesn't need to worry about name
conflicts with surrounding labels (see
<http://en.wikipedia.org/wiki/Hygienic_macro>).  However, code
generators can handle that without too much trouble and may need to do
that type of thing anyway for local variables.