lua_touserdata函数源代码并解析一下里面的ttype函数
以下是lua_touserdata函数的源代码:
void *lua_touserdata (lua_State *L, int idx) {
TValue *o = index2addr(L, idx);
if (ttislightuserdata(o) || ttisfulluserdata(o))
return getudatamem(o);
else
return NULL;
}
这个函数用于获取Lua栈上指定位置的值,如果该值是一个userdata类型的值,则将其转换为一个void*指针返回。如果该值不是一个userdata类型的值,则返回NULL。
下面是ttype()函数的解析:
ttype()函数是一个宏定义,定义如下:
#define ttype(o) (ttnov(o) & 0x3F)
该宏实际上是对TValue类型值的类型信息的获取。在Lua中,TValue类型值的类型信息保存在其tt字段中。tt字段是一个8位的无符号整数,其中高2位用于表示值的颜色(白色、灰色或黑色),低6位用于表示值的类型信息。在ttype()函数中,通过将TValue类型值的tt字段与0x3F按位与操作,获取该值的类型信息。0x3F的二进制表示是00111111,按位与操作可以将TValue类型值的tt字段的高2位清零,只保留低6位的类型信息。最终,ttype()函数返回的值是一个整数,表示TValue类型值的类型信息
原文地址: http://www.cveoy.top/t/topic/hvMj 著作权归作者所有。请勿转载和采集!