@@ -11,25 +11,42 @@ function M.line_end(line_to_cursor)
11
11
end
12
12
13
13
local memoization_mt = {
14
- __unm = function (o1 ) return function () return not o1 () end end ,
15
- __add = function (o1 ,o2 ) return function () return o1 () or o2 () end end ,
16
- __mul = function (o1 ,o2 ) return function () return o1 () and o2 () end end ,
14
+ __unm = function (o1 )
15
+ return function ()
16
+ return not o1 ()
17
+ end
18
+ end ,
19
+ __add = function (o1 , o2 )
20
+ return function ()
21
+ return o1 () or o2 ()
22
+ end
23
+ end ,
24
+ __mul = function (o1 , o2 )
25
+ return function ()
26
+ return o1 () and o2 ()
27
+ end
28
+ end ,
17
29
-- TODO more logic operators
18
30
__call = function (tab )
19
31
if not tab .mem or tab .invalidate (tab ) then
20
32
tab .mem = tab .func ()
21
33
end
22
34
return tab .mem
23
- end
35
+ end ,
24
36
}
25
37
-- low level factory
26
38
-- invalidate(table) -> bool: decides if the memoization should be invalidated,
27
39
-- can store state in table
28
40
-- TODO provide invalidate defaults (buffer, cursor, changes, none)
29
41
function M .memoization_factory (func , invalidate )
30
42
-- always invalidare by default
31
- invalidate = invalidate or function () return true end
32
- return setmetatable ({func = func , invalidate = invalidate }, memoization_mt )
43
+ invalidate = invalidate or function ()
44
+ return true
45
+ end
46
+ return setmetatable (
47
+ { func = func , invalidate = invalidate },
48
+ memoization_mt
49
+ )
33
50
end
34
51
35
52
-- F1 = memoization_factory(function() return true end)
0 commit comments