summaryrefslogtreecommitdiffstats
path: root/lib/lua/src/ltm.c
diff options
context:
space:
mode:
authorAlexander Harkness <bearbin@gmail.com>2013-11-24 15:27:32 +0100
committerAlexander Harkness <bearbin@gmail.com>2013-11-24 15:27:32 +0100
commitd7ca8ea57b3a189fae5d7f69693ca656e6deedae (patch)
tree71ddd44bf8f4e5297ad1c582de2a49afaabd7035 /lib/lua/src/ltm.c
parentMoved JSONCPP (diff)
downloadcuberite-d7ca8ea57b3a189fae5d7f69693ca656e6deedae.tar
cuberite-d7ca8ea57b3a189fae5d7f69693ca656e6deedae.tar.gz
cuberite-d7ca8ea57b3a189fae5d7f69693ca656e6deedae.tar.bz2
cuberite-d7ca8ea57b3a189fae5d7f69693ca656e6deedae.tar.lz
cuberite-d7ca8ea57b3a189fae5d7f69693ca656e6deedae.tar.xz
cuberite-d7ca8ea57b3a189fae5d7f69693ca656e6deedae.tar.zst
cuberite-d7ca8ea57b3a189fae5d7f69693ca656e6deedae.zip
Diffstat (limited to 'lib/lua/src/ltm.c')
-rw-r--r--lib/lua/src/ltm.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/lib/lua/src/ltm.c b/lib/lua/src/ltm.c
new file mode 100644
index 000000000..c27f0f6fa
--- /dev/null
+++ b/lib/lua/src/ltm.c
@@ -0,0 +1,75 @@
+/*
+** $Id: ltm.c,v 2.8.1.1 2007/12/27 13:02:25 roberto Exp $
+** Tag methods
+** See Copyright Notice in lua.h
+*/
+
+
+#include <string.h>
+
+#define ltm_c
+#define LUA_CORE
+
+#include "lua.h"
+
+#include "lobject.h"
+#include "lstate.h"
+#include "lstring.h"
+#include "ltable.h"
+#include "ltm.h"
+
+
+
+const char *const luaT_typenames[] = {
+ "nil", "boolean", "userdata", "number",
+ "string", "table", "function", "userdata", "thread",
+ "proto", "upval"
+};
+
+
+void luaT_init (lua_State *L) {
+ static const char *const luaT_eventname[] = { /* ORDER TM */
+ "__index", "__newindex",
+ "__gc", "__mode", "__eq",
+ "__add", "__sub", "__mul", "__div", "__mod",
+ "__pow", "__unm", "__len", "__lt", "__le",
+ "__concat", "__call"
+ };
+ int i;
+ for (i=0; i<TM_N; i++) {
+ G(L)->tmname[i] = luaS_new(L, luaT_eventname[i]);
+ luaS_fix(G(L)->tmname[i]); /* never collect these names */
+ }
+}
+
+
+/*
+** function to be used with macro "fasttm": optimized for absence of
+** tag methods
+*/
+const TValue *luaT_gettm (Table *events, TMS event, TString *ename) {
+ const TValue *tm = luaH_getstr(events, ename);
+ lua_assert(event <= TM_EQ);
+ if (ttisnil(tm)) { /* no tag method? */
+ events->flags |= cast_byte(1u<<event); /* cache this fact */
+ return NULL;
+ }
+ else return tm;
+}
+
+
+const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, TMS event) {
+ Table *mt;
+ switch (ttype(o)) {
+ case LUA_TTABLE:
+ mt = hvalue(o)->metatable;
+ break;
+ case LUA_TUSERDATA:
+ mt = uvalue(o)->metatable;
+ break;
+ default:
+ mt = G(L)->mt[ttype(o)];
+ }
+ return (mt ? luaH_getstr(mt, G(L)->tmname[event]) : luaO_nilobject);
+}
+