[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Yielding to C (5.0w0)
- From: "Albert-Jan Brouwer" <acj.brouwer@...>
- Date: Mon, 12 Aug 2002 11:21:19 +0200
I am trying to use the coroutine functionality in Lua 5.0w0 to break
a script to the surrounding C code so that the C code in turn can
break out and allow stuff to happen and cooperative task switching
to take place in a surrounding non-C context in which the calling C
code is embedded.
After some experimentation, I found that something like the following
seems to mostly work:
lua_State *L = lua_open();
lua_baselibopen(L);
lua_register(L, "breakout", breakout);
lua_dobuffer(L, script, length, NULL);
lua_getglobal(L, "main");
lua_cobegin(L, 0);
while (0 == lua_resume(L, L)) {
/* Do something or other */
}
lua_close(L);
int breakout(lua_State *L) {
return lua_yield(L, 0);
}
Still, questions remain:
- Where is documentation of the coroutine C API?
- Is the above legal usage? In particular, is it allowable to pass the
same lua state into both parameters of lua_resume?
- Is it possible to achieve the same without a special function in
the lua script (main() in the above example), that is, break out and
resume the top level script instead of some function embedded in it?
- Is it possible to yield on a regular basis, e.g. every few opcodes,
without having to pepper the script with yields?
---
Albert-Jan