|
6 | 6 | -- yielding inside the call to pcall or xpcall.
|
7 | 7 | --
|
8 | 8 | -- Authors: Roberto Ierusalimschy and Andre Carregal
|
9 |
| --- Contributors: Thomas Harning Jr., Ignacio Burgueño, Fábio Mascarenhas |
| 9 | +-- Contributors: Thomas Harning Jr., Ignacio Burgueño, Fabio Mascarenhas |
10 | 10 | --
|
11 | 11 | -- Copyright 2005 - Kepler Project (www.keplerproject.org)
|
12 | 12 | --
|
|
25 | 25 | -------------------------------------------------------------------------------
|
26 | 26 | local performResume, handleReturnValue
|
27 | 27 | local oldpcall, oldxpcall = pcall, xpcall
|
28 |
| - |
| 28 | +local pack = table.pack or function(...) return {n = select("#", ...), ...} end |
| 29 | +local unpack = table.unpack or unpack |
| 30 | + |
29 | 31 | function handleReturnValue(err, co, status, ...)
|
30 | 32 | if not status then
|
31 | 33 | return false, err(debug.traceback(co, (...)), ...)
|
|
44 | 46 | function coxpcall(f, err, ...)
|
45 | 47 | local res, co = oldpcall(coroutine.create, f)
|
46 | 48 | if not res then
|
47 |
| - local params = {...} |
48 |
| - local newf = function() return f(unpack(params)) end |
| 49 | + local params = pack(...) |
| 50 | + local newf = function() return f(unpack(params, 1, params.n)) end |
49 | 51 | co = coroutine.create(newf)
|
50 | 52 | end
|
51 | 53 | return performResume(err, co, ...)
|
|
0 commit comments