lua_upvalueindex
lua_State *co = lua_tothread(L, lua_upvalueindex(1));
const char *s = lua_tolstring(L, lua_upvalueindex(1), &ls);
const char *p = lua_tolstring(L, lua_upvalueindex(2), &lp);
for (src = s + (size_t)lua_tointeger(L, lua_upvalueindex(3));
lua_replace(L, lua_upvalueindex(3));
lua_replace(state, lua_upvalueindex(2));
uint64_t dsobj = lua_tonumber(state, lua_upvalueindex(1));
uint64_t cursor = lua_tonumber(state, lua_upvalueindex(2));
lua_replace(state, lua_upvalueindex(2));
uint64_t dsobj = lua_tonumber(state, lua_upvalueindex(1));
uint64_t cursor = lua_tonumber(state, lua_upvalueindex(2));
lua_replace(state, lua_upvalueindex(2));
nvlist_t **props = lua_touserdata(state, lua_upvalueindex(1));
nvpair_t *pair = lua_touserdata(state, lua_upvalueindex(2));
lua_replace(state, lua_upvalueindex(2));
zcp_list_info_t *info = lua_touserdata(state, lua_upvalueindex(1));
uint64_t dsobj = lua_tonumber(state, lua_upvalueindex(1));
uint64_t cursor = lua_tonumber(state, lua_upvalueindex(2));
zcp_synctask_info_t *info = lua_touserdata(state, lua_upvalueindex(1));
boolean_t sync = lua_toboolean(state, lua_upvalueindex(2));