mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 02:34:59 -07:00
Merge 329a6d82cb
into 02bc40c194
This commit is contained in:
commit
304e5d0f8d
@ -120,21 +120,33 @@ local function cache_filename(name)
|
|||||||
return ret:sub(-4) == '.lua' and (ret .. 'c') or (ret .. '.luac')
|
return ret:sub(-4) == '.lua' and (ret .. 'c') or (ret .. '.luac')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local writing = {} --- @type table<string,function>
|
||||||
|
|
||||||
--- Saves the cache entry for a given module or file
|
--- Saves the cache entry for a given module or file
|
||||||
--- @param cname string cache filename
|
--- @param cname string cache filename
|
||||||
--- @param hash vim.loader.CacheHash
|
--- @param hash vim.loader.CacheHash
|
||||||
--- @param chunk function
|
--- @param chunk function
|
||||||
local function write_cachefile(cname, hash, chunk)
|
local function write_cachefile(cname, hash, chunk)
|
||||||
local f = assert(uv.fs_open(cname, 'w', 438))
|
if writing[cname] then
|
||||||
local header = {
|
return
|
||||||
VERSION,
|
end
|
||||||
hash.size,
|
|
||||||
hash.mtime.sec,
|
writing[cname] = chunk
|
||||||
hash.mtime.nsec,
|
uv.fs_open(cname, 'w', 438, function(err, f)
|
||||||
}
|
if err then
|
||||||
uv.fs_write(f, table.concat(header, ',') .. '\0')
|
error(err)
|
||||||
uv.fs_write(f, string.dump(chunk))
|
end
|
||||||
uv.fs_close(f)
|
local header = {
|
||||||
|
VERSION,
|
||||||
|
hash.size,
|
||||||
|
hash.mtime.sec,
|
||||||
|
hash.mtime.nsec,
|
||||||
|
}
|
||||||
|
uv.fs_write(f, table.concat(header, ',') .. '\0')
|
||||||
|
uv.fs_write(f, string.dump(chunk))
|
||||||
|
uv.fs_close(f)
|
||||||
|
writing[cname] = nil
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- @param path string
|
--- @param path string
|
||||||
@ -255,6 +267,10 @@ local function loadfile_cached(filename, mode, env)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if writing[cname] then
|
||||||
|
return writing[cname]
|
||||||
|
end
|
||||||
|
|
||||||
local chunk, err = _loadfile(modpath, mode, env)
|
local chunk, err = _loadfile(modpath, mode, env)
|
||||||
if chunk and stat then
|
if chunk and stat then
|
||||||
write_cachefile(cname, stat, chunk)
|
write_cachefile(cname, stat, chunk)
|
||||||
|
Loading…
Reference in New Issue
Block a user