Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ceguilua/src/lua/ltm.c @ 1806

Last change on this file since 1806 was 1806, checked in by rgrieder, 16 years ago

added single 5.1.3 directory for lua since CEGUILua 0.5 can also build against lua 5.1

  • Property svn:eol-style set to native
File size: 1.6 KB
Line 
1/*
2** $Id: ltm.c,v 2.8.1.1 2007/12/27 13:02:25 roberto Exp $
3** Tag methods
4** See Copyright Notice in lua.h
5*/
6
7
8#include <string.h>
9
10#define ltm_c
11#define LUA_CORE
12
13#include "lua.h"
14
15#include "lobject.h"
16#include "lstate.h"
17#include "lstring.h"
18#include "ltable.h"
19#include "ltm.h"
20
21
22
23const char *const luaT_typenames[] = {
24  "nil", "boolean", "userdata", "number",
25  "string", "table", "function", "userdata", "thread",
26  "proto", "upval"
27};
28
29
30void luaT_init (lua_State *L) {
31  static const char *const luaT_eventname[] = {  /* ORDER TM */
32    "__index", "__newindex",
33    "__gc", "__mode", "__eq",
34    "__add", "__sub", "__mul", "__div", "__mod",
35    "__pow", "__unm", "__len", "__lt", "__le",
36    "__concat", "__call"
37  };
38  int i;
39  for (i=0; i<TM_N; i++) {
40    G(L)->tmname[i] = luaS_new(L, luaT_eventname[i]);
41    luaS_fix(G(L)->tmname[i]);  /* never collect these names */
42  }
43}
44
45
46/*
47** function to be used with macro "fasttm": optimized for absence of
48** tag methods
49*/
50const TValue *luaT_gettm (Table *events, TMS event, TString *ename) {
51  const TValue *tm = luaH_getstr(events, ename);
52  lua_assert(event <= TM_EQ);
53  if (ttisnil(tm)) {  /* no tag method? */
54    events->flags |= cast_byte(1u<<event);  /* cache this fact */
55    return NULL;
56  }
57  else return tm;
58}
59
60
61const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, TMS event) {
62  Table *mt;
63  switch (ttype(o)) {
64    case LUA_TTABLE:
65      mt = hvalue(o)->metatable;
66      break;
67    case LUA_TUSERDATA:
68      mt = uvalue(o)->metatable;
69      break;
70    default:
71      mt = G(L)->mt[ttype(o)];
72  }
73  return (mt ? luaH_getstr(mt, G(L)->tmname[event]) : luaO_nilobject);
74}
75
Note: See TracBrowser for help on using the repository browser.