util.paths: Optimize path joining with few arguments
A casual search suggests that the majority of paths.join() calls involve
only two arguments. This saves the creation of a table for up to 3
arguments.
Looks like 3x faster for 3 arguments or less, 5% slower when it uses the
array to concatenate.
--- a/util/paths.lua Sat Oct 17 19:24:44 2020 +0200
+++ b/util/paths.lua Sun Oct 11 23:04:13 2020 +0200
@@ -37,8 +37,18 @@
end).."$";
end
-function path_util.join(...)
- return t_concat({...}, path_sep);
+function path_util.join(a, b, c, ...) -- (... : string) --> string
+ -- Optimization: Avoid creating table for most uses
+ if b then
+ if c then
+ if ... then
+ return t_concat({a,b,c,...}, path_sep);
+ end
+ return a..path_sep..b..path_sep..c;
+ end
+ return a..path_sep..b;
+ end
+ return a;
end
function path_util.complement_lua_path(installer_plugin_path)