1
0
mirror of https://github.com/natnat-mc/moonbuild synced 2026-05-28 04:59:41 +02:00
Files
moonbuild/moonbuild/fscache.moon
T
2020-09-14 11:08:04 +02:00

34 lines
564 B
MoonScript

import attributes, dir from require 'lfs'
unpack or= table.unpack
FROZEN = ->
makecached = (fn) ->
cache = {}
invalidate = (val) ->
cache[val] = nil
freeze = (val) ->
cache[val] = FROZEN
clear = ->
cache = {}
get = (val) ->
cached = cache[val]
if cached!=FROZEN and cached!=nil
return unpack cached
ret = {fn val}
if cached!=FROZEN
cache[val] = ret
unpack ret
setmetatable { :get, :invalidate, :freeze, :clear },
__call: (val) => get val
{
attributes: makecached attributes
dir: makecached (file) -> [k for k in dir file]
}