summaryrefslogtreecommitdiff
path: root/scripts/context/lua/mtxrun.lua
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/context/lua/mtxrun.lua')
-rw-r--r--scripts/context/lua/mtxrun.lua53
1 files changed, 39 insertions, 14 deletions
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index 3045b6866..f65c8c0ac 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -2962,6 +2962,11 @@ end
file.isreadable = file.is_readable -- depricated
file.iswritable = file.is_writable -- depricated
+function file.size(name)
+ local a = attributes(name)
+ return a and a.size or 0
+end
+
-- todo: lpeg \\ / .. does not save much
local checkedsplit = string.checkedsplit
@@ -4877,6 +4882,7 @@ utilities.report = logs and logs.reporter("system") or print
local tracestripping = false
local forcestupidcompile = true
luautilities.stripcode = true
+luautilities.alwaysstripcode = false -- saves 1 meg on 7 meg compressed format file (2012.08.12)
luautilities.nofstrippedchunks = 0
luautilities.nofstrippedbytes = 0
@@ -4962,7 +4968,7 @@ end
-- ... end of borrowed code.
local function strippedbytecode(code,forcestrip,name)
- if forcestrip and luautilities.stripcode then
+ if (forcestrip and luautilities.stripcode) or luautilities.alwaysstripcode then
return strip_code_pc(code,name)
else
return code, 0
@@ -4972,8 +4978,16 @@ end
luautilities.stripbytecode = strip_code_pc
luautilities.strippedbytecode = strippedbytecode
+local function fatalerror(name)
+ utilities.report(format("fatal error in %q",name or "unknown"))
+end
+
+-- quite subtle ... doing this wrong incidentally can give more bytes
+
+
function luautilities.loadedluacode(fullname,forcestrip,name)
-- quite subtle ... doing this wrong incidentally can give more bytes
+ name = name or fullname
local code = loadfile(fullname)
if code then
code()
@@ -4983,34 +4997,45 @@ function luautilities.loadedluacode(fullname,forcestrip,name)
forcestrip = forcestrip(fullname)
end
if forcestrip then
- local code, n = strip_code_pc(dump(code,name or fullname))
+ local code, n = strip_code_pc(dump(code,name))
return loadstring(code), n
+ elseif luautilities.alwaysstripcode then
+ return loadstring(strip_code_pc(dump(code),name))
else
return code, 0
end
+ elseif luautilities.alwaysstripcode then
+ return loadstring(strip_code_pc(dump(code),name))
else
return code, 0
end
end
-function luautilities.strippedloadstring(str,forcestrip,name) -- better inline
- if forcestrip and luautilities.stripcode then
- local code, n = strip_code_pc(dump(loadstring(str)),name)
- return loadstring(code), n
- else
- return loadstring(str)
+function luautilities.strippedloadstring(code,forcestrip,name) -- not executed
+ local n = 0
+ if (forcestrip and luautilities.stripcode) or luautilities.alwaysstripcode then
+ code = loadstring(code)
+ if not code then
+ fatalerror(name)
+ end
+ code, n = strip_code_pc(dump(code),name)
end
+ return loadstring(code), n
end
local function stupidcompile(luafile,lucfile,strip)
- local data = io.loaddata(luafile)
- if data and data ~= "" then
- data = dump(loadstring(data))
+ local code = io.loaddata(luafile)
+ if code and code ~= "" then
+ code = loadstring(code)
+ if not code then
+ fatalerror()
+ end
+ code = dump(code)
if strip then
- data = strippedbytecode(data,true,luafile) -- last one is reported
+ code = strippedbytecode(code,true,luafile) -- last one is reported
end
- if data and data ~= "" then
- io.savedata(lucfile,data)
+ if code and code ~= "" then
+ io.savedata(lucfile,code)
end
end
end