lapi.c和lauxlib.c里包含了大部分的lua的capi。所谓capi是指在c形式的api接口,可以在c/c++/c#/…中可以调用到的api,但是lua中并不一定有对应的方法。ldebug.c里有一些调试用的capi(后续文章会介绍)。另外一些capi,便是打开lua库函数的capi,在lualib.h里集中声明。
lapi.c
基础的capi。
state相关
lua_checkstatck
检查栈的深度,如果没有超过最大深度便会扩充栈,否则返回0(交给上层处理)。
lua_xmove
将n个对象从一个状态(协程)移动到另一个状态(协程)上。
lua_setlevel
设置状态(协程)的调用层次,用于resume。
lua_atpanic
设置状态(协程)的内部错误处理方法。
lua_newthread
新建一个状态(协程)。
stack相关
lua_gettop
获取栈顶,一般用于检查参数个数。
lua_settop
设置栈顶,一般用于设置返回值个数。之前的文章在编写库函数的时候,会返回一个返回值数量,这个数量要与当前函数栈的深度一致,否则会出问题。
lua_remove
在函数栈的某个位置上移除对象。
lua_insert
在函数栈的某个位置上插入对象。
lua_replace
在函数栈的某个位置上替换成当前栈顶的对象。
lua_pushvalue
最常用的,在栈顶上压入对象,与之对应的是lua_pop,实际上就是lua_settop(宏定义)。
type相关
lua_type
类型:0-nil,1-bool,2-lightuserdata,3-number,4-string,5-table,6-function,7-userdata,8-thread。-1代表啥也没有(不是nil)。
lua_typename
类型名,lua里的type方法实际上调用了上面二者。
lua_iscfunction
是否是c方法。