以下是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类型值的类型信息

lua_touserdata函数源代码并解析一下里面的ttype函数

原文地址: http://www.cveoy.top/t/topic/hvMj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录