[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Lua C API can't be used from other languages without C wrappers
- From: "Soni \"They/Them\" L." <fakedme@...>
- Date: Sun, 18 Feb 2018 14:41:15 -0300
On 2018-02-18 02:37 PM, albertmcchan wrote:
On Feb 18, 2018, at 11:54 AM, Dirk Laurie <email@example.com> wrote:
2018-02-18 18:37 GMT+02:00 Albert Chan <firstname.lastname@example.org>:
I have trouble using Lua C stack, even in C
Say, I have a c function A that uses lua stack, that call another c function B
that also uses c lua stack. however, B did a lua_settop of 1, then return 1.
Sine both c functions share the same stack, A loses everything except the result of B
They do not. Every call generates a new stack frame, and no function
can see further back than its own arguments, except those values that
have been exported into its closure as upvalues. What you describe
you are right, if the call is from lua calling c-function.
If c-function A (from inside A) call B, however, we are sharing the same stack.
--> B removed all arguments except its result, did a lua_settop(L,1); return 1.
--> all stack arguments in A is GONE (except, result from B)
there is a blog about this problem: https://julien.danjou.info/blog/2011/why-not-lua
And this actualy happens to me recently. I had to fix B to leave the stack alone.
My question is, what if B is off-limit, how can it restore the stack from A side ?
more specifically, how to push userdata back to the stack ?
Ah I miss Lua 5.1's lua_cpcall...
Disclaimer: these emails may be made public at any given time, with or without reason. If you don't agree with this, DO NOT REPLY.