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

            Line data    Source code
       1              : /*
       2              : ** $Id: ltm.c,v 2.14.1.1 2013/04/12 18:48:47 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              : static const char udatatypename[] = "userdata";
      23              : 
      24              : LUAI_DDEF const char *const luaT_typenames_[LUA_TOTALTAGS] = {
      25              :   "no value",
      26              :   "nil", "boolean", udatatypename, "number",
      27              :   "string", "table", "function", udatatypename, "thread",
      28              :   "proto", "upval"  /* these last two cases are used for tests only */
      29              : };
      30              : 
      31              : 
      32          104 : void luaT_init (lua_State *L) {
      33              :   static const char *const luaT_eventname[] = {  /* ORDER TM */
      34              :     "__index", "__newindex",
      35              :     "__gc", "__mode", "__len", "__eq",
      36              :     "__add", "__sub", "__mul", "__div", "__mod",
      37              :     "__pow", "__unm", "__lt", "__le",
      38              :     "__concat", "__call"
      39              :   };
      40              :   int i;
      41         1872 :   for (i=0; i<TM_N; i++) {
      42         1768 :     G(L)->tmname[i] = luaS_new(L, luaT_eventname[i]);
      43         1768 :     luaS_fix(G(L)->tmname[i]);  /* never collect these names */
      44              :   }
      45          104 : }
      46              : 
      47              : 
      48              : /*
      49              : ** function to be used with macro "fasttm": optimized for absence of
      50              : ** tag methods
      51              : */
      52          717 : const TValue *luaT_gettm (Table *events, TMS event, TString *ename) {
      53          717 :   const TValue *tm = luaH_getstr(events, ename);
      54              :   lua_assert(event <= TM_EQ);
      55          717 :   if (ttisnil(tm)) {  /* no tag method? */
      56          192 :     events->flags |= cast_byte(1u<<event);  /* cache this fact */
      57          192 :     return NULL;
      58              :   }
      59          525 :   else return tm;
      60              : }
      61              : 
      62              : 
      63         8048 : const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, TMS event) {
      64              :   Table *mt;
      65         8048 :   switch (ttypenv(o)) {
      66          151 :     case LUA_TTABLE:
      67          151 :       mt = hvalue(o)->metatable;
      68          151 :       break;
      69          638 :     case LUA_TUSERDATA:
      70          638 :       mt = uvalue(o)->metatable;
      71          638 :       break;
      72         7259 :     default:
      73         7259 :       mt = G(L)->mt[ttypenv(o)];
      74              :   }
      75         8048 :   return (mt ? luaH_getstr(mt, G(L)->tmname[event]) : luaO_nilobject);
      76              : }
      77              : 
        

Generated by: LCOV version 2.0-1