From: Steven Barth Date: Fri, 12 Sep 2008 07:48:36 +0000 (+0000) Subject: libs/core: Backported code optimizations X-Git-Tag: 0.8.0~93 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=8f8da32d7e1875bd7c1f03d43436cb5eb3f98a2f;p=oweals%2Fluci.git libs/core: Backported code optimizations --- diff --git a/libs/core/luasrc/ltn12.lua b/libs/core/luasrc/ltn12.lua index c9b663463..9371290c6 100644 --- a/libs/core/luasrc/ltn12.lua +++ b/libs/core/luasrc/ltn12.lua @@ -190,7 +190,7 @@ function source.rewind(src) if not chunk then return src() else return chunk end else - table.insert(t, chunk) + t[#t+1] = chunk end end end @@ -277,7 +277,7 @@ end function sink.table(t) t = t or {} local f = function(chunk, err) - if chunk then table.insert(t, chunk) end + if chunk then t[#t+1] = chunk end return 1 end return f, t diff --git a/libs/core/luasrc/util.lua b/libs/core/luasrc/util.lua index 177de43fb..678e36e41 100644 --- a/libs/core/luasrc/util.lua +++ b/libs/core/luasrc/util.lua @@ -60,6 +60,17 @@ end -- Class helper routines -- +-- Instantiates a class +local function _instantiate(class, ...) + local inst = setmetatable({}, {__index = class}) + + if inst.__init__ then + inst:__init__(...) + end + + return inst +end + --- Create a Class object (Python-style object model). -- The class object can be instantiated by calling itself. -- Any class functions or shared parameters can be attached to this object. @@ -75,26 +86,10 @@ end -- @see instanceof -- @see clone function class(base) - local class = {} - - local create = function(class, ...) - local inst = setmetatable({}, {__index = class}) - - if inst.__init__ then - inst:__init__(...) - end - - return inst - end - - local classmeta = {__call = create} - - if base then - classmeta.__index = base - end - - setmetatable(class, classmeta) - return class + return setmetatable({}, { + __call = _instantiate, + __index = base + }) end --- Test whether the given object is an instance of the given class. @@ -200,13 +195,13 @@ end -- @param value String value containing the data to escape -- @return String value containing the escaped data function pcdata(value) - if not value then return end - value = tostring(value) - value = value:gsub("&", "&") - value = value:gsub('"', """) - value = value:gsub("'", "'") - value = value:gsub("<", "<") - return value:gsub(">", ">") + return value and tostring(value):gsub("[&\"'<>]", { + ["&"] = "&", + ['"'] = """, + ["'"] = "'", + ["<"] = "<", + [">"] = ">" + }) end --- Strip HTML tags from given string. @@ -250,9 +245,9 @@ function split(str, pat, max, regex) local s, e = str:find(pat, c, not regex) max = max - 1 if s and max < 0 then - table.insert(t, str:sub(c)) + t[#t+1] = str:sub(c) else - table.insert(t, str:sub(c, s and s - 1)) + t[#t+1] = str:sub(c, s and s - 1) end c = e and e + 1 or #str + 1 until not s or max < 0 @@ -335,7 +330,7 @@ function combine(...) local result = {} for i, a in ipairs(arg) do for j, v in ipairs(a) do - table.insert(result, v) + result[#result+1] = v end end return result @@ -372,7 +367,7 @@ function keys(t) local keys = { } if t then for k, _ in kspairs(t) do - table.insert( keys, k ) + keys[#keys+1] = k end end return keys @@ -569,17 +564,16 @@ function _sortiter( t, f ) local keys = { } for k, v in pairs(t) do - table.insert( keys, k ) + keys[#keys+1] = k end local _pos = 0 - local _len = table.getn( keys ) table.sort( keys, f ) return function() _pos = _pos + 1 - if _pos <= _len then + if _pos <= #keys then return keys[_pos], t[keys[_pos]] end end @@ -658,7 +652,7 @@ function execl(command) while true do line = pp:read() if (line == nil) then break end - table.insert(data, line) + data[#data+1] = line end pp:close() diff --git a/libs/uci/luasrc/model/uci.lua b/libs/uci/luasrc/model/uci.lua index 8852d1e5f..2385cc37c 100644 --- a/libs/uci/luasrc/model/uci.lua +++ b/libs/uci/luasrc/model/uci.lua @@ -88,7 +88,7 @@ function Cursor.delete_all(self, config, stype, comparator) local function helper (section) if not comparator or comparator(section) then - table.insert(del, section[".name"]) + del[#del+1] = section[".name"] end end @@ -201,14 +201,14 @@ function Cursor._affected(self, configlist) function(section) if section.affects then for i, aff in ipairs(section.affects) do - table.insert(deps, aff) + deps[#deps+1] = aff end end end) for i, dep in ipairs(deps) do for j, add in ipairs(_resolve_deps(dep)) do - table.insert(reload, add) + reload[#reload+1] = add end end @@ -219,7 +219,7 @@ function Cursor._affected(self, configlist) for j, config in ipairs(configlist) do for i, e in ipairs(_resolve_deps(config)) do if not util.contains(reloadlist, e) then - table.insert(reloadlist, e) + reloadlist[#reloadlist+1] = e end end end diff --git a/libs/web/luasrc/template.lua b/libs/web/luasrc/template.lua index 4aa9b0933..dc6e5bb7d 100644 --- a/libs/web/luasrc/template.lua +++ b/libs/web/luasrc/template.lua @@ -63,7 +63,7 @@ function compile(template) -- Search all <% %> expressions local function expr_add(ws1, skip1, command, skip2, ws2) - table.insert(expr, command) + expr[#expr+1] = command return ( #skip1 > 0 and "" or ws1 ) .. "<%" .. tostring(#expr) .. "%>" .. ( #skip2 > 0 and "" or ws2 )