LCOV - code coverage report
Current view: top level - src - ltm.c Coverage Total Hit
Test: Lua 5.1.5 Lines: 100.0 % 22 22
Test Date: 2024-04-28 10:23:09
Legend: Lines: hit not hit

            Line data    Source code
       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           95 : 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         1710 :   for (i=0; i<TM_N; i++) {
      40         1615 :     G(L)->tmname[i] = luaS_new(L, luaT_eventname[i]);
      41         1615 :     luaS_fix(G(L)->tmname[i]);  /* never collect these names */
      42              :   }
      43           95 : }
      44              : 
      45              : 
      46              : /*
      47              : ** function to be used with macro "fasttm": optimized for absence of
      48              : ** tag methods
      49              : */
      50         1072 : const TValue *luaT_gettm (Table *events, TMS event, TString *ename) {
      51         1072 :   const TValue *tm = luaH_getstr(events, ename);
      52              :   lua_assert(event <= TM_EQ);
      53         1072 :   if (ttisnil(tm)) {  /* no tag method? */
      54          104 :     events->flags |= cast_byte(1u<<event);  /* cache this fact */
      55          104 :     return NULL;
      56              :   }
      57          968 :   else return tm;
      58              : }
      59              : 
      60              : 
      61         7391 : const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, TMS event) {
      62              :   Table *mt;
      63         7391 :   switch (ttype(o)) {
      64           61 :     case LUA_TTABLE:
      65           61 :       mt = hvalue(o)->metatable;
      66           61 :       break;
      67          236 :     case LUA_TUSERDATA:
      68          236 :       mt = uvalue(o)->metatable;
      69          236 :       break;
      70         7094 :     default:
      71         7094 :       mt = G(L)->mt[ttype(o)];
      72              :   }
      73         7391 :   return (mt ? luaH_getstr(mt, G(L)->tmname[event]) : luaO_nilobject);
      74              : }
      75              : 
        

Generated by: LCOV version 2.0-1