| 15082 | |
| 15083 | |
| 15084 | int luaV_equalval (lua_State *L, const TValue *t1, const TValue *t2) { |
| 15085 | const TValue *tm; |
| 15086 | lua_assert(ttype(t1) == ttype(t2)); |
| 15087 | switch (ttype(t1)) { |
| 15088 | case LUA_TNIL: return 1; |
| 15089 | case LUA_TNUMBER: return luai_numeq(nvalue(t1), nvalue(t2)); |
| 15090 | case LUA_TBOOLEAN: return bvalue(t1) == bvalue(t2); /* true must be 1 !! */ |
| 15091 | case LUA_TLIGHTUSERDATA: return pvalue(t1) == pvalue(t2); |
| 15092 | case LUA_TUSERDATA: { |
| 15093 | if (uvalue(t1) == uvalue(t2)) return 1; |
| 15094 | tm = get_compTM(L, uvalue(t1)->metatable, uvalue(t2)->metatable, |
| 15095 | TM_EQ); |
| 15096 | break; /* will try TM */ |
| 15097 | } |
| 15098 | case LUA_TTABLE: { |
| 15099 | if (hvalue(t1) == hvalue(t2)) return 1; |
| 15100 | tm = get_compTM(L, hvalue(t1)->metatable, hvalue(t2)->metatable, TM_EQ); |
| 15101 | break; /* will try TM */ |
| 15102 | } |
| 15103 | default: return gcvalue(t1) == gcvalue(t2); |
| 15104 | } |
| 15105 | if (tm == NULL) return 0; /* no TM? */ |
| 15106 | callTMres(L, L->top, tm, t1, t2); /* call TM */ |
| 15107 | return !l_isfalse(L->top); |
| 15108 | } |
| 15109 | |
| 15110 | |
| 15111 | void luaV_concat (lua_State *L, int total, int last) { |
nothing calls this directly
no test coverage detected