Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Roblox
GitHub Repository: Roblox/luau
Path: blob/master/VM/src/ltable.h
2725 views
1
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
2
// This code is based on Lua 5.x implementation licensed under MIT License; see lua_LICENSE.txt for details
3
#pragma once
4
5
#include "lobject.h"
6
7
#define gnode(t, i) (&(t)->node[i])
8
#define gkey(n) (&(n)->key)
9
#define gval(n) (&(n)->val)
10
#define gnext(n) ((n)->key.next)
11
12
#define gval2slot(t, v) int(cast_to(LuaNode*, static_cast<const TValue*>(v)) - t->node)
13
14
// reset cache of absent metamethods, cache is updated in luaT_gettm
15
#define invalidateTMcache(t) t->tmcache = 0
16
17
LUAI_FUNC const TValue* luaH_getnum(LuaTable* t, int key);
18
LUAI_FUNC TValue* luaH_setnum(lua_State* L, LuaTable* t, int key);
19
LUAI_FUNC const TValue* luaH_getstr(LuaTable* t, TString* key);
20
LUAI_FUNC TValue* luaH_setstr(lua_State* L, LuaTable* t, TString* key);
21
LUAI_FUNC const TValue* luaH_getp(LuaTable* t, void* key, int tag);
22
LUAI_FUNC TValue* luaH_setp(lua_State* L, LuaTable* t, void* key, int tag);
23
LUAI_FUNC const TValue* luaH_get(LuaTable* t, const TValue* key);
24
LUAI_FUNC TValue* luaH_set(lua_State* L, LuaTable* t, const TValue* key);
25
LUAI_FUNC TValue* luaH_newkey(lua_State* L, LuaTable* t, const TValue* key);
26
LUAI_FUNC LuaTable* luaH_new(lua_State* L, int narray, int lnhash);
27
LUAI_FUNC void luaH_resizearray(lua_State* L, LuaTable* t, int nasize);
28
LUAI_FUNC void luaH_resizehash(lua_State* L, LuaTable* t, int nhsize);
29
LUAI_FUNC void luaH_free(lua_State* L, LuaTable* t, struct lua_Page* page);
30
LUAI_FUNC int luaH_next(lua_State* L, LuaTable* t, StkId key);
31
LUAI_FUNC int luaH_getn(LuaTable* t);
32
LUAI_FUNC LuaTable* luaH_clone(lua_State* L, LuaTable* tt);
33
LUAI_FUNC void luaH_clear(LuaTable* tt);
34
35
#define luaH_setslot(L, t, slot, key) (invalidateTMcache(t), (slot == luaO_nilobject ? luaH_newkey(L, t, key) : cast_to(TValue*, slot)))
36
37
extern const LuaNode luaH_dummynode;
38
39