LCOV - code coverage report
Current view: directory - src - ltm.c Found Hit Coverage
Test: Lua 5.1.4 Lines: 19 19 100.0 %
Date: 2009-09-13
Colors: not hit hit

       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                 : 
      23                 : const char *const luaT_typenames[] = {
      24                 :   "nil", "boolean", "userdata", "number",
      25                 :   "string", "table", "function", "userdata", "thread",
      26                 :   "proto", "upval"
      27                 : };
      28                 : 
      29                 : 
      30              35 : void 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             630 :   for (i=0; i<TM_N; i++) {
      40             595 :     G(L)->tmname[i] = luaS_new(L, luaT_eventname[i]);
      41             595 :     luaS_fix(G(L)->tmname[i]);  /* never collect these names */
      42                 :   }
      43              35 : }
      44                 : 
      45                 : 
      46                 : /*
      47                 : ** function to be used with macro "fasttm": optimized for absence of
      48                 : ** tag methods
      49                 : */
      50             547 : const TValue *luaT_gettm (Table *events, TMS event, TString *ename) {
      51             547 :   const TValue *tm = luaH_getstr(events, ename);
      52                 :   lua_assert(event <= TM_EQ);
      53             547 :   if (ttisnil(tm)) {  /* no tag method? */
      54              53 :     events->flags |= cast_byte(1u<<event);  /* cache this fact */
      55              53 :     return NULL;
      56                 :   }
      57             494 :   else return tm;
      58                 : }
      59                 : 
      60                 : 
      61            7340 : const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, TMS event) {
      62                 :   Table *mt;
      63            7340 :   switch (ttype(o)) {
      64                 :     case LUA_TTABLE:
      65              41 :       mt = hvalue(o)->metatable;
      66              41 :       break;
      67                 :     case LUA_TUSERDATA:
      68              84 :       mt = uvalue(o)->metatable;
      69              84 :       break;
      70                 :     default:
      71            7215 :       mt = G(L)->mt[ttype(o)];
      72                 :   }
      73            7340 :   return (mt ? luaH_getstr(mt, G(L)->tmname[event]) : luaO_nilobject);
      74                 : }
      75                 : 

Generated by: LCOV version 1.7