diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2017-10-09 04:31:41 -0700 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2017-10-09 04:31:41 -0700 |
| commit | 9e1aaf2d5c43e5e3804ba9f6e3b29bf790cb75c8 (patch) | |
| tree | aa76826978444d227bc921da36609ff5e49aa307 /nomsu.moon | |
| parent | e737333d2708d40c1dd8366d4e65583fc796df2a (diff) | |
Moved timeout code into compiler and out of a lib.
Diffstat (limited to 'nomsu.moon')
| -rwxr-xr-x | nomsu.moon | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -274,7 +274,11 @@ class NomsuCompiler @print_tree tree, " " return tree - run: (src, filename)=> + run: (src, filename, max_operations=nil)=> + if max_operations + timeout = -> + @error "Execution quota exceeded. Your code took too long." + debug.sethook timeout, "", max_operations tree = @parse(src, filename) assert tree, "Tree failed to compile: #{src}" assert tree.type == "File", "Attempt to run non-file: #{tree.type}" @@ -321,6 +325,8 @@ class NomsuCompiler %s return ret; end);]])\format(concat(buffer, "\n")) + if max_operations + debug.sethook! return return_value, lua_code tree_to_value: (tree, vars)=> @@ -635,7 +641,7 @@ if arg if not args.input or args.flags["-i"] -- REPL - c\run('require "lib/core.nom"') + c\run('require "lib/core.nom"', "stdin") while true buff = "" while true @@ -646,7 +652,7 @@ if arg buff ..= line if #buff == 0 break - ok, ret = pcall(-> c\run(buff)) + ok, ret = pcall(-> c\run(buff, "stdin")) if ok and ret != nil print "= "..repr(ret) |
