|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file:
-- http://anggtwu.net/LUA/WithFakePrint1.lua.html
-- http://anggtwu.net/LUA/WithFakePrint1.lua
-- (find-angg "LUA/WithFakePrint1.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- (defun e () (interactive) (find-angg "LUA/WithFakePrint1.lua"))
-- Supersedes:
-- (find-emlua "Repl1.lua" "WithFakePrint")
-- (find-angg "LUA/Repl1.lua" "WithFakePrint")
-- Used by (?):
-- (find-angg "LUA/Repl1.lua")
-- «.WithFakePrint» (to "WithFakePrint")
-- «.WithFakePrint-tests» (to "WithFakePrint-tests")
-- __ ___ _ _ _____ _ ____ _ _
-- \ \ / (_) |_| |__ | ___|_ _| | _____| _ \ _ __(_)_ __ | |_
-- \ \ /\ / /| | __| '_ \| |_ / _` | |/ / _ \ |_) | '__| | '_ \| __|
-- \ V V / | | |_| | | | _| (_| | < __/ __/| | | | | | | |_
-- \_/\_/ |_|\__|_| |_|_| \__,_|_|\_\___|_| |_| |_|_| |_|\__|
--
-- «WithFakePrint» (to ".WithFakePrint")
-- This class is not used by EdrxRepl, only by EdrxEmacsRepl.
--
-- WithFakePrint.run(f) runs f() with a fake print() function that
-- saves the results to the global variable withprint_. "f" must be a
-- function that does not yield errors; if it aborts the original
-- print will not be restored, and we're fscked.
--
-- WithFakePrint.run(f) also substitutes temporarily write() by a fake
-- write() function. I always use "write" instead of io.write" in my
-- code, so this trick works.
--
withprint_ = {}
WithFakePrint = Class {
type = "WithFakePrint",
fakeprint = function (...)
local A = pack(...)
local out = mapconcat(tostring, A, "\t", A.n).."\n"
table.insert(withprint_, out)
end,
fakewrite = function (str)
table.insert(withprint_, str)
end,
out = function () return table.concat(withprint_, "") end,
--
run1 = function (f)
local old_print = print
local old_write = write
print = WithFakePrint.fakeprint
write = WithFakePrint.fakewrite
local results = pack(f())
print = old_print
write = old_write
return myunpack(results)
end,
run = function (f)
withprint_ = {}
WithFakePrint.run1(f)
return WithFakePrint.out()
end,
xpcall = function (f, errhandler)
errhandler = errhandler or WithFakePrint.errhandler
return WithFakePrint.run(function () xpcall(f, errhandler) end)
end,
errhandler = function (err)
print(err)
print(debug.traceback())
end,
--
__index = {
},
}
-- «WithFakePrint-tests» (to ".WithFakePrint-tests")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "WithFakePrint1.lua"
ff = function ()
print(22, {}, nil)
PP(22, {}, nil)
return 33, 44
end
ff()
= ff()
= "<<" .. WithFakePrint.run( ff ) .. ">>"
= "<<" .. WithFakePrint.run(function () ff() end) .. ">>"
= "<<" .. WithFakePrint.run(function () PP("ret:", ff()) end) .. ">>"
= "<<" .. WithFakePrint.xpcall(function ()
PP("ret:", ff())
end) ..
">>"
= "<<" .. WithFakePrint.xpcall(function ()
PP("ret:", ff())
error("foo")
end) ..
">>"
--]]
-- Local Variables:
-- coding: utf-8-unix
-- End: