lua-users home
lua-l archive

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




On 2018-02-27 12:42 AM, albertmcchan wrote:
On Feb 26, 2018, at 10:01 PM, Dirk Laurie <dirk.laurie@gmail.com> wrote:

You changed the rules first by monkey-patching 'require'. Why should
the undocumented 'package.loading' be a holy cow if the
well-documented 'require' has already been slaughtered?
just to be clear, patching require is to fix a bug.

package.loading function does not need to touch any lua c code.
It is just as easy to test against the userdata sentinel.

if mod.lua return false, require "mod" will set package.loaded.mod to false.
--> require 'mod' can potientially load mod.lua multiple times.

I read the original Roberto package proposal dated 9/17/2004,
it will not allow false (or nil) into package.loaded cache table:

https://marc.info/?l=lua-l&m=113878469246850&w=2

for some reason, translated c implementation is slightly different.

Since I am fixing require, I just use false as the sentinel,
and code package.loading function in lua instead of c.



Here's an idea:

if debug.getinfo(2).func == require then
    -- required
elseif debug.getinfo(2).func == dofile then
    -- dofiled
else
    -- loadfiled, luaed, etc
end

(also try my lua script: debug.getinfo(2).func())

--
Disclaimer: these emails may be made public at any given time, with or without reason. If you don't agree with this, DO NOT REPLY.