/* ** Integer division; return 'm // n', that is, floor(m/n). ** C division truncates its result (rounds towards zero). ** 'floor(q) == trunc(q)' when 'q >= 0' or when 'q' is integer, ** otherwise 'floor(q) == trunc(q) - 1'. */ lua_Integer luaV_div (lua_State *L, lua_Integer m, lua_Integer n) { if (l_castS2U(n) + 1u <= 1u) { /* special cases: -1 or 0 */ if (n == 0) luaG_runerror(L, "attempt to divide by zero"); return intop(-, 0, m); /* n==-1; avoid overflow with 0x80000...//-1 */ } else {
/* ** returns the index for 'k' if 'k' is an appropriate key to live in ** the array part of a table, 0 otherwise. */ static unsigned int arrayindex (lua_Integer k) { if (0 < k && l_castS2U(k) <= MAXASIZE) return cast_uint(k); /* 'key' is an appropriate array index */ else return 0; }