mirror of
https://github.com/neovim/neovim.git
synced 2025-09-29 06:28:35 +00:00
refactor(api): handle option dicts properly
Do not copy a lot of lua strings (dict keys) to just strequal() them Just compare them directly to a dedicated hash function. feat(generators): HASHY McHASHFACE
This commit is contained in:
@@ -1299,3 +1299,25 @@ void nlua_init_types(lua_State *const lstate)
|
||||
|
||||
lua_rawset(lstate, -3);
|
||||
}
|
||||
|
||||
|
||||
void nlua_pop_keydict(lua_State *L, void *retval, field_hash hashy, Error *err)
|
||||
{
|
||||
lua_pushnil(L); // [dict, nil]
|
||||
while (lua_next(L, -2)) {
|
||||
// [dict, key, value]
|
||||
size_t len;
|
||||
const char *s = lua_tolstring(L, -2, &len);
|
||||
Object *field = hashy(retval, s, len);
|
||||
if (!field) {
|
||||
api_set_error(err, kErrorTypeValidation, "invalid key: %.*s", (int)len, s);
|
||||
lua_pop(L, 3); // []
|
||||
return;
|
||||
}
|
||||
|
||||
*field = nlua_pop_Object(L, true, err);
|
||||
}
|
||||
// [dict]
|
||||
lua_pop(L, 1);
|
||||
// []
|
||||
}
|
||||
|
Reference in New Issue
Block a user