Software /
code /
prosody
Diff
prosody @ 2039:545c0d6b6bb3
prosody, util.require: Remove util.require, the shortest-lived module so far. Woke up this morning with a much simpler idea, which is also effective against C modules (I believe). Yay for metatables :)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 21 Oct 2009 16:25:49 +0100 |
parent | 2023:a3bf6cb12752 |
child | 2055:ed3910860d11 |
line wrap: on
line diff
--- a/prosody Wed Oct 21 19:01:02 2009 +0500 +++ b/prosody Wed Oct 21 16:25:49 2009 +0100 @@ -32,7 +32,26 @@ -- Required to be able to find packages installed with luarocks pcall(require, "luarocks.require") -require "util.require"; + +-- Replace require with one that doesn't pollute _G +do + local _realG = _G; + local _real_require = require; + function require(...) + local curr_env = getfenv(2); + local curr_env_mt = getmetatable(getfenv(2)); + local _realG_mt = getmetatable(_realG); + if curr_env_mt and curr_env_mt.__index and not curr_env_mt.__newindex and _realG_mt then + local old_newindex + old_newindex, _realG_mt.__newindex = _realG_mt.__newindex, curr_env; + local ret = _real_require(...); + _realG_mt.__newindex = old_newindex; + return ret; + end + return _real_require(...); + end +end + config = require "core.configmanager"