libs/core: Backported code optimizations
authorSteven Barth <steven@midlink.org>
Fri, 12 Sep 2008 07:48:36 +0000 (07:48 +0000)
committerSteven Barth <steven@midlink.org>
Fri, 12 Sep 2008 07:48:36 +0000 (07:48 +0000)
libs/core/luasrc/ltn12.lua
libs/core/luasrc/util.lua
libs/uci/luasrc/model/uci.lua
libs/web/luasrc/template.lua

index c9b6634..9371290 100644 (file)
@@ -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
index 177de43..678e36e 100644 (file)
@@ -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("&", "&amp;")
-       value = value:gsub('"', "&quot;")
-       value = value:gsub("'", "&apos;")
-       value = value:gsub("<", "&lt;")
-       return value:gsub(">", "&gt;")
+       return value and tostring(value):gsub("[&\"'<>]", {
+               ["&"] = "&amp;",
+               ['"'] = "&quot;",
+               ["'"] = "&apos;",
+               ["<"] = "&lt;",
+               [">"] = "&gt;"
+       })
 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()
 
index 8852d1e..2385cc3 100644 (file)
@@ -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
index 4aa9b09..dc6e5bb 100644 (file)
@@ -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 )