lua-users home
lua-l archive

Re: Convenient undefined variable checking script

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


Den 2013年01月23日 13:45, skrev steve donovan:
[On Wed, Jan 23, 2013 at 12:56 PM, Luiz Henrique de Figueiredo <lhf@tecgraf.puc-rio.br> wrote:
Nice. See also http://lua-users.org/lists/lua-l/2012-12/msg00397.html
Well, it was not difficult to update the code to work with both 5.1
and 5.2, using the interestingly named GETTABUP instruction instead,
and allowing for a somewhat different instruction presentation.
One of the cool things about this script is that it can detect more
than plain undeclared access, but warn against potentially evil
things:
-- globs2.lua
next = 3
table.who = 1
function table.boo ()
 local k = 1
end
$ globals globs2.lua
globals: globs2.lua:2: redefining global next
globals: globs2.lua:4: redefining global table.who
globals: globs2.lua:6: redefining global table.boo
This required a further extension of David's trick for detecting field
access (by relaxing the requirement that the SETTABLE instruction had
to _immediately_ follow any global table access.)
Behaves almost identically for 5.1 or 5.2, but please change 'luac52'
to 'luac' (this was only way I could keep testing sane on my side)
BTW, I note that GETTABUP is not only used for _ENV? There are
definite limits on how far one can track variable usage, once
everything becomes locals, and I was wondering if we had extra
information that could be used.
steve d.
Also see https://github.com/hjelmeland/globals previously announced.

It does not follow require/loads, has no options. But it does allow passing a list of files as arguments , so you can do

 globals.lua /usr/local/share/lua/5.1/pl/*.lua

The name of luac can be overridden with environment variable LUAC. So to use luac52, from a usable shell do

LUAC=luac52 globals.lua /usr/local/share/lua/5.1/pl/*.lua


Egil.





AltStyle によって変換されたページ (->オリジナル) /