mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 03:18:16 +00:00
refactor(loader): inline Loader.load into Loader.loadfile
This commit is contained in:
@@ -231,13 +231,30 @@ end
|
|||||||
--- `loadfile` using the cache
|
--- `loadfile` using the cache
|
||||||
--- Note this has the mode and env arguments which is supported by LuaJIT and is 5.1 compatible.
|
--- Note this has the mode and env arguments which is supported by LuaJIT and is 5.1 compatible.
|
||||||
---@param filename? string
|
---@param filename? string
|
||||||
---@param _mode? "b"|"t"|"bt"
|
---@param mode? "b"|"t"|"bt"
|
||||||
---@param env? table
|
---@param env? table
|
||||||
---@return function?, string? error_message
|
---@return function?, string? error_message
|
||||||
---@private
|
---@private
|
||||||
function Loader.loadfile(filename, _mode, env)
|
function Loader.loadfile(filename, mode, env)
|
||||||
-- ignore mode, since we byte-compile the Lua source files
|
local modpath = normalize(filename)
|
||||||
return Loader.load(normalize(filename), { env = env })
|
local hash = Loader.get_hash(modpath)
|
||||||
|
local cname = Loader.cache_file(modpath)
|
||||||
|
if hash then
|
||||||
|
local e_hash, e_chunk = Loader.read(cname)
|
||||||
|
if Loader.eq(e_hash, hash) and e_chunk then
|
||||||
|
-- found in cache and up to date
|
||||||
|
local chunk, err = load(e_chunk, '@' .. modpath, mode, env)
|
||||||
|
if not (err and err:find('cannot load incompatible bytecode', 1, true)) then
|
||||||
|
return chunk, err
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local chunk, err = Loader._loadfile(modpath, mode, env)
|
||||||
|
if chunk then
|
||||||
|
Loader.write(cname, hash, chunk)
|
||||||
|
end
|
||||||
|
return chunk, err
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Checks whether two cache hashes are the same based on:
|
--- Checks whether two cache hashes are the same based on:
|
||||||
@@ -255,40 +272,6 @@ function Loader.eq(a, b)
|
|||||||
and a.mtime.nsec == b.mtime.nsec
|
and a.mtime.nsec == b.mtime.nsec
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Loads the given module path using the cache
|
|
||||||
---@param modpath string
|
|
||||||
---@param opts? {mode?: "b"|"t"|"bt", env?:table} (table|nil) Options for loading the module:
|
|
||||||
--- - mode: (string) the mode to load the module with. "b"|"t"|"bt" (defaults to `nil`)
|
|
||||||
--- - env: (table) the environment to load the module in. (defaults to `nil`)
|
|
||||||
---@see |luaL_loadfile()|
|
|
||||||
---@return function?, string? error_message
|
|
||||||
---@private
|
|
||||||
function Loader.load(modpath, opts)
|
|
||||||
opts = opts or {}
|
|
||||||
local hash = Loader.get_hash(modpath)
|
|
||||||
if not hash then
|
|
||||||
-- trigger correct error
|
|
||||||
return Loader._loadfile(modpath, opts.mode, opts.env)
|
|
||||||
end
|
|
||||||
|
|
||||||
local cname = Loader.cache_file(modpath)
|
|
||||||
|
|
||||||
local e_hash, e_chunk = Loader.read(cname)
|
|
||||||
if Loader.eq(e_hash, hash) and e_chunk then
|
|
||||||
-- found in cache and up to date
|
|
||||||
local chunk, err = load(e_chunk, '@' .. modpath, opts.mode, opts.env)
|
|
||||||
if not (err and err:find('cannot load incompatible bytecode', 1, true)) then
|
|
||||||
return chunk, err
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local chunk, err = Loader._loadfile(modpath, opts.mode, opts.env)
|
|
||||||
if chunk then
|
|
||||||
Loader.write(cname, hash, chunk)
|
|
||||||
end
|
|
||||||
return chunk, err
|
|
||||||
end
|
|
||||||
|
|
||||||
--- Finds Lua modules for the given module name.
|
--- Finds Lua modules for the given module name.
|
||||||
---
|
---
|
||||||
--- @since 0
|
--- @since 0
|
||||||
@@ -501,7 +484,6 @@ function M._profile(opts)
|
|||||||
Loader.loader = Loader.track('loader', Loader.loader)
|
Loader.loader = Loader.track('loader', Loader.loader)
|
||||||
Loader.loader_lib = Loader.track('loader_lib', Loader.loader_lib)
|
Loader.loader_lib = Loader.track('loader_lib', Loader.loader_lib)
|
||||||
Loader.loadfile = Loader.track('loadfile', Loader.loadfile)
|
Loader.loadfile = Loader.track('loadfile', Loader.loadfile)
|
||||||
Loader.load = Loader.track('load', Loader.load)
|
|
||||||
M.find = Loader.track('find', M.find)
|
M.find = Loader.track('find', M.find)
|
||||||
Loader.lsmod = Loader.track('lsmod', Loader.lsmod)
|
Loader.lsmod = Loader.track('lsmod', Loader.lsmod)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user