diff options
Diffstat (limited to 'extras/luacov/src/luacov.lua')
m--------- | extras/luacov | 0 | ||||
-rw-r--r-- | extras/luacov/src/luacov.lua | 95 |
2 files changed, 0 insertions, 95 deletions
diff --git a/extras/luacov b/extras/luacov new file mode 160000 +Subproject fe10d23a7c6eb6fbe37c3fba1afc10817629a60 diff --git a/extras/luacov/src/luacov.lua b/extras/luacov/src/luacov.lua deleted file mode 100644 index a44333a..0000000 --- a/extras/luacov/src/luacov.lua +++ /dev/null @@ -1,95 +0,0 @@ - -local M = {} - -local stats = require("luacov.stats") -local data = stats.load() -local statsfile = stats.start() -M.statsfile = statsfile - -local tick = package.loaded["luacov.tick"] -local ctr = 0 -local luacovlock = os.tmpname() - -local booting = true -local skip = {} -M.skip = skip - -local function on_line(_, line_nr) - if tick then - ctr = ctr + 1 - if ctr == 100 then - ctr = 0 - stats.save(data, statsfile) - end - end - - -- get name of processed file; ignore Lua code loaded from raw strings - local name = debug.getinfo(2, "S").source - if not name:match("^@") then - return - end - name = name:sub(2) - - -- skip 'luacov.lua' in coverage report - if booting then - skip[name] = true - booting = false - end - - if skip[name] then - return - end - - local file = data[name] - if not file then - file = {max=0} - data[name] = file - end - if line_nr > file.max then - file.max = line_nr - end - file[line_nr] = (file[line_nr] or 0) + 1 -end - -local function on_exit() - os.remove(luacovlock) - stats.save(data, statsfile) - stats.stop(statsfile) -end - -local function init() - if not tick then - M.on_exit_trick = io.open(luacovlock, "w") - debug.setmetatable(M.on_exit_trick, { __gc = on_exit } ) - end - - debug.sethook(on_line, "l") - - local rawcoroutinecreate = coroutine.create - coroutine.create = function(...) - local co = rawcoroutinecreate(...) - debug.sethook(co, on_line, "l") - return co - end - coroutine.wrap = function(...) - local co = rawcoroutinecreate(...) - debug.sethook(co, on_line, "l") - return function() - local r = { coroutine.resume(co) } - if not r[1] then - error(r[2]) - end - return unpack(r, 2) - end - end - - local rawexit = os.exit - os.exit = function(...) - on_exit() - rawexit(...) - end -end - -init() - -return M
|