summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2017-03-01 13:51:17 +0100
committerContext Git Mirror Bot <phg42.2a@gmail.com>2017-03-01 13:51:17 +0100
commit0da55392b876cef55845157c4bfb8244d84c6450 (patch)
treea050eef10e2790e286b94dcfeae1aacc657b025b /scripts
parenta616b343d8dfe81008c9e8aee253cf31f088f35b (diff)
downloadcontext-0da55392b876cef55845157c4bfb8244d84c6450.tar.gz
2017-03-01 13:47:00
Diffstat (limited to 'scripts')
-rw-r--r--scripts/context/lua/mtx-context.lua7
-rw-r--r--scripts/context/lua/mtxrun.lua425
-rw-r--r--scripts/context/stubs/mswin/mtxrun.lua425
-rw-r--r--scripts/context/stubs/unix/mtxrun425
-rw-r--r--scripts/context/stubs/win64/mtxrun.lua425
5 files changed, 932 insertions, 775 deletions
diff --git a/scripts/context/lua/mtx-context.lua b/scripts/context/lua/mtx-context.lua
index 95030a91c..d29b3c461 100644
--- a/scripts/context/lua/mtx-context.lua
+++ b/scripts/context/lua/mtx-context.lua
@@ -769,7 +769,7 @@ function scripts.context.run(ctxdata,filename)
end
--
if a_profile then
- directives[#directives+1] = "system.profile"
+ directives[#directives+1] = format("system.profile=%s",tonumber(a_profile) or 0)
end
--
if a_synctex then
@@ -790,6 +790,7 @@ function scripts.context.run(ctxdata,filename)
c_flags.forcedruns = multipass_forcedruns and multipass_forcedruns > 0 and multipass_forcedruns or nil
c_flags.currentrun = currentrun
c_flags.noarrange = a_noarrange or a_arrange or nil
+ c_flags.profile = a_profile and (tonumber(a_profile) or 0) or nil
--
local command = luatex_command(l_flags,c_flags,mainfile,a_engine)
--
@@ -1740,10 +1741,10 @@ do
end
if getargument("once") then
- multipass_nofruns = 1
+ multipass_nofruns = 1
else
if getargument("runs") then
- multipass_nofruns = tonumber(getargument("runs")) or nil
+ multipass_nofruns = tonumber(getargument("runs")) or nil
end
multipass_forcedruns = tonumber(getargument("forcedruns")) or nil
end
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index 0c3355fcc..6aae96c4f 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -2675,7 +2675,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-io"] = package.loaded["l-io"] or true
--- original size: 10421, stripped down to: 7499
+-- original size: 12255, stripped down to: 7256
if not modules then modules={} end modules ['l-io']={
version=1.001,
@@ -2695,44 +2695,30 @@ if string.find(os.getenv("PATH"),";",1,true) then
else
io.fileseparator,io.pathseparator="/",":"
end
-local function readall(f)
- return f:read("*all")
-end
+local large=2^24
+local medium=large/16
+local small=medium/8
local function readall(f)
local size=f:seek("end")
- if size==0 then
- return ""
- end
- f:seek("set",0)
- if size<1024*1024 then
- return f:read('*all')
+ if size>0 then
+ f:seek("set",0)
+ return f:read(size)
else
- local step
- if size>16*1024*1024 then
- step=16*1024*1024
- else
- step=floor(size/(1024*1024))*1024*1024/8
- end
- local data={}
- while true do
- local r=f:read(step)
- if not r then
- return concat(data)
- else
- data[#data+1]=r
- end
- end
+ return ""
end
end
io.readall=readall
function io.loaddata(filename,textmode)
local f=open(filename,(textmode and 'r') or 'rb')
if f then
- local data=readall(f)
- f:close()
- if #data>0 then
- return data
+ local size=f:seek("end")
+ local data=nil
+ if size>0 then
+ f:seek("set",0)
+ data=f:read(size)
end
+ f:close()
+ return data
end
end
function io.copydata(source,target,action)
@@ -2741,37 +2727,14 @@ function io.copydata(source,target,action)
local g=open(target,"wb")
if g then
local size=f:seek("end")
- if size==0 then
- else
+ if size>0 then
f:seek("set",0)
- if size<1024*1024 then
- local data=f:read('*all')
- if action then
- data=action(data)
- end
- if data then
- g:write(data)
- end
- else
- local step
- if size>16*1024*1024 then
- step=16*1024*1024
- else
- step=floor(size/(1024*1024))*1024*1024/8
- end
- while true do
- local data=f:read(step)
- if data then
- if action then
- data=action(data)
- end
- if data then
- g:write(data)
- end
- else
- break
- end
- end
+ local data=f:read(size)
+ if action then
+ data=action(data)
+ end
+ if data then
+ g:write(data)
end
end
g:close()
@@ -2797,29 +2760,59 @@ function io.savedata(filename,data,joiner)
return false
end
end
-function io.loadlines(filename,n)
- local f=open(filename,'r')
- if not f then
- elseif n then
- local lines={}
- for i=1,n do
- local line=f:read("*lines")
- if line then
- lines[#lines+1]=line
- else
- break
+if fio.readline then
+ local readline=fio.readline
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=readline(f)
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=readline(f)
+ f:close()
+ if line and #line>0 then
+ return line
end
end
- f:close()
- lines=concat(lines,"\n")
- if #lines>0 then
- return lines
- end
- else
- local line=f:read("*line") or ""
- f:close()
- if #line>0 then
- return line
+ end
+else
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=f:read("*lines")
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=f:read("*line") or ""
+ f:close()
+ if #line>0 then
+ return line
+ end
end
end
end
@@ -2980,7 +2973,7 @@ function io.ask(question,default,options)
end
end
end
-local function readnumber(f,n,m)
+local function readnumber(f,n,m)
if m then
f:seek("set",n)
n=m
@@ -2989,31 +2982,31 @@ local function readnumber(f,n,m)
return byte(f:read(1))
elseif n==2 then
local a,b=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==3 then
local a,b,c=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==4 then
local a,b,c,d=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==8 then
local a,b=readnumber(f,4),readnumber(f,4)
- return 256*a+b
+ return 0x100*a+b
elseif n==12 then
local a,b,c=readnumber(f,4),readnumber(f,4),readnumber(f,4)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-2 then
local b,a=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==-3 then
local c,b,a=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-4 then
local d,c,b,a=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==-8 then
local h,g,f,e,d,c,b,a=byte(f:read(8),1,8)
- return 256*256*256*256*256*256*256*a+256*256*256*256*256*256*b+256*256*256*256*256*c+256*256*256*256*d+256*256*256*e+256*256*f+256*g+h
+ return 0x100000000000000*a+0x1000000000000*b+0x10000000000*c+0x100000000*d+0x1000000*e+0x10000*f+0x100*g+h
else
return 0
end
@@ -3274,7 +3267,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 16520, stripped down to: 9519
+-- original size: 16834, stripped down to: 9513
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -3610,7 +3603,7 @@ if not os.sleep then
end
end
local function isleapyear(year)
- return (year%400==0) or ((year%100~=0) and (year%4==0))
+ return (year%4==0) and (year%100~=0 or year%400==0)
end
os.isleapyear=isleapyear
local days={ 31,28,31,30,31,30,31,31,30,31,30,31 }
@@ -7042,7 +7035,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fil"] = package.loaded["util-fil"] or true
--- original size: 6362, stripped down to: 4907
+-- original size: 7597, stripped down to: 5761
if not modules then modules={} end modules ['util-fil']={
version=1.001,
@@ -7111,6 +7104,10 @@ end
function files.readbytes(f,n)
return byte(f:read(n),1,n)
end
+function files.readbytetable(f,n)
+ local s=f:read(n or 1)
+ return { byte(s,1,#s) }
+end
function files.readchar(f)
return f:read(1)
end
@@ -7199,21 +7196,12 @@ function files.readcardinal4le(f)
end
function files.readinteger4(f)
local a,b,c,d=byte(f:read(4),1,4)
- local n=0x1000000*a+0x10000*b+0x100*c+d
- if n>=0x8000000 then
- return n-0x100000000
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n
+ return 0x1000000*a+0x10000*b+0x100*c+d
end
end
- function files.readinteger4(f)
- local a,b,c,d=byte(f:read(4),1,4)
- if a>=0x80 then
- return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
- else
- return 0x1000000*a+0x10000*b+0x100*c+d
- end
- end
function files.readinteger4le(f)
local d,c,b,a=byte(f:read(4),1,4)
local n=0x1000000*a+0x10000*b+0x100*c+d
@@ -7225,11 +7213,10 @@ function files.readinteger4le(f)
end
function files.readfixed4(f)
local a,b,c,d=byte(f:read(4),1,4)
- local n=0x100*a+b
- if n>=0x8000 then
- return n-0x10000+(0x100*c+d)/0xFFFF
+ if a>=0x80 then
+ return (0x1000000*a+0x10000*b+0x100*c+d-0x100000000)/65536.0
else
- return n+(0x100*c+d)/0xFFFF
+ return (0x1000000*a+0x10000*b+0x100*c+d)/65536.0
end
end
if extract then
@@ -7274,6 +7261,34 @@ end
function files.writebyte(f,b)
f:write(char(b))
end
+if fio and fio.readcardinal1 then
+ files.readcardinal1=fio.readcardinal1
+ files.readcardinal2=fio.readcardinal2
+ files.readcardinal3=fio.readcardinal3
+ files.readcardinal4=fio.readcardinal4
+ files.readinteger1=fio.readinteger1
+ files.readinteger2=fio.readinteger2
+ files.readinteger3=fio.readinteger3
+ files.readinteger4=fio.readinteger4
+ files.readfixed4=fio.readfixed4
+ files.read2dot14=fio.read2dot14
+ files.setposition=fio.setposition
+ files.getposition=fio.getposition
+ files.readbyte=files.readcardinel1
+ files.readsignedbyte=files.readinteger1
+ files.readcardinal=files.readcardinal1
+ files.readinteger=files.readinteger1
+ local skipposition=fio.skipposition
+ files.skipposition=skipposition
+ files.readbytes=fio.readbytes
+ files.readbytetable=fio.readbytetable
+ function files.skipshort(f,n)
+ skipposition(f,2*(n or 1))
+ end
+ function files.skiplong(f,n)
+ skipposition(f,4*(n or 1))
+ end
+end
end -- of closure
@@ -7282,7 +7297,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-sac"] = package.loaded["util-sac"] or true
--- original size: 4360, stripped down to: 3409
+-- original size: 4634, stripped down to: 3514
if not modules then modules={} end modules ['util-sac']={
version=1.001,
@@ -7350,6 +7365,12 @@ function streams.readbytes(f,n)
f[2]=j
return byte(f[1],i,j-1)
end
+function streams.readbytetable(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return { byte(f[1],i,j-1) }
+end
function streams.skipbytes(f,n)
f[2]=f[2]+n
end
@@ -7369,7 +7390,7 @@ function streams.readinteger1(f)
f[2]=i+1
local n=byte(f[1],i)
if n>=0x80 then
- return n-0xFF-1
+ return n-0x100
else
return n
end
@@ -7391,7 +7412,7 @@ function streams.readinteger2(f)
local a,b=byte(f[1],i,j)
local n=0x100*a+b
if n>=0x8000 then
- return n-0xFFFF-1
+ return n-0x10000
else
return n
end
@@ -7417,7 +7438,7 @@ function streams.readinteger4(f)
local a,b,c,d=byte(f[1],i,j)
local n=0x1000000*a+0x10000*b+0x100*c+d
if n>=0x8000000 then
- return n-0xFFFFFFFF-1
+ return n-0x100000000
else
return n
end
@@ -7429,7 +7450,7 @@ function streams.readfixed4(f)
local a,b,c,d=byte(f[1],i,j)
local n=0x100*a+b
if n>=0x8000 then
- return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ return n-0x10000+(0x100*c+d)/0xFFFF
else
return n+(0x100*c+d)/0xFFFF
end
@@ -9826,7 +9847,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-deb"] = package.loaded["util-deb"] or true
--- original size: 8473, stripped down to: 6211
+-- original size: 9211, stripped down to: 6727
if not modules then modules={} end modules ['util-deb']={
version=1.001,
@@ -9837,9 +9858,10 @@ if not modules then modules={} end modules ['util-deb']={
}
local debug=require "debug"
local getinfo,sethook=debug.getinfo,debug.sethook
-local type,next,tostring=type,next,tostring
+local type,next,tostring,tonumber=type,next,tostring,tonumber
local format,find,sub,gsub=string.format,string.find,string.sub,string.gsub
local insert,remove,sort=table.insert,table.remove,table.sort
+local setmetatableindex=table.setmetatableindex
utilities=utilities or {}
local debugger=utilities.debugger or {}
utilities.debugger=debugger
@@ -9850,55 +9872,62 @@ local overhead=0
local dummycalls=10*1000
local nesting=0
local names={}
-local function initialize()
- if FFISUPPORTED and ffi then
- if os.type=="windows" then
- local okay,kernel=pcall(ffi.load,"kernel32")
- if kernel then
- local tonumber=ffi.number or tonumber
-ffi.cdef[[
-int QueryPerformanceFrequency(int64_t *lpFrequency);
-int QueryPerformanceCounter(int64_t *lpPerformanceCount);
-]]
- local target=ffi.new("__int64[1]")
- ticks=function()
- if kernel.QueryPerformanceCounter(target)==1 then
- return tonumber(target[0])
- else
- return 0
- end
- end
- local target=ffi.new("__int64[1]")
- seconds=function(ticks)
- if kernel.QueryPerformanceFrequency(target)==1 then
- return ticks/tonumber(target[0])
- else
- return 0
- end
- end
- end
- elseif os.type=="unix" then
- local C=ffi.C
+local initialize=false
+if not (FFISUPPORTED and ffi) then
+elseif os.type=="windows" then
+ initialize=function()
+ local kernel=ffilib("kernel32","system")
+ if kernel then
local tonumber=ffi.number or tonumber
-ffi.cdef [[
-struct timespec { long sec; long nsec; };
-int clock_gettime(int timerid, struct timespec *t);
- ]]
- local target=ffi.new("timespec[?]",1)
- function ticks()
- C.clock_gettime(2,target)
- return tonumber(target[0].sec*1000000000+target[0].nsec)
+ ffi.cdef[[
+ int QueryPerformanceFrequency(int64_t *lpFrequency);
+ int QueryPerformanceCounter(int64_t *lpPerformanceCount);
+ ]]
+ local target=ffi.new("__int64[1]")
+ ticks=function()
+ if kernel.QueryPerformanceCounter(target)==1 then
+ return tonumber(target[0])
+ else
+ return 0
+ end
end
+ local target=ffi.new("__int64[1]")
seconds=function(ticks)
- return ticks/1000000000
+ if kernel.QueryPerformanceFrequency(target)==1 then
+ return ticks/tonumber(target[0])
+ else
+ return 0
+ end
end
end
+ initialize=false
end
- initialize=false
-end
-table.setmetatableindex(names,function(t,name)
- local v=table.setmetatableindex(function(t,source)
- local v=table.setmetatableindex(function(t,line)
+elseif os.type=="unix" then
+ initialize=function()
+ local C=ffi.C
+ local tonumber=ffi.number or tonumber
+ ffi.cdef [[
+ /* what a mess */
+ typedef int clk_id_t;
+ typedef enum { CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID } clk_id;
+ typedef struct timespec { long sec; long nsec; } ctx_timespec;
+ int clock_gettime(clk_id_t timerid, struct timespec *t);
+ ]]
+ local target=ffi.new("ctx_timespec[?]",1)
+ local clock=C.CLOCK_PROCESS_CPUTIME_ID
+ ticks=function ()
+ C.clock_gettime(clock,target)
+ return tonumber(target[0].sec*1000000000+target[0].nsec)
+ end
+ seconds=function(ticks)
+ return ticks/1000000000
+ end
+ initialize=false
+ end
+end
+setmetatableindex(names,function(t,name)
+ local v=setmetatableindex(function(t,source)
+ local v=setmetatableindex(function(t,line)
local v={ total=0,count=0 }
t[line]=v
return v
@@ -9938,33 +9967,36 @@ local function hook(where)
end
end
end
-function debugger.showstats(printer)
+function debugger.showstats(printer,threshold)
local printer=printer or report
local calls=0
local functions=0
local dataset={}
local length=0
local wholetime=0
+ local threshold=threshold or 0
for name,sources in next,names do
for source,lines in next,sources do
for line,data in next,lines do
- if #name>length then
- length=#name
- end
- local total=data.total
local count=data.count
- local real=total
- if real>0 then
- real=total-(count*overhead/dummycalls)
- if real<0 then
- real=0
+ if count>threshold then
+ if #name>length then
+ length=#name
end
- wholetime=wholetime+real
- end
- if line<0 then
- line=0
+ local total=data.total
+ local real=total
+ if real>0 then
+ real=total-(count*overhead/dummycalls)
+ if real<0 then
+ real=0
+ end
+ wholetime=wholetime+real
+ end
+ if line<0 then
+ line=0
+ end
+ dataset[#dataset+1]={ real,total,count,name,source,line }
end
- dataset[#dataset+1]={ real,total,count,name,source,line }
end
end
end
@@ -10017,10 +10049,10 @@ function debugger.showstats(printer)
printer(format("calls : %i",calls))
printer(format("overhead : %f",seconds(overhead/1000)))
end
-function debugger.savestats(filename)
+function debugger.savestats(filename,threshold)
local f=io.open(filename,'w')
if f then
- debugger.showstats(function(str) f:write(str,"\n") end)
+ debugger.showstats(function(str) f:write(str,"\n") end,threshold)
f:close()
end
end
@@ -11231,7 +11263,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 58068, stripped down to: 36652
+-- original size: 58012, stripped down to: 36637
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -11373,7 +11405,7 @@ local function add_empty(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
- ni=nt,
+ ni=nil,
__p__=top
}
dt[nt]=t
@@ -11395,7 +11427,7 @@ local function add_begin(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
- ni=nt,
+ ni=nil,
__p__=stack[level]
}
setmetatable(top,mt)
@@ -11422,7 +11454,6 @@ local function add_end(spacing,namespace,tag)
end
dt=top.dt
nt=#dt+1
- toclose.ni=nt
dt[nt]=toclose
if toclose.at.xmlns then
remove(xmlns)
@@ -11472,7 +11503,7 @@ local function add_special(what,spacing,text)
special=true,
ns="",
tg=what,
- ni=nt,
+ ni=nil,
dt={ text },
}
end
@@ -12589,7 +12620,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true
--- original size: 54930, stripped down to: 33354
+-- original size: 54921, stripped down to: 33410
if not modules then modules={} end modules ['lxml-lpt']={
version=1.001,
@@ -12680,6 +12711,7 @@ apply_axis['child']=function(list)
if dk.tg then
c=c+1
collected[c]=dk
+ dk.ni=k
en=en+1
dk.ei=en
end
@@ -12698,6 +12730,7 @@ local function collect(list,collected,c)
if dk.tg then
c=c+1
collected[c]=dk
+ dk.ni=k
en=en+1
dk.ei=en
c=collect(dk,collected,c)
@@ -12723,6 +12756,7 @@ local function collect(list,collected,c)
if dk.tg then
c=c+1
collected[c]=dk
+ dk.ni=k
en=en+1
dk.ei=en
c=collect(dk,collected,c)
@@ -19624,7 +19658,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lib"] = package.loaded["util-lib"] or true
--- original size: 13648, stripped down to: 7455
+-- original size: 13748, stripped down to: 7544
if not modules then modules={} end modules ['util-lib']={
version=1.001,
@@ -19841,15 +19875,20 @@ if FFISUPPORTED and ffi and ffi.load then
local trace_ffilib=false
local savedffiload=ffi.load
trackers.register("resolvers.ffilib",function(v) trace_ffilib=v end)
+ local function locateindeed(name)
+ local message,library=pcall(savedffiload,removesuffix(name))
+ if type(library)=="userdata" then
+ return library
+ else
+ return false
+ end
+ end
function ffilib(required,version)
- return locate(required,version,trace_ffilib,report_ffilib,function(name)
- local message,library=pcall(savedffiload,removesuffix(name))
- if type(library)=="userdata" then
- return message,library
- else
- return message,false
- end
- end)
+ if version=="system" then
+ return locateindeed(name)
+ else
+ return locate(required,version,trace_ffilib,report_ffilib,locateindeed)
+ end
end
function ffi.load(name)
local library=ffilib(name)
@@ -20204,8 +20243,8 @@ end -- of closure
-- used libraries : l-lua.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 855737
--- stripped bytes : 310443
+-- original bytes : 860167
+-- stripped bytes : 313517
-- end library merge
diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua
index 0c3355fcc..6aae96c4f 100644
--- a/scripts/context/stubs/mswin/mtxrun.lua
+++ b/scripts/context/stubs/mswin/mtxrun.lua
@@ -2675,7 +2675,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-io"] = package.loaded["l-io"] or true
--- original size: 10421, stripped down to: 7499
+-- original size: 12255, stripped down to: 7256
if not modules then modules={} end modules ['l-io']={
version=1.001,
@@ -2695,44 +2695,30 @@ if string.find(os.getenv("PATH"),";",1,true) then
else
io.fileseparator,io.pathseparator="/",":"
end
-local function readall(f)
- return f:read("*all")
-end
+local large=2^24
+local medium=large/16
+local small=medium/8
local function readall(f)
local size=f:seek("end")
- if size==0 then
- return ""
- end
- f:seek("set",0)
- if size<1024*1024 then
- return f:read('*all')
+ if size>0 then
+ f:seek("set",0)
+ return f:read(size)
else
- local step
- if size>16*1024*1024 then
- step=16*1024*1024
- else
- step=floor(size/(1024*1024))*1024*1024/8
- end
- local data={}
- while true do
- local r=f:read(step)
- if not r then
- return concat(data)
- else
- data[#data+1]=r
- end
- end
+ return ""
end
end
io.readall=readall
function io.loaddata(filename,textmode)
local f=open(filename,(textmode and 'r') or 'rb')
if f then
- local data=readall(f)
- f:close()
- if #data>0 then
- return data
+ local size=f:seek("end")
+ local data=nil
+ if size>0 then
+ f:seek("set",0)
+ data=f:read(size)
end
+ f:close()
+ return data
end
end
function io.copydata(source,target,action)
@@ -2741,37 +2727,14 @@ function io.copydata(source,target,action)
local g=open(target,"wb")
if g then
local size=f:seek("end")
- if size==0 then
- else
+ if size>0 then
f:seek("set",0)
- if size<1024*1024 then
- local data=f:read('*all')
- if action then
- data=action(data)
- end
- if data then
- g:write(data)
- end
- else
- local step
- if size>16*1024*1024 then
- step=16*1024*1024
- else
- step=floor(size/(1024*1024))*1024*1024/8
- end
- while true do
- local data=f:read(step)
- if data then
- if action then
- data=action(data)
- end
- if data then
- g:write(data)
- end
- else
- break
- end
- end
+ local data=f:read(size)
+ if action then
+ data=action(data)
+ end
+ if data then
+ g:write(data)
end
end
g:close()
@@ -2797,29 +2760,59 @@ function io.savedata(filename,data,joiner)
return false
end
end
-function io.loadlines(filename,n)
- local f=open(filename,'r')
- if not f then
- elseif n then
- local lines={}
- for i=1,n do
- local line=f:read("*lines")
- if line then
- lines[#lines+1]=line
- else
- break
+if fio.readline then
+ local readline=fio.readline
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=readline(f)
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=readline(f)
+ f:close()
+ if line and #line>0 then
+ return line
end
end
- f:close()
- lines=concat(lines,"\n")
- if #lines>0 then
- return lines
- end
- else
- local line=f:read("*line") or ""
- f:close()
- if #line>0 then
- return line
+ end
+else
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=f:read("*lines")
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=f:read("*line") or ""
+ f:close()
+ if #line>0 then
+ return line
+ end
end
end
end
@@ -2980,7 +2973,7 @@ function io.ask(question,default,options)
end
end
end
-local function readnumber(f,n,m)
+local function readnumber(f,n,m)
if m then
f:seek("set",n)
n=m
@@ -2989,31 +2982,31 @@ local function readnumber(f,n,m)
return byte(f:read(1))
elseif n==2 then
local a,b=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==3 then
local a,b,c=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==4 then
local a,b,c,d=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==8 then
local a,b=readnumber(f,4),readnumber(f,4)
- return 256*a+b
+ return 0x100*a+b
elseif n==12 then
local a,b,c=readnumber(f,4),readnumber(f,4),readnumber(f,4)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-2 then
local b,a=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==-3 then
local c,b,a=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-4 then
local d,c,b,a=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==-8 then
local h,g,f,e,d,c,b,a=byte(f:read(8),1,8)
- return 256*256*256*256*256*256*256*a+256*256*256*256*256*256*b+256*256*256*256*256*c+256*256*256*256*d+256*256*256*e+256*256*f+256*g+h
+ return 0x100000000000000*a+0x1000000000000*b+0x10000000000*c+0x100000000*d+0x1000000*e+0x10000*f+0x100*g+h
else
return 0
end
@@ -3274,7 +3267,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 16520, stripped down to: 9519
+-- original size: 16834, stripped down to: 9513
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -3610,7 +3603,7 @@ if not os.sleep then
end
end
local function isleapyear(year)
- return (year%400==0) or ((year%100~=0) and (year%4==0))
+ return (year%4==0) and (year%100~=0 or year%400==0)
end
os.isleapyear=isleapyear
local days={ 31,28,31,30,31,30,31,31,30,31,30,31 }
@@ -7042,7 +7035,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fil"] = package.loaded["util-fil"] or true
--- original size: 6362, stripped down to: 4907
+-- original size: 7597, stripped down to: 5761
if not modules then modules={} end modules ['util-fil']={
version=1.001,
@@ -7111,6 +7104,10 @@ end
function files.readbytes(f,n)
return byte(f:read(n),1,n)
end
+function files.readbytetable(f,n)
+ local s=f:read(n or 1)
+ return { byte(s,1,#s) }
+end
function files.readchar(f)
return f:read(1)
end
@@ -7199,21 +7196,12 @@ function files.readcardinal4le(f)
end
function files.readinteger4(f)
local a,b,c,d=byte(f:read(4),1,4)
- local n=0x1000000*a+0x10000*b+0x100*c+d
- if n>=0x8000000 then
- return n-0x100000000
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n
+ return 0x1000000*a+0x10000*b+0x100*c+d
end
end
- function files.readinteger4(f)
- local a,b,c,d=byte(f:read(4),1,4)
- if a>=0x80 then
- return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
- else
- return 0x1000000*a+0x10000*b+0x100*c+d
- end
- end
function files.readinteger4le(f)
local d,c,b,a=byte(f:read(4),1,4)
local n=0x1000000*a+0x10000*b+0x100*c+d
@@ -7225,11 +7213,10 @@ function files.readinteger4le(f)
end
function files.readfixed4(f)
local a,b,c,d=byte(f:read(4),1,4)
- local n=0x100*a+b
- if n>=0x8000 then
- return n-0x10000+(0x100*c+d)/0xFFFF
+ if a>=0x80 then
+ return (0x1000000*a+0x10000*b+0x100*c+d-0x100000000)/65536.0
else
- return n+(0x100*c+d)/0xFFFF
+ return (0x1000000*a+0x10000*b+0x100*c+d)/65536.0
end
end
if extract then
@@ -7274,6 +7261,34 @@ end
function files.writebyte(f,b)
f:write(char(b))
end
+if fio and fio.readcardinal1 then
+ files.readcardinal1=fio.readcardinal1
+ files.readcardinal2=fio.readcardinal2
+ files.readcardinal3=fio.readcardinal3
+ files.readcardinal4=fio.readcardinal4
+ files.readinteger1=fio.readinteger1
+ files.readinteger2=fio.readinteger2
+ files.readinteger3=fio.readinteger3
+ files.readinteger4=fio.readinteger4
+ files.readfixed4=fio.readfixed4
+ files.read2dot14=fio.read2dot14
+ files.setposition=fio.setposition
+ files.getposition=fio.getposition
+ files.readbyte=files.readcardinel1
+ files.readsignedbyte=files.readinteger1
+ files.readcardinal=files.readcardinal1
+ files.readinteger=files.readinteger1
+ local skipposition=fio.skipposition
+ files.skipposition=skipposition
+ files.readbytes=fio.readbytes
+ files.readbytetable=fio.readbytetable
+ function files.skipshort(f,n)
+ skipposition(f,2*(n or 1))
+ end
+ function files.skiplong(f,n)
+ skipposition(f,4*(n or 1))
+ end
+end
end -- of closure
@@ -7282,7 +7297,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-sac"] = package.loaded["util-sac"] or true
--- original size: 4360, stripped down to: 3409
+-- original size: 4634, stripped down to: 3514
if not modules then modules={} end modules ['util-sac']={
version=1.001,
@@ -7350,6 +7365,12 @@ function streams.readbytes(f,n)
f[2]=j
return byte(f[1],i,j-1)
end
+function streams.readbytetable(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return { byte(f[1],i,j-1) }
+end
function streams.skipbytes(f,n)
f[2]=f[2]+n
end
@@ -7369,7 +7390,7 @@ function streams.readinteger1(f)
f[2]=i+1
local n=byte(f[1],i)
if n>=0x80 then
- return n-0xFF-1
+ return n-0x100
else
return n
end
@@ -7391,7 +7412,7 @@ function streams.readinteger2(f)
local a,b=byte(f[1],i,j)
local n=0x100*a+b
if n>=0x8000 then
- return n-0xFFFF-1
+ return n-0x10000
else
return n
end
@@ -7417,7 +7438,7 @@ function streams.readinteger4(f)
local a,b,c,d=byte(f[1],i,j)
local n=0x1000000*a+0x10000*b+0x100*c+d
if n>=0x8000000 then
- return n-0xFFFFFFFF-1
+ return n-0x100000000
else
return n
end
@@ -7429,7 +7450,7 @@ function streams.readfixed4(f)
local a,b,c,d=byte(f[1],i,j)
local n=0x100*a+b
if n>=0x8000 then
- return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ return n-0x10000+(0x100*c+d)/0xFFFF
else
return n+(0x100*c+d)/0xFFFF
end
@@ -9826,7 +9847,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-deb"] = package.loaded["util-deb"] or true
--- original size: 8473, stripped down to: 6211
+-- original size: 9211, stripped down to: 6727
if not modules then modules={} end modules ['util-deb']={
version=1.001,
@@ -9837,9 +9858,10 @@ if not modules then modules={} end modules ['util-deb']={
}
local debug=require "debug"
local getinfo,sethook=debug.getinfo,debug.sethook
-local type,next,tostring=type,next,tostring
+local type,next,tostring,tonumber=type,next,tostring,tonumber
local format,find,sub,gsub=string.format,string.find,string.sub,string.gsub
local insert,remove,sort=table.insert,table.remove,table.sort
+local setmetatableindex=table.setmetatableindex
utilities=utilities or {}
local debugger=utilities.debugger or {}
utilities.debugger=debugger
@@ -9850,55 +9872,62 @@ local overhead=0
local dummycalls=10*1000
local nesting=0
local names={}
-local function initialize()
- if FFISUPPORTED and ffi then
- if os.type=="windows" then
- local okay,kernel=pcall(ffi.load,"kernel32")
- if kernel then
- local tonumber=ffi.number or tonumber
-ffi.cdef[[
-int QueryPerformanceFrequency(int64_t *lpFrequency);
-int QueryPerformanceCounter(int64_t *lpPerformanceCount);
-]]
- local target=ffi.new("__int64[1]")
- ticks=function()
- if kernel.QueryPerformanceCounter(target)==1 then
- return tonumber(target[0])
- else
- return 0
- end
- end
- local target=ffi.new("__int64[1]")
- seconds=function(ticks)
- if kernel.QueryPerformanceFrequency(target)==1 then
- return ticks/tonumber(target[0])
- else
- return 0
- end
- end
- end
- elseif os.type=="unix" then
- local C=ffi.C
+local initialize=false
+if not (FFISUPPORTED and ffi) then
+elseif os.type=="windows" then
+ initialize=function()
+ local kernel=ffilib("kernel32","system")
+ if kernel then
local tonumber=ffi.number or tonumber
-ffi.cdef [[
-struct timespec { long sec; long nsec; };
-int clock_gettime(int timerid, struct timespec *t);
- ]]
- local target=ffi.new("timespec[?]",1)
- function ticks()
- C.clock_gettime(2,target)
- return tonumber(target[0].sec*1000000000+target[0].nsec)
+ ffi.cdef[[
+ int QueryPerformanceFrequency(int64_t *lpFrequency);
+ int QueryPerformanceCounter(int64_t *lpPerformanceCount);
+ ]]
+ local target=ffi.new("__int64[1]")
+ ticks=function()
+ if kernel.QueryPerformanceCounter(target)==1 then
+ return tonumber(target[0])
+ else
+ return 0
+ end
end
+ local target=ffi.new("__int64[1]")
seconds=function(ticks)
- return ticks/1000000000
+ if kernel.QueryPerformanceFrequency(target)==1 then
+ return ticks/tonumber(target[0])
+ else
+ return 0
+ end
end
end
+ initialize=false
end
- initialize=false
-end
-table.setmetatableindex(names,function(t,name)
- local v=table.setmetatableindex(function(t,source)
- local v=table.setmetatableindex(function(t,line)
+elseif os.type=="unix" then
+ initialize=function()
+ local C=ffi.C
+ local tonumber=ffi.number or tonumber
+ ffi.cdef [[
+ /* what a mess */
+ typedef int clk_id_t;
+ typedef enum { CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID } clk_id;
+ typedef struct timespec { long sec; long nsec; } ctx_timespec;
+ int clock_gettime(clk_id_t timerid, struct timespec *t);
+ ]]
+ local target=ffi.new("ctx_timespec[?]",1)
+ local clock=C.CLOCK_PROCESS_CPUTIME_ID
+ ticks=function ()
+ C.clock_gettime(clock,target)
+ return tonumber(target[0].sec*1000000000+target[0].nsec)
+ end
+ seconds=function(ticks)
+ return ticks/1000000000
+ end
+ initialize=false
+ end
+end
+setmetatableindex(names,function(t,name)
+ local v=setmetatableindex(function(t,source)
+ local v=setmetatableindex(function(t,line)
local v={ total=0,count=0 }
t[line]=v
return v
@@ -9938,33 +9967,36 @@ local function hook(where)
end
end
end
-function debugger.showstats(printer)
+function debugger.showstats(printer,threshold)
local printer=printer or report
local calls=0
local functions=0
local dataset={}
local length=0
local wholetime=0
+ local threshold=threshold or 0
for name,sources in next,names do
for source,lines in next,sources do
for line,data in next,lines do
- if #name>length then
- length=#name
- end
- local total=data.total
local count=data.count
- local real=total
- if real>0 then
- real=total-(count*overhead/dummycalls)
- if real<0 then
- real=0
+ if count>threshold then
+ if #name>length then
+ length=#name
end
- wholetime=wholetime+real
- end
- if line<0 then
- line=0
+ local total=data.total
+ local real=total
+ if real>0 then
+ real=total-(count*overhead/dummycalls)
+ if real<0 then
+ real=0
+ end
+ wholetime=wholetime+real
+ end
+ if line<0 then
+ line=0
+ end
+ dataset[#dataset+1]={ real,total,count,name,source,line }
end
- dataset[#dataset+1]={ real,total,count,name,source,line }
end
end
end
@@ -10017,10 +10049,10 @@ function debugger.showstats(printer)
printer(format("calls : %i",calls))
printer(format("overhead : %f",seconds(overhead/1000)))
end
-function debugger.savestats(filename)
+function debugger.savestats(filename,threshold)
local f=io.open(filename,'w')
if f then
- debugger.showstats(function(str) f:write(str,"\n") end)
+ debugger.showstats(function(str) f:write(str,"\n") end,threshold)
f:close()
end
end
@@ -11231,7 +11263,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 58068, stripped down to: 36652
+-- original size: 58012, stripped down to: 36637
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -11373,7 +11405,7 @@ local function add_empty(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
- ni=nt,
+ ni=nil,
__p__=top
}
dt[nt]=t
@@ -11395,7 +11427,7 @@ local function add_begin(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
- ni=nt,
+ ni=nil,
__p__=stack[level]
}
setmetatable(top,mt)
@@ -11422,7 +11454,6 @@ local function add_end(spacing,namespace,tag)
end
dt=top.dt
nt=#dt+1
- toclose.ni=nt
dt[nt]=toclose
if toclose.at.xmlns then
remove(xmlns)
@@ -11472,7 +11503,7 @@ local function add_special(what,spacing,text)
special=true,
ns="",
tg=what,
- ni=nt,
+ ni=nil,
dt={ text },
}
end
@@ -12589,7 +12620,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true
--- original size: 54930, stripped down to: 33354
+-- original size: 54921, stripped down to: 33410
if not modules then modules={} end modules ['lxml-lpt']={
version=1.001,
@@ -12680,6 +12711,7 @@ apply_axis['child']=function(list)
if dk.tg then
c=c+1
collected[c]=dk
+ dk.ni=k
en=en+1
dk.ei=en
end
@@ -12698,6 +12730,7 @@ local function collect(list,collected,c)
if dk.tg then
c=c+1
collected[c]=dk
+ dk.ni=k
en=en+1
dk.ei=en
c=collect(dk,collected,c)
@@ -12723,6 +12756,7 @@ local function collect(list,collected,c)
if dk.tg then
c=c+1
collected[c]=dk
+ dk.ni=k
en=en+1
dk.ei=en
c=collect(dk,collected,c)
@@ -19624,7 +19658,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lib"] = package.loaded["util-lib"] or true
--- original size: 13648, stripped down to: 7455
+-- original size: 13748, stripped down to: 7544
if not modules then modules={} end modules ['util-lib']={
version=1.001,
@@ -19841,15 +19875,20 @@ if FFISUPPORTED and ffi and ffi.load then
local trace_ffilib=false
local savedffiload=ffi.load
trackers.register("resolvers.ffilib",function(v) trace_ffilib=v end)
+ local function locateindeed(name)
+ local message,library=pcall(savedffiload,removesuffix(name))
+ if type(library)=="userdata" then
+ return library
+ else
+ return false
+ end
+ end
function ffilib(required,version)
- return locate(required,version,trace_ffilib,report_ffilib,function(name)
- local message,library=pcall(savedffiload,removesuffix(name))
- if type(library)=="userdata" then
- return message,library
- else
- return message,false
- end
- end)
+ if version=="system" then
+ return locateindeed(name)
+ else
+ return locate(required,version,trace_ffilib,report_ffilib,locateindeed)
+ end
end
function ffi.load(name)
local library=ffilib(name)
@@ -20204,8 +20243,8 @@ end -- of closure
-- used libraries : l-lua.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 855737
--- stripped bytes : 310443
+-- original bytes : 860167
+-- stripped bytes : 313517
-- end library merge
diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun
index 0c3355fcc..6aae96c4f 100644
--- a/scripts/context/stubs/unix/mtxrun
+++ b/scripts/context/stubs/unix/mtxrun
@@ -2675,7 +2675,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-io"] = package.loaded["l-io"] or true
--- original size: 10421, stripped down to: 7499
+-- original size: 12255, stripped down to: 7256
if not modules then modules={} end modules ['l-io']={
version=1.001,
@@ -2695,44 +2695,30 @@ if string.find(os.getenv("PATH"),";",1,true) then
else
io.fileseparator,io.pathseparator="/",":"
end
-local function readall(f)
- return f:read("*all")
-end
+local large=2^24
+local medium=large/16
+local small=medium/8
local function readall(f)
local size=f:seek("end")
- if size==0 then
- return ""
- end
- f:seek("set",0)
- if size<1024*1024 then
- return f:read('*all')
+ if size>0 then
+ f:seek("set",0)
+ return f:read(size)
else
- local step
- if size>16*1024*1024 then
- step=16*1024*1024
- else
- step=floor(size/(1024*1024))*1024*1024/8
- end
- local data={}
- while true do
- local r=f:read(step)
- if not r then
- return concat(data)
- else
- data[#data+1]=r
- end
- end
+ return ""
end
end
io.readall=readall
function io.loaddata(filename,textmode)
local f=open(filename,(textmode and 'r') or 'rb')
if f then
- local data=readall(f)
- f:close()
- if #data>0 then
- return data
+ local size=f:seek("end")
+ local data=nil
+ if size>0 then
+ f:seek("set",0)
+ data=f:read(size)
end
+ f:close()
+ return data
end
end
function io.copydata(source,target,action)
@@ -2741,37 +2727,14 @@ function io.copydata(source,target,action)
local g=open(target,"wb")
if g then
local size=f:seek("end")
- if size==0 then
- else
+ if size>0 then
f:seek("set",0)
- if size<1024*1024 then
- local data=f:read('*all')
- if action then
- data=action(data)
- end
- if data then
- g:write(data)
- end
- else
- local step
- if size>16*1024*1024 then
- step=16*1024*1024
- else
- step=floor(size/(1024*1024))*1024*1024/8
- end
- while true do
- local data=f:read(step)
- if data then
- if action then
- data=action(data)
- end
- if data then
- g:write(data)
- end
- else
- break
- end
- end
+ local data=f:read(size)
+ if action then
+ data=action(data)
+ end
+ if data then
+ g:write(data)
end
end
g:close()
@@ -2797,29 +2760,59 @@ function io.savedata(filename,data,joiner)
return false
end
end
-function io.loadlines(filename,n)
- local f=open(filename,'r')
- if not f then
- elseif n then
- local lines={}
- for i=1,n do
- local line=f:read("*lines")
- if line then
- lines[#lines+1]=line
- else
- break
+if fio.readline then
+ local readline=fio.readline
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=readline(f)
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=readline(f)
+ f:close()
+ if line and #line>0 then
+ return line
end
end
- f:close()
- lines=concat(lines,"\n")
- if #lines>0 then
- return lines
- end
- else
- local line=f:read("*line") or ""
- f:close()
- if #line>0 then
- return line
+ end
+else
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=f:read("*lines")
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=f:read("*line") or ""
+ f:close()
+ if #line>0 then
+ return line
+ end
end
end
end
@@ -2980,7 +2973,7 @@ function io.ask(question,default,options)
end
end
end
-local function readnumber(f,n,m)
+local function readnumber(f,n,m)
if m then
f:seek("set",n)
n=m
@@ -2989,31 +2982,31 @@ local function readnumber(f,n,m)
return byte(f:read(1))
elseif n==2 then
local a,b=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==3 then
local a,b,c=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==4 then
local a,b,c,d=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==8 then
local a,b=readnumber(f,4),readnumber(f,4)
- return 256*a+b
+ return 0x100*a+b
elseif n==12 then
local a,b,c=readnumber(f,4),readnumber(f,4),readnumber(f,4)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-2 then
local b,a=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==-3 then
local c,b,a=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-4 then
local d,c,b,a=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==-8 then
local h,g,f,e,d,c,b,a=byte(f:read(8),1,8)
- return 256*256*256*256*256*256*256*a+256*256*256*256*256*256*b+256*256*256*256*256*c+256*256*256*256*d+256*256*256*e+256*256*f+256*g+h
+ return 0x100000000000000*a+0x1000000000000*b+0x10000000000*c+0x100000000*d+0x1000000*e+0x10000*f+0x100*g+h
else
return 0
end
@@ -3274,7 +3267,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 16520, stripped down to: 9519
+-- original size: 16834, stripped down to: 9513
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -3610,7 +3603,7 @@ if not os.sleep then
end
end
local function isleapyear(year)
- return (year%400==0) or ((year%100~=0) and (year%4==0))
+ return (year%4==0) and (year%100~=0 or year%400==0)
end
os.isleapyear=isleapyear
local days={ 31,28,31,30,31,30,31,31,30,31,30,31 }
@@ -7042,7 +7035,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fil"] = package.loaded["util-fil"] or true
--- original size: 6362, stripped down to: 4907
+-- original size: 7597, stripped down to: 5761
if not modules then modules={} end modules ['util-fil']={
version=1.001,
@@ -7111,6 +7104,10 @@ end
function files.readbytes(f,n)
return byte(f:read(n),1,n)
end
+function files.readbytetable(f,n)
+ local s=f:read(n or 1)
+ return { byte(s,1,#s) }
+end
function files.readchar(f)
return f:read(1)
end
@@ -7199,21 +7196,12 @@ function files.readcardinal4le(f)
end
function files.readinteger4(f)
local a,b,c,d=byte(f:read(4),1,4)
- local n=0x1000000*a+0x10000*b+0x100*c+d
- if n>=0x8000000 then
- return n-0x100000000
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n
+ return 0x1000000*a+0x10000*b+0x100*c+d
end
end
- function files.readinteger4(f)
- local a,b,c,d=byte(f:read(4),1,4)
- if a>=0x80 then
- return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
- else
- return 0x1000000*a+0x10000*b+0x100*c+d
- end
- end
function files.readinteger4le(f)
local d,c,b,a=byte(f:read(4),1,4)
local n=0x1000000*a+0x10000*b+0x100*c+d
@@ -7225,11 +7213,10 @@ function files.readinteger4le(f)
end
function files.readfixed4(f)
local a,b,c,d=byte(f:read(4),1,4)
- local n=0x100*a+b
- if n>=0x8000 then
- return n-0x10000+(0x100*c+d)/0xFFFF
+ if a>=0x80 then
+ return (0x1000000*a+0x10000*b+0x100*c+d-0x100000000)/65536.0
else
- return n+(0x100*c+d)/0xFFFF
+ return (0x1000000*a+0x10000*b+0x100*c+d)/65536.0
end
end
if extract then
@@ -7274,6 +7261,34 @@ end
function files.writebyte(f,b)
f:write(char(b))
end
+if fio and fio.readcardinal1 then
+ files.readcardinal1=fio.readcardinal1
+ files.readcardinal2=fio.readcardinal2
+ files.readcardinal3=fio.readcardinal3
+ files.readcardinal4=fio.readcardinal4
+ files.readinteger1=fio.readinteger1
+ files.readinteger2=fio.readinteger2
+ files.readinteger3=fio.readinteger3
+ files.readinteger4=fio.readinteger4
+ files.readfixed4=fio.readfixed4
+ files.read2dot14=fio.read2dot14
+ files.setposition=fio.setposition
+ files.getposition=fio.getposition
+ files.readbyte=files.readcardinel1
+ files.readsignedbyte=files.readinteger1
+ files.readcardinal=files.readcardinal1
+ files.readinteger=files.readinteger1
+ local skipposition=fio.skipposition
+ files.skipposition=skipposition
+ files.readbytes=fio.readbytes
+ files.readbytetable=fio.readbytetable
+ function files.skipshort(f,n)
+ skipposition(f,2*(n or 1))
+ end
+ function files.skiplong(f,n)
+ skipposition(f,4*(n or 1))
+ end
+end
end -- of closure
@@ -7282,7 +7297,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-sac"] = package.loaded["util-sac"] or true
--- original size: 4360, stripped down to: 3409
+-- original size: 4634, stripped down to: 3514
if not modules then modules={} end modules ['util-sac']={
version=1.001,
@@ -7350,6 +7365,12 @@ function streams.readbytes(f,n)
f[2]=j
return byte(f[1],i,j-1)
end
+function streams.readbytetable(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return { byte(f[1],i,j-1) }
+end
function streams.skipbytes(f,n)
f[2]=f[2]+n
end
@@ -7369,7 +7390,7 @@ function streams.readinteger1(f)
f[2]=i+1
local n=byte(f[1],i)
if n>=0x80 then
- return n-0xFF-1
+ return n-0x100
else
return n
end
@@ -7391,7 +7412,7 @@ function streams.readinteger2(f)
local a,b=byte(f[1],i,j)
local n=0x100*a+b
if n>=0x8000 then
- return n-0xFFFF-1
+ return n-0x10000
else
return n
end
@@ -7417,7 +7438,7 @@ function streams.readinteger4(f)
local a,b,c,d=byte(f[1],i,j)
local n=0x1000000*a+0x10000*b+0x100*c+d
if n>=0x8000000 then
- return n-0xFFFFFFFF-1
+ return n-0x100000000
else
return n
end
@@ -7429,7 +7450,7 @@ function streams.readfixed4(f)
local a,b,c,d=byte(f[1],i,j)
local n=0x100*a+b
if n>=0x8000 then
- return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ return n-0x10000+(0x100*c+d)/0xFFFF
else
return n+(0x100*c+d)/0xFFFF
end
@@ -9826,7 +9847,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-deb"] = package.loaded["util-deb"] or true
--- original size: 8473, stripped down to: 6211
+-- original size: 9211, stripped down to: 6727
if not modules then modules={} end modules ['util-deb']={
version=1.001,
@@ -9837,9 +9858,10 @@ if not modules then modules={} end modules ['util-deb']={
}
local debug=require "debug"
local getinfo,sethook=debug.getinfo,debug.sethook
-local type,next,tostring=type,next,tostring
+local type,next,tostring,tonumber=type,next,tostring,tonumber
local format,find,sub,gsub=string.format,string.find,string.sub,string.gsub
local insert,remove,sort=table.insert,table.remove,table.sort
+local setmetatableindex=table.setmetatableindex
utilities=utilities or {}
local debugger=utilities.debugger or {}
utilities.debugger=debugger
@@ -9850,55 +9872,62 @@ local overhead=0
local dummycalls=10*1000
local nesting=0
local names={}
-local function initialize()
- if FFISUPPORTED and ffi then
- if os.type=="windows" then
- local okay,kernel=pcall(ffi.load,"kernel32")
- if kernel then
- local tonumber=ffi.number or tonumber
-ffi.cdef[[
-int QueryPerformanceFrequency(int64_t *lpFrequency);
-int QueryPerformanceCounter(int64_t *lpPerformanceCount);
-]]
- local target=ffi.new("__int64[1]")
- ticks=function()
- if kernel.QueryPerformanceCounter(target)==1 then
- return tonumber(target[0])
- else
- return 0
- end
- end
- local target=ffi.new("__int64[1]")
- seconds=function(ticks)
- if kernel.QueryPerformanceFrequency(target)==1 then
- return ticks/tonumber(target[0])
- else
- return 0
- end
- end
- end
- elseif os.type=="unix" then
- local C=ffi.C
+local initialize=false
+if not (FFISUPPORTED and ffi) then
+elseif os.type=="windows" then
+ initialize=function()
+ local kernel=ffilib("kernel32","system")
+ if kernel then
local tonumber=ffi.number or tonumber
-ffi.cdef [[
-struct timespec { long sec; long nsec; };
-int clock_gettime(int timerid, struct timespec *t);
- ]]
- local target=ffi.new("timespec[?]",1)
- function ticks()
- C.clock_gettime(2,target)
- return tonumber(target[0].sec*1000000000+target[0].nsec)
+ ffi.cdef[[
+ int QueryPerformanceFrequency(int64_t *lpFrequency);
+ int QueryPerformanceCounter(int64_t *lpPerformanceCount);
+ ]]
+ local target=ffi.new("__int64[1]")
+ ticks=function()
+ if kernel.QueryPerformanceCounter(target)==1 then
+ return tonumber(target[0])
+ else
+ return 0
+ end
end
+ local target=ffi.new("__int64[1]")
seconds=function(ticks)
- return ticks/1000000000
+ if kernel.QueryPerformanceFrequency(target)==1 then
+ return ticks/tonumber(target[0])
+ else
+ return 0
+ end
end
end
+ initialize=false
end
- initialize=false
-end
-table.setmetatableindex(names,function(t,name)
- local v=table.setmetatableindex(function(t,source)
- local v=table.setmetatableindex(function(t,line)
+elseif os.type=="unix" then
+ initialize=function()
+ local C=ffi.C
+ local tonumber=ffi.number or tonumber
+ ffi.cdef [[
+ /* what a mess */
+ typedef int clk_id_t;
+ typedef enum { CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID } clk_id;
+ typedef struct timespec { long sec; long nsec; } ctx_timespec;
+ int clock_gettime(clk_id_t timerid, struct timespec *t);
+ ]]
+ local target=ffi.new("ctx_timespec[?]",1)
+ local clock=C.CLOCK_PROCESS_CPUTIME_ID
+ ticks=function ()
+ C.clock_gettime(clock,target)
+ return tonumber(target[0].sec*1000000000+target[0].nsec)
+ end
+ seconds=function(ticks)
+ return ticks/1000000000
+ end
+ initialize=false
+ end
+end
+setmetatableindex(names,function(t,name)
+ local v=setmetatableindex(function(t,source)
+ local v=setmetatableindex(function(t,line)
local v={ total=0,count=0 }
t[line]=v
return v
@@ -9938,33 +9967,36 @@ local function hook(where)
end
end
end
-function debugger.showstats(printer)
+function debugger.showstats(printer,threshold)
local printer=printer or report
local calls=0
local functions=0
local dataset={}
local length=0
local wholetime=0
+ local threshold=threshold or 0
for name,sources in next,names do
for source,lines in next,sources do
for line,data in next,lines do
- if #name>length then
- length=#name
- end
- local total=data.total
local count=data.count
- local real=total
- if real>0 then
- real=total-(count*overhead/dummycalls)
- if real<0 then
- real=0
+ if count>threshold then
+ if #name>length then
+ length=#name
end
- wholetime=wholetime+real
- end
- if line<0 then
- line=0
+ local total=data.total
+ local real=total
+ if real>0 then
+ real=total-(count*overhead/dummycalls)
+ if real<0 then
+ real=0
+ end
+ wholetime=wholetime+real
+ end
+ if line<0 then
+ line=0
+ end
+ dataset[#dataset+1]={ real,total,count,name,source,line }
end
- dataset[#dataset+1]={ real,total,count,name,source,line }
end
end
end
@@ -10017,10 +10049,10 @@ function debugger.showstats(printer)
printer(format("calls : %i",calls))
printer(format("overhead : %f",seconds(overhead/1000)))
end
-function debugger.savestats(filename)
+function debugger.savestats(filename,threshold)
local f=io.open(filename,'w')
if f then
- debugger.showstats(function(str) f:write(str,"\n") end)
+ debugger.showstats(function(str) f:write(str,"\n") end,threshold)
f:close()
end
end
@@ -11231,7 +11263,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 58068, stripped down to: 36652
+-- original size: 58012, stripped down to: 36637
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -11373,7 +11405,7 @@ local function add_empty(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
- ni=nt,
+ ni=nil,
__p__=top
}
dt[nt]=t
@@ -11395,7 +11427,7 @@ local function add_begin(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
- ni=nt,
+ ni=nil,
__p__=stack[level]
}
setmetatable(top,mt)
@@ -11422,7 +11454,6 @@ local function add_end(spacing,namespace,tag)
end
dt=top.dt
nt=#dt+1
- toclose.ni=nt
dt[nt]=toclose
if toclose.at.xmlns then
remove(xmlns)
@@ -11472,7 +11503,7 @@ local function add_special(what,spacing,text)
special=true,
ns="",
tg=what,
- ni=nt,
+ ni=nil,
dt={ text },
}
end
@@ -12589,7 +12620,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true
--- original size: 54930, stripped down to: 33354
+-- original size: 54921, stripped down to: 33410
if not modules then modules={} end modules ['lxml-lpt']={
version=1.001,
@@ -12680,6 +12711,7 @@ apply_axis['child']=function(list)
if dk.tg then
c=c+1
collected[c]=dk
+ dk.ni=k
en=en+1
dk.ei=en
end
@@ -12698,6 +12730,7 @@ local function collect(list,collected,c)
if dk.tg then
c=c+1
collected[c]=dk
+ dk.ni=k
en=en+1
dk.ei=en
c=collect(dk,collected,c)
@@ -12723,6 +12756,7 @@ local function collect(list,collected,c)
if dk.tg then
c=c+1
collected[c]=dk
+ dk.ni=k
en=en+1
dk.ei=en
c=collect(dk,collected,c)
@@ -19624,7 +19658,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lib"] = package.loaded["util-lib"] or true
--- original size: 13648, stripped down to: 7455
+-- original size: 13748, stripped down to: 7544
if not modules then modules={} end modules ['util-lib']={
version=1.001,
@@ -19841,15 +19875,20 @@ if FFISUPPORTED and ffi and ffi.load then
local trace_ffilib=false
local savedffiload=ffi.load
trackers.register("resolvers.ffilib",function(v) trace_ffilib=v end)
+ local function locateindeed(name)
+ local message,library=pcall(savedffiload,removesuffix(name))
+ if type(library)=="userdata" then
+ return library
+ else
+ return false
+ end
+ end
function ffilib(required,version)
- return locate(required,version,trace_ffilib,report_ffilib,function(name)
- local message,library=pcall(savedffiload,removesuffix(name))
- if type(library)=="userdata" then
- return message,library
- else
- return message,false
- end
- end)
+ if version=="system" then
+ return locateindeed(name)
+ else
+ return locate(required,version,trace_ffilib,report_ffilib,locateindeed)
+ end
end
function ffi.load(name)
local library=ffilib(name)
@@ -20204,8 +20243,8 @@ end -- of closure
-- used libraries : l-lua.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 855737
--- stripped bytes : 310443
+-- original bytes : 860167
+-- stripped bytes : 313517
-- end library merge
diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua
index 0c3355fcc..6aae96c4f 100644
--- a/scripts/context/stubs/win64/mtxrun.lua
+++ b/scripts/context/stubs/win64/mtxrun.lua
@@ -2675,7 +2675,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-io"] = package.loaded["l-io"] or true
--- original size: 10421, stripped down to: 7499
+-- original size: 12255, stripped down to: 7256
if not modules then modules={} end modules ['l-io']={
version=1.001,
@@ -2695,44 +2695,30 @@ if string.find(os.getenv("PATH"),";",1,true) then
else
io.fileseparator,io.pathseparator="/",":"
end
-local function readall(f)
- return f:read("*all")
-end
+local large=2^24
+local medium=large/16
+local small=medium/8
local function readall(f)
local size=f:seek("end")
- if size==0 then
- return ""
- end
- f:seek("set",0)
- if size<1024*1024 then
- return f:read('*all')
+ if size>0 then
+ f:seek("set",0)
+ return f:read(size)
else
- local step
- if size>16*1024*1024 then
- step=16*1024*1024
- else
- step=floor(size/(1024*1024))*1024*1024/8
- end
- local data={}
- while true do
- local r=f:read(step)
- if not r then
- return concat(data)
- else
- data[#data+1]=r
- end
- end
+ return ""
end
end
io.readall=readall
function io.loaddata(filename,textmode)
local f=open(filename,(textmode and 'r') or 'rb')
if f then
- local data=readall(f)
- f:close()
- if #data>0 then
- return data
+ local size=f:seek("end")
+ local data=nil
+ if size>0 then
+ f:seek("set",0)
+ data=f:read(size)
end
+ f:close()
+ return data
end
end
function io.copydata(source,target,action)
@@ -2741,37 +2727,14 @@ function io.copydata(source,target,action)
local g=open(target,"wb")
if g then
local size=f:seek("end")
- if size==0 then
- else
+ if size>0 then
f:seek("set",0)
- if size<1024*1024 then
- local data=f:read('*all')
- if action then
- data=action(data)
- end
- if data then
- g:write(data)
- end
- else
- local step
- if size>16*1024*1024 then
- step=16*1024*1024
- else
- step=floor(size/(1024*1024))*1024*1024/8
- end
- while true do
- local data=f:read(step)
- if data then
- if action then
- data=action(data)
- end
- if data then
- g:write(data)
- end
- else
- break
- end
- end
+ local data=f:read(size)
+ if action then
+ data=action(data)
+ end
+ if data then
+ g:write(data)
end
end
g:close()
@@ -2797,29 +2760,59 @@ function io.savedata(filename,data,joiner)
return false
end
end
-function io.loadlines(filename,n)
- local f=open(filename,'r')
- if not f then
- elseif n then
- local lines={}
- for i=1,n do
- local line=f:read("*lines")
- if line then
- lines[#lines+1]=line
- else
- break
+if fio.readline then
+ local readline=fio.readline
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=readline(f)
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=readline(f)
+ f:close()
+ if line and #line>0 then
+ return line
end
end
- f:close()
- lines=concat(lines,"\n")
- if #lines>0 then
- return lines
- end
- else
- local line=f:read("*line") or ""
- f:close()
- if #line>0 then
- return line
+ end
+else
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=f:read("*lines")
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=f:read("*line") or ""
+ f:close()
+ if #line>0 then
+ return line
+ end
end
end
end
@@ -2980,7 +2973,7 @@ function io.ask(question,default,options)
end
end
end
-local function readnumber(f,n,m)
+local function readnumber(f,n,m)
if m then
f:seek("set",n)
n=m
@@ -2989,31 +2982,31 @@ local function readnumber(f,n,m)
return byte(f:read(1))
elseif n==2 then
local a,b=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==3 then
local a,b,c=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==4 then
local a,b,c,d=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==8 then
local a,b=readnumber(f,4),readnumber(f,4)
- return 256*a+b
+ return 0x100*a+b
elseif n==12 then
local a,b,c=readnumber(f,4),readnumber(f,4),readnumber(f,4)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-2 then
local b,a=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==-3 then
local c,b,a=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-4 then
local d,c,b,a=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==-8 then
local h,g,f,e,d,c,b,a=byte(f:read(8),1,8)
- return 256*256*256*256*256*256*256*a+256*256*256*256*256*256*b+256*256*256*256*256*c+256*256*256*256*d+256*256*256*e+256*256*f+256*g+h
+ return 0x100000000000000*a+0x1000000000000*b+0x10000000000*c+0x100000000*d+0x1000000*e+0x10000*f+0x100*g+h
else
return 0
end
@@ -3274,7 +3267,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 16520, stripped down to: 9519
+-- original size: 16834, stripped down to: 9513
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -3610,7 +3603,7 @@ if not os.sleep then
end
end
local function isleapyear(year)
- return (year%400==0) or ((year%100~=0) and (year%4==0))
+ return (year%4==0) and (year%100~=0 or year%400==0)
end
os.isleapyear=isleapyear
local days={ 31,28,31,30,31,30,31,31,30,31,30,31 }
@@ -7042,7 +7035,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fil"] = package.loaded["util-fil"] or true
--- original size: 6362, stripped down to: 4907
+-- original size: 7597, stripped down to: 5761
if not modules then modules={} end modules ['util-fil']={
version=1.001,
@@ -7111,6 +7104,10 @@ end
function files.readbytes(f,n)
return byte(f:read(n),1,n)
end
+function files.readbytetable(f,n)
+ local s=f:read(n or 1)
+ return { byte(s,1,#s) }
+end
function files.readchar(f)
return f:read(1)
end
@@ -7199,21 +7196,12 @@ function files.readcardinal4le(f)
end
function files.readinteger4(f)
local a,b,c,d=byte(f:read(4),1,4)
- local n=0x1000000*a+0x10000*b+0x100*c+d
- if n>=0x8000000 then
- return n-0x100000000
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n
+ return 0x1000000*a+0x10000*b+0x100*c+d
end
end
- function files.readinteger4(f)
- local a,b,c,d=byte(f:read(4),1,4)
- if a>=0x80 then
- return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
- else
- return 0x1000000*a+0x10000*b+0x100*c+d
- end
- end
function files.readinteger4le(f)
local d,c,b,a=byte(f:read(4),1,4)
local n=0x1000000*a+0x10000*b+0x100*c+d
@@ -7225,11 +7213,10 @@ function files.readinteger4le(f)
end
function files.readfixed4(f)
local a,b,c,d=byte(f:read(4),1,4)
- local n=0x100*a+b
- if n>=0x8000 then
- return n-0x10000+(0x100*c+d)/0xFFFF
+ if a>=0x80 then
+ return (0x1000000*a+0x10000*b+0x100*c+d-0x100000000)/65536.0
else
- return n+(0x100*c+d)/0xFFFF
+ return (0x1000000*a+0x10000*b+0x100*c+d)/65536.0
end
end
if extract then
@@ -7274,6 +7261,34 @@ end
function files.writebyte(f,b)
f:write(char(b))
end
+if fio and fio.readcardinal1 then
+ files.readcardinal1=fio.readcardinal1
+ files.readcardinal2=fio.readcardinal2
+ files.readcardinal3=fio.readcardinal3
+ files.readcardinal4=fio.readcardinal4
+ files.readinteger1=fio.readinteger1
+ files.readinteger2=fio.readinteger2
+ files.readinteger3=fio.readinteger3
+ files.readinteger4=fio.readinteger4
+ files.readfixed4=fio.readfixed4
+ files.read2dot14=fio.read2dot14
+ files.setposition=fio.setposition
+ files.getposition=fio.getposition
+ files.readbyte=files.readcardinel1
+ files.readsignedbyte=files.readinteger1
+ files.readcardinal=files.readcardinal1
+ files.readinteger=files.readinteger1
+ local skipposition=fio.skipposition
+ files.skipposition=skipposition
+ files.readbytes=fio.readbytes
+ files.readbytetable=fio.readbytetable
+ function files.skipshort(f,n)
+ skipposition(f,2*(n or 1))
+ end
+ function files.skiplong(f,n)
+ skipposition(f,4*(n or 1))
+ end
+end
end -- of closure
@@ -7282,7 +7297,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-sac"] = package.loaded["util-sac"] or true
--- original size: 4360, stripped down to: 3409
+-- original size: 4634, stripped down to: 3514
if not modules then modules={} end modules ['util-sac']={
version=1.001,
@@ -7350,6 +7365,12 @@ function streams.readbytes(f,n)
f[2]=j
return byte(f[1],i,j-1)
end
+function streams.readbytetable(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return { byte(f[1],i,j-1) }
+end
function streams.skipbytes(f,n)
f[2]=f[2]+n
end
@@ -7369,7 +7390,7 @@ function streams.readinteger1(f)
f[2]=i+1
local n=byte(f[1],i)
if n>=0x80 then
- return n-0xFF-1
+ return n-0x100
else
return n
end
@@ -7391,7 +7412,7 @@ function streams.readinteger2(f)
local a,b=byte(f[1],i,j)
local n=0x100*a+b
if n>=0x8000 then
- return n-0xFFFF-1
+ return n-0x10000
else
return n
end
@@ -7417,7 +7438,7 @@ function streams.readinteger4(f)
local a,b,c,d=byte(f[1],i,j)
local n=0x1000000*a+0x10000*b+0x100*c+d
if n>=0x8000000 then
- return n-0xFFFFFFFF-1
+ return n-0x100000000
else
return n
end
@@ -7429,7 +7450,7 @@ function streams.readfixed4(f)
local a,b,c,d=byte(f[1],i,j)
local n=0x100*a+b
if n>=0x8000 then
- return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ return n-0x10000+(0x100*c+d)/0xFFFF
else
return n+(0x100*c+d)/0xFFFF
end
@@ -9826,7 +9847,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-deb"] = package.loaded["util-deb"] or true
--- original size: 8473, stripped down to: 6211
+-- original size: 9211, stripped down to: 6727
if not modules then modules={} end modules ['util-deb']={
version=1.001,
@@ -9837,9 +9858,10 @@ if not modules then modules={} end modules ['util-deb']={
}
local debug=require "debug"
local getinfo,sethook=debug.getinfo,debug.sethook
-local type,next,tostring=type,next,tostring
+local type,next,tostring,tonumber=type,next,tostring,tonumber
local format,find,sub,gsub=string.format,string.find,string.sub,string.gsub
local insert,remove,sort=table.insert,table.remove,table.sort
+local setmetatableindex=table.setmetatableindex
utilities=utilities or {}
local debugger=utilities.debugger or {}
utilities.debugger=debugger
@@ -9850,55 +9872,62 @@ local overhead=0
local dummycalls=10*1000
local nesting=0
local names={}
-local function initialize()
- if FFISUPPORTED and ffi then
- if os.type=="windows" then
- local okay,kernel=pcall(ffi.load,"kernel32")
- if kernel then
- local tonumber=ffi.number or tonumber
-ffi.cdef[[
-int QueryPerformanceFrequency(int64_t *lpFrequency);
-int QueryPerformanceCounter(int64_t *lpPerformanceCount);
-]]
- local target=ffi.new("__int64[1]")
- ticks=function()
- if kernel.QueryPerformanceCounter(target)==1 then
- return tonumber(target[0])
- else
- return 0
- end
- end
- local target=ffi.new("__int64[1]")
- seconds=function(ticks)
- if kernel.QueryPerformanceFrequency(target)==1 then
- return ticks/tonumber(target[0])
- else
- return 0
- end
- end
- end
- elseif os.type=="unix" then
- local C=ffi.C
+local initialize=false
+if not (FFISUPPORTED and ffi) then
+elseif os.type=="windows" then
+ initialize=function()
+ local kernel=ffilib("kernel32","system")
+ if kernel then
local tonumber=ffi.number or tonumber
-ffi.cdef [[
-struct timespec { long sec; long nsec; };
-int clock_gettime(int timerid, struct timespec *t);
- ]]
- local target=ffi.new("timespec[?]",1)
- function ticks()
- C.clock_gettime(2,target)
- return tonumber(target[0].sec*1000000000+target[0].nsec)
+ ffi.cdef[[
+ int QueryPerformanceFrequency(int64_t *lpFrequency);
+ int QueryPerformanceCounter(int64_t *lpPerformanceCount);
+ ]]
+ local target=ffi.new("__int64[1]")
+ ticks=function()
+ if kernel.QueryPerformanceCounter(target)==1 then
+ return tonumber(target[0])
+ else
+ return 0
+ end
end
+ local target=ffi.new("__int64[1]")
seconds=function(ticks)
- return ticks/1000000000
+ if kernel.QueryPerformanceFrequency(target)==1 then
+ return ticks/tonumber(target[0])
+ else
+ return 0
+ end
end
end
+ initialize=false
end
- initialize=false
-end
-table.setmetatableindex(names,function(t,name)
- local v=table.setmetatableindex(function(t,source)
- local v=table.setmetatableindex(function(t,line)
+elseif os.type=="unix" then
+ initialize=function()
+ local C=ffi.C
+ local tonumber=ffi.number or tonumber
+ ffi.cdef [[
+ /* what a mess */
+ typedef int clk_id_t;
+ typedef enum { CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID } clk_id;
+ typedef struct timespec { long sec; long nsec; } ctx_timespec;
+ int clock_gettime(clk_id_t timerid, struct timespec *t);
+ ]]
+ local target=ffi.new("ctx_timespec[?]",1)
+ local clock=C.CLOCK_PROCESS_CPUTIME_ID
+ ticks=function ()
+ C.clock_gettime(clock,target)
+ return tonumber(target[0].sec*1000000000+target[0].nsec)
+ end
+ seconds=function(ticks)
+ return ticks/1000000000
+ end
+ initialize=false
+ end
+end
+setmetatableindex(names,function(t,name)
+ local v=setmetatableindex(function(t,source)
+ local v=setmetatableindex(function(t,line)
local v={ total=0,count=0 }
t[line]=v
return v
@@ -9938,33 +9967,36 @@ local function hook(where)
end
end
end
-function debugger.showstats(printer)
+function debugger.showstats(printer,threshold)
local printer=printer or report
local calls=0
local functions=0
local dataset={}
local length=0
local wholetime=0
+ local threshold=threshold or 0
for name,sources in next,names do
for source,lines in next,sources do
for line,data in next,lines do
- if #name>length then
- length=#name
- end
- local total=data.total
local count=data.count
- local real=total
- if real>0 then
- real=total-(count*overhead/dummycalls)
- if real<0 then
- real=0
+ if count>threshold then
+ if #name>length then
+ length=#name
end
- wholetime=wholetime+real
- end
- if line<0 then
- line=0
+ local total=data.total
+ local real=total
+ if real>0 then
+ real=total-(count*overhead/dummycalls)
+ if real<0 then
+ real=0
+ end
+ wholetime=wholetime+real
+ end
+ if line<0 then
+ line=0
+ end
+ dataset[#dataset+1]={ real,total,count,name,source,line }
end
- dataset[#dataset+1]={ real,total,count,name,source,line }
end
end
end
@@ -10017,10 +10049,10 @@ function debugger.showstats(printer)
printer(format("calls : %i",calls))
printer(format("overhead : %f",seconds(overhead/1000)))
end
-function debugger.savestats(filename)
+function debugger.savestats(filename,threshold)
local f=io.open(filename,'w')
if f then
- debugger.showstats(function(str) f:write(str,"\n") end)
+ debugger.showstats(function(str) f:write(str,"\n") end,threshold)
f:close()
end
end
@@ -11231,7 +11263,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 58068, stripped down to: 36652
+-- original size: 58012, stripped down to: 36637
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -11373,7 +11405,7 @@ local function add_empty(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
- ni=nt,
+ ni=nil,
__p__=top
}
dt[nt]=t
@@ -11395,7 +11427,7 @@ local function add_begin(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
- ni=nt,
+ ni=nil,
__p__=stack[level]
}
setmetatable(top,mt)
@@ -11422,7 +11454,6 @@ local function add_end(spacing,namespace,tag)
end
dt=top.dt
nt=#dt+1
- toclose.ni=nt
dt[nt]=toclose
if toclose.at.xmlns then
remove(xmlns)
@@ -11472,7 +11503,7 @@ local function add_special(what,spacing,text)
special=true,
ns="",
tg=what,
- ni=nt,
+ ni=nil,
dt={ text },
}
end
@@ -12589,7 +12620,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true
--- original size: 54930, stripped down to: 33354
+-- original size: 54921, stripped down to: 33410
if not modules then modules={} end modules ['lxml-lpt']={
version=1.001,
@@ -12680,6 +12711,7 @@ apply_axis['child']=function(list)
if dk.tg then
c=c+1
collected[c]=dk
+ dk.ni=k
en=en+1
dk.ei=en
end
@@ -12698,6 +12730,7 @@ local function collect(list,collected,c)
if dk.tg then
c=c+1
collected[c]=dk
+ dk.ni=k
en=en+1
dk.ei=en
c=collect(dk,collected,c)
@@ -12723,6 +12756,7 @@ local function collect(list,collected,c)
if dk.tg then
c=c+1
collected[c]=dk
+ dk.ni=k
en=en+1
dk.ei=en
c=collect(dk,collected,c)
@@ -19624,7 +19658,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lib"] = package.loaded["util-lib"] or true
--- original size: 13648, stripped down to: 7455
+-- original size: 13748, stripped down to: 7544
if not modules then modules={} end modules ['util-lib']={
version=1.001,
@@ -19841,15 +19875,20 @@ if FFISUPPORTED and ffi and ffi.load then
local trace_ffilib=false
local savedffiload=ffi.load
trackers.register("resolvers.ffilib",function(v) trace_ffilib=v end)
+ local function locateindeed(name)
+ local message,library=pcall(savedffiload,removesuffix(name))
+ if type(library)=="userdata" then
+ return library
+ else
+ return false
+ end
+ end
function ffilib(required,version)
- return locate(required,version,trace_ffilib,report_ffilib,function(name)
- local message,library=pcall(savedffiload,removesuffix(name))
- if type(library)=="userdata" then
- return message,library
- else
- return message,false
- end
- end)
+ if version=="system" then
+ return locateindeed(name)
+ else
+ return locate(required,version,trace_ffilib,report_ffilib,locateindeed)
+ end
end
function ffi.load(name)
local library=ffilib(name)
@@ -20204,8 +20243,8 @@ end -- of closure
-- used libraries : l-lua.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 855737
--- stripped bytes : 310443
+-- original bytes : 860167
+-- stripped bytes : 313517
-- end library merge