lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]

CHU Run-min wrote:
> I found it doesn't consider C func's frame size. In standard Lua
> implementation, the func's frame size is recorded in CallInfo' top
> field. But in LJ2, there is no space to record the frame size of C
> func.

Correct. But there is no need to record the size of a C function
frame anymore.

[BTW: Congratulations on your grasp of the internals of the code!]

> It seems harmful, isn't it? Or my misunderstanding. May Mike Pall
> reveal the mystery about this?

C functions can only use the lua_*() API functions to access the
stack. But LJ2 uses auto-sizing of the stack (see incr_top(L)) and
mostly ignores lua_checkstack(). As I explained in another thread
this is a) simpler, b) less error prone and c) has no negative
performance impact.

The peculiar marking problem with the re-appearing stack slots
can't happen for C function frames because they do not have a
fixed-size top. A return back to them always reduces top to the
last valid slot. Bulk-incrementing top with lua_settop() always
sets the new slots to nil.

BTW: that particular GC issue was the main reason why I switched
to auto-sizing of the stack for the Lua/C API.