summaryrefslogtreecommitdiff
path: root/lib/supple/sandbox.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lib/supple/sandbox.lua')
-rw-r--r--lib/supple/sandbox.lua14
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/supple/sandbox.lua b/lib/supple/sandbox.lua
index cc1bc6c..f4025bc 100644
--- a/lib/supple/sandbox.lua
+++ b/lib/supple/sandbox.lua
@@ -24,12 +24,15 @@ local objects = require 'supple.objects'
local comms = require 'supple.comms'
local luxio = require 'luxio'
local sio = require 'luxio.simple'
+local track = require 'supple.track'
local loadstring = loadstring
local load = load
local setfenv = setfenv
local gc = collectgarbage
local unpack = unpack
+local xpcall = xpcall
+local traceback = debug.traceback
local function set_limits(ltab)
local count = ltab.count
@@ -152,6 +155,7 @@ local function run()
-- Pretend we've "given" the host an object called 'supple:loadstring'
-- which is the loadstring/load function
+ track.start()
objects.give(set_limits, "supple:set_limits")
objects.give(wrappered_load, "supple:loadstring")
objects.give(objects.clean_down, "supple:clean_down")
@@ -160,6 +164,14 @@ local function run()
return fn(comms._wait)
end
+local function wrapper_run()
+ local ok, retcode = xpcall(run, traceback)
+ if not ok then
+ error(retcode)
+ end
+ return retcode
+end
+
return {
- run = run,
+ run = wrapper_run,
}