diff --git a/data/core/common.lua b/data/core/common.lua index a4ea01f5..b6c9db67 100644 --- a/data/core/common.lua +++ b/data/core/common.lua @@ -82,25 +82,14 @@ end function common.splice(t, at, remove, insert) + assert(remove >= 0, "bad argument #3 to 'splice' (non-negative value expected)") insert = insert or {} - local offset = #insert - remove - local old_len = #t - if offset < 0 then - for i = at - offset, old_len - offset do - t[i + offset] = t[i] - end - elseif offset > 0 then - for i = old_len, at, -1 do - t[i + offset] = t[i] - end - end - for i, item in ipairs(insert) do - t[at + i - 1] = item - end + local len = #insert + if remove ~= len then table.move(t, at + remove, #t + remove, at + len) end + table.move(insert, 1, len, at, t) end - local function compare_score(a, b) return a.score > b.score end