Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
executable file 169 lines (131 sloc) 2.63 KB
-- $Id$
require "pluto"
permtable = { 1234 }
perms = { [coroutine.yield] = 1, [permtable] = 2 }
twithmt = {}
setmetatable( twithmt, { __call = function() return 21 end } )
function testfenv()
return abc
end
setfenv(testfenv, { abc = 456 })
function fa(i)
local ia = i + 1
return fb(ia)
end
function fb(i)
local ib = i + 1
ib = ib + fc(ib)
return ib
end
function fc(i)
local ic = i + 1
coroutine.yield()
return ic*2
end
function func()
return 4
end
thr = coroutine.create(fa)
coroutine.resume(thr, 2)
testtbl = { a = 2, [2] = 4 }
function funcreturningclosure(n)
return function()
return n
end
end
function nestedfunc(n)
return (function(m) return m+2 end)(n+3)
end
testloopa = {}
testloopb = { testloopa = testloopa }
testloopa.testloopb = testloopb
sharedref = {}
refa = {sharedref = sharedref}
refb = {sharedref = sharedref}
sptable = { a = 3 }
setmetatable(sptable, {
__persist = function(tbl)
local a = tbl.a
return function()
return { a = a+3 }
end
end
})
literaludata = boxinteger(71)
function booleanpersist(udata)
local b = unboxboolean(udata)
return function()
return boxboolean(b)
end
end
function makecounter()
local a = 0
return {
inc = function() a = a + 1 end,
cur = function() return a end
}
end
function uvinthreadfunc()
local a = 1
local b = function()
a = a+1
coroutine.yield()
a = a+1
end
a = a+1
b()
a = a+1
return a
end
uvinthread = coroutine.create(uvinthreadfunc)
coroutine.resume(uvinthread)
niinmt = { a = 3 }
setmetatable(niinmt, {__newindex = function(key, val) end })
local function GenerateObjects()
local Table = {}
function Table:Func()
return { Table, self }
end
function uvcycle()
return Table:Func()
end
end
GenerateObjects()
function debuginfo(foo)
foo = foo + foo
return debug.getlocal(1,1)
end
rootobj = {
testfalse = false,
testtrue = true,
testseven = 7,
testfoobar = "foobar",
testfuncreturnsfour = func,
testnil = nil,
testthread = thr,
testperm = permtable,
testmt = twithmt,
testtbl = testtbl,
testfenv = testfenv,
testclosure = funcreturningclosure(11),
testnilclosure = funcreturningclosure(nil),
testnest = nestedfunc,
testludata = createludata(),
testlooptable = testloopa,
testsharedrefa = refa,
testsharedrefb = refb,
testsptable = sptable,
testliteraludata = literaludata,
testspudata1 = boxboolean(true),
testspudata2 = boxboolean(false),
testsharedupval = makecounter(),
testuvinthread = uvinthread,
testniinmt = niinmt,
testuvcycle = uvcycle,
testdebuginfo = debuginfo
}
buf = pluto.persist(perms, rootobj)
onerror()
outfile = io.open("test.plh", "wb")
outfile:write(buf)
outfile:close()