diff options
author | Philipp Janda <siffiejoe@gmx.net> | 2015-08-18 03:39:46 +0200 |
---|---|---|
committer | Philipp Janda <siffiejoe@gmx.net> | 2015-08-18 03:39:46 +0200 |
commit | b1d549ae3ffcd5352cc5e7c05f2b434b4739160e (patch) | |
tree | 6b08410e4f3ee1ab4874cfda439c491ced054326 | |
parent | db7cb39cdd973deca26ad96d5a478a4ba1d98f30 (diff) | |
download | lua-compat-5.3-b1d549ae3ffcd5352cc5e7c05f2b434b4739160e.tar.gz lua-compat-5.3-b1d549ae3ffcd5352cc5e7c05f2b434b4739160e.tar.bz2 lua-compat-5.3-b1d549ae3ffcd5352cc5e7c05f2b434b4739160e.zip |
Remove superfluous redefinitions.
By calling the `compat53.module` version of `coroutine.running` from the
`compat53` redefinition, the `main_coroutine` value can be reused and
the need for the `coroutine.status` and `coroutine.resume` redefinitions
vanishes.
Thanks @daurnimator!
-rw-r--r-- | compat53/init.lua | 28 |
1 files changed, 5 insertions, 23 deletions
diff --git a/compat53/init.lua b/compat53/init.lua index b952003..96b6c67 100644 --- a/compat53/init.lua +++ b/compat53/init.lua | |||
@@ -206,37 +206,19 @@ if lua_version == "5.1" then | |||
206 | end -- debug table available | 206 | end -- debug table available |
207 | 207 | ||
208 | 208 | ||
209 | local main_coroutine = coroutine_create(function() end) | ||
210 | |||
211 | if not is_luajit52 then | 209 | if not is_luajit52 then |
210 | local coroutine_running52 = M.coroutine.running | ||
212 | function M.coroutine.running() | 211 | function M.coroutine.running() |
213 | local co = coroutine_running() | 212 | local co, ismain = coroutine_running52() |
214 | if co then | 213 | if ismain then |
215 | return pcall_mainOf[co] or co, false | 214 | return co, true |
216 | else | 215 | else |
217 | return main_coroutine, true | 216 | return pcall_mainOf[co] or co, false |
218 | end | 217 | end |
219 | end | 218 | end |
220 | end | 219 | end |
221 | 220 | ||
222 | if not is_luajit then | 221 | if not is_luajit then |
223 | function M.coroutine.resume(co, ...) | ||
224 | if co == main_coroutine then | ||
225 | return false, "cannot resume non-suspended coroutine" | ||
226 | else | ||
227 | return coroutine_resume(co, ...) | ||
228 | end | ||
229 | end | ||
230 | |||
231 | function M.coroutine.status(co) | ||
232 | local notmain = coroutine_running() | ||
233 | if co == main_coroutine then | ||
234 | return notmain and "normal" or "running" | ||
235 | else | ||
236 | return coroutine_status(co) | ||
237 | end | ||
238 | end | ||
239 | |||
240 | local function pcall_results(current, call, success, ...) | 222 | local function pcall_results(current, call, success, ...) |
241 | if coroutine_status(call) == "suspended" then | 223 | if coroutine_status(call) == "suspended" then |
242 | return pcall_results(current, call, coroutine_resume(call, coroutine_yield(...))) | 224 | return pcall_results(current, call, coroutine_resume(call, coroutine_yield(...))) |