Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://anggtwu.net/LUA/Globals1.lua.html -- http://anggtwu.net/LUA/Globals1.lua -- (find-angg "LUA/Globals1.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- -- (defun g1 () (interactive) (find-angg "LUA/Globals1.lua")) -- -- «.Globals» (to "Globals") -- «.Globals-tests» (to "Globals-tests") require "PCall1" -- (find-angg "LUA/PCall1.lua") -- ____ _ _ _ -- / ___| | ___ | |__ __ _| |___ -- | | _| |/ _ \| '_ \ / _` | / __| -- | |_| | | (_) | |_) | (_| | \__ \ -- \____|_|\___/|_.__/ \__,_|_|___/ -- -- I wrote this class for ELpeg1.lua. In ELpeg1 the current grammar -- and the current way to convert an AST to text are stored in some -- global variables... (TODO: write more!) -- -- «Globals» (to ".Globals") Globals = Class { type = "Globals", save = function (names) return Globals({names = names}):save() end, __tostring = function (gl) return gl.names end, __index = { save = function (gl) gl._ = {} for _,name in ipairs(split(gl.names)) do gl._[name] = _G[name] end return gl end, restore = function (gl) for _,name in ipairs(split(gl.names)) do _G[name] = gl._[name] end return gl end, -- -- :run(f,...) uses this: (find-angg "LUA/PCall1.lua" "PCall") run = function (gla,f,...) local glb = Globals.save(gla.names) return PCall({ before = function () gla:restore() end, f = function (...) return f(...) end, after = function () glb:restore() end, }):run(...) end, fun = function (gla,f) return function (...) return gla:run(f, ...) end end, }, } -- «Globals-tests» (to ".Globals-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Globals1.lua" a,b = 1,2 gl = Globals.save "a b c" = gl a,b,c = 3,4,5 = a,b,c gl:restore() = a,b,c * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Globals1.lua" a,b = 1,2,nil f12_globals = Globals.save "a b c" a,b,c = 3,4,5 f12_globals:run(PP, 10, 20) = f12_globals:run(function (d,e,...) print(a,b,c,d,e,...) return d,e,d+e end, 20, 30) = f12_globals:fun(function (d,e,...) print(a,b,c,d,e,...) return d,e,d+e end)(20, 30) = a,b,c = f12_globals:run(function (d,e,...) print(a,b,c,d,e,...) return d,e,d+e end, 20, nil) -- err = a,b,c --]] -- Local Variables: -- coding: utf-8-unix -- End: