fork(2) download
  1. local script = [[
  2. print 'hello'
  3. print 'world'
  4. for i=0,3 do
  5. local answer = 42
  6. end
  7. ]]
  8.  
  9. local script_function = loadstring(script)
  10.  
  11. local function count_lines ()
  12. local count = 0
  13. for k,v in script:gmatch '\n' do count = count+1 end
  14. return count
  15. end
  16.  
  17. local function trace(total_lines)
  18. local max_last_line = 0
  19. return function(info,line_number)
  20. if line_number > max_last_line then
  21. print(tostring(line_number/total_lines*100)..'%')
  22. max_last_line = line_number
  23. end
  24. end
  25. end
  26.  
  27. local lines = count_lines()
  28.  
  29. local thread = coroutine.create( script_function )
  30.  
  31. debug.sethook(thread, trace(lines), "l")
  32. coroutine.resume(thread)
Success #stdin #stdout 0.02s 2540KB
stdin
Standard input is empty
stdout
20%
hello
40%
world
60%
80%
100%