Add equality for Lua types
This commit is contained in:
parent
838aaf2daf
commit
5dc2c62d89
8 changed files with 33 additions and 0 deletions
|
@ -21,6 +21,7 @@ struct kiwmi_lua {
|
||||||
};
|
};
|
||||||
|
|
||||||
int luaK_callback_register_dispatch(lua_State *L);
|
int luaK_callback_register_dispatch(lua_State *L);
|
||||||
|
int luaK_usertype_ref_equal(lua_State *L);
|
||||||
struct kiwmi_lua *luaK_create(struct kiwmi_server *server);
|
struct kiwmi_lua *luaK_create(struct kiwmi_server *server);
|
||||||
bool luaK_dofile(struct kiwmi_lua *lua, const char *config_path);
|
bool luaK_dofile(struct kiwmi_lua *lua, const char *config_path);
|
||||||
void luaK_destroy(struct kiwmi_lua *lua);
|
void luaK_destroy(struct kiwmi_lua *lua);
|
||||||
|
|
|
@ -231,5 +231,8 @@ luaK_kiwmi_cursor_register(lua_State *L)
|
||||||
luaL_newlib(L, kiwmi_cursor_events);
|
luaL_newlib(L, kiwmi_cursor_events);
|
||||||
lua_setfield(L, -2, "__events");
|
lua_setfield(L, -2, "__events");
|
||||||
|
|
||||||
|
lua_pushcfunction(L, luaK_usertype_ref_equal);
|
||||||
|
lua_setfield(L, -2, "__eq");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -191,5 +191,8 @@ luaK_kiwmi_keyboard_register(lua_State *L)
|
||||||
luaL_newlib(L, kiwmi_keyboard_events);
|
luaL_newlib(L, kiwmi_keyboard_events);
|
||||||
lua_setfield(L, -2, "__events");
|
lua_setfield(L, -2, "__events");
|
||||||
|
|
||||||
|
lua_pushcfunction(L, luaK_usertype_ref_equal);
|
||||||
|
lua_setfield(L, -2, "__eq");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,6 +76,9 @@ luaK_kiwmi_lua_callback_register(lua_State *L)
|
||||||
lua_setfield(L, -2, "__index");
|
lua_setfield(L, -2, "__index");
|
||||||
luaL_setfuncs(L, kiwmi_lua_callback_methods, 0);
|
luaL_setfuncs(L, kiwmi_lua_callback_methods, 0);
|
||||||
|
|
||||||
|
lua_pushcfunction(L, luaK_usertype_ref_equal);
|
||||||
|
lua_setfield(L, -2, "__eq");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -179,5 +179,8 @@ luaK_kiwmi_output_register(lua_State *L)
|
||||||
luaL_newlib(L, kiwmi_output_events);
|
luaL_newlib(L, kiwmi_output_events);
|
||||||
lua_setfield(L, -2, "__events");
|
lua_setfield(L, -2, "__events");
|
||||||
|
|
||||||
|
lua_pushcfunction(L, luaK_usertype_ref_equal);
|
||||||
|
lua_setfield(L, -2, "__eq");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -273,5 +273,8 @@ luaK_kiwmi_server_register(lua_State *L)
|
||||||
luaL_newlib(L, kiwmi_server_events);
|
luaL_newlib(L, kiwmi_server_events);
|
||||||
lua_setfield(L, -2, "__events");
|
lua_setfield(L, -2, "__events");
|
||||||
|
|
||||||
|
lua_pushcfunction(L, luaK_usertype_ref_equal);
|
||||||
|
lua_setfield(L, -2, "__eq");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -267,5 +267,8 @@ luaK_kiwmi_view_register(lua_State *L)
|
||||||
luaL_newlib(L, kiwmi_view_events);
|
luaL_newlib(L, kiwmi_view_events);
|
||||||
lua_setfield(L, -2, "__events");
|
lua_setfield(L, -2, "__events");
|
||||||
|
|
||||||
|
lua_pushcfunction(L, luaK_usertype_ref_equal);
|
||||||
|
lua_setfield(L, -2, "__eq");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,20 @@ luaK_callback_register_dispatch(lua_State *L)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
luaK_usertype_ref_equal(lua_State *L)
|
||||||
|
{
|
||||||
|
luaL_checktype(L, 1, LUA_TUSERDATA);
|
||||||
|
luaL_checktype(L, 2, LUA_TUSERDATA);
|
||||||
|
|
||||||
|
void *a = *(void **)lua_touserdata(L, 1);
|
||||||
|
void *b = *(void **)lua_touserdata(L, 2);
|
||||||
|
|
||||||
|
lua_pushboolean(L, a == b);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
struct kiwmi_lua *
|
struct kiwmi_lua *
|
||||||
luaK_create(struct kiwmi_server *server)
|
luaK_create(struct kiwmi_server *server)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue