local function f() return getfenv and getfenv(1) or _G end print("sameenv", f() == getfenv(1), type(f())) local function src(fn) if not (debug and debug.info) then return "nodbg" end local ok, a, b = pcall(debug.info, fn, "s") return tostring(ok) .. " " .. tostring(a) .. " " .. tostring(b) end print("pcall", src(pcall)) print("error", src(error)) print("type", src(type)) print("tostring", src(tostring)) print("setmetatable", src(setmetatable)) print("loadstring", src(loadstring)) print("string.byte", src(string.byte)) print("debug.info", src(debug.info)) local function probe() return 1 end print("probe", src(probe)) local chunk = [==[ local E = getfenv(1) print("chunk env marker", E.busted) return 42 ]==] local fn = loadstring(chunk, "=probe") local env = setmetatable({busted={}}, {__index=_G}) setfenv(fn, env) print("res", fn())