Lua 5.1.4: ltm.c
L0001
L0006
L0007
L0008 #include <string.h>
L0009
L0010 #define ltm_c
L0011 #define LUA_CORE
L0012
L0013 #include "lua.h"
L0014
L0015 #include "lobject.h"
L0016 #include "lstate.h"
L0017 #include "lstring.h"
L0018 #include "ltable.h"
L0019 #include "ltm.h"
L0020
L0021
L0022
L0023 const char *const luaT_typenames[] = {
L0024 "nil", "boolean", "userdata", "number",
L0025 "string", "table", "function", "userdata", "thread",
L0026 "proto", "upval"
L0027 };
L0028
L0029
L0030 void luaT_init (lua_State *L) {
L0031 static const char *const luaT_eventname[] = {
L0032 "__index", "__newindex",
L0033 "__gc", "__mode", "__eq",
L0034 "__add", "__sub", "__mul", "__div", "__mod",
L0035 "__pow", "__unm", "__len", "__lt", "__le",
L0036 "__concat", "__call"
L0037 };
L0038 int i;
L0039 for (i=0; i<TM_N; i++) {
L0040 G(L)->tmname[i] = luaS_new(L, luaT_eventname[i]);
L0041 luaS_fix(G(L)->tmname[i]);
L0042 }
L0043 }
L0044
L0045
L0046
L0050 const TValue *luaT_gettm (Table *events, TMS event, TString *ename) {
L0051 const TValue *tm = luaH_getstr(events, ename);
L0052 lua_assert(event <= TM_EQ);
L0053 if (ttisnil(tm)) {
L0054 events->flags |= cast_byte(1u<<event);
L0055 return NULL;
L0056 }
L0057 else return tm;
L0058 }
L0059
L0060
L0061 const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, TMS event) {
L0062 Table *mt;
L0063 switch (ttype(o)) {
L0064 case LUA_TTABLE:
L0065 mt = hvalue(o)->metatable;
L0066 break;
L0067 case LUA_TUSERDATA:
L0068 mt = uvalue(o)->metatable;
L0069 break;
L0070 default:
L0071 mt = G(L)->mt[ttype(o)];
L0072 }
L0073 return (mt ? luaH_getstr(mt, G(L)->tmname[event]) : luaO_nilobject);
L0074 }
L0075
Generated by pretty.lua