about summary refs log tree commit diff stats
path: root/util.lua
diff options
context:
space:
mode:
authorCase Duckworth2024-04-02 21:04:32 -0500
committerCase Duckworth2024-04-02 21:04:32 -0500
commit2a5c0883ca907e97110ea0050080f74ccbb143e2 (patch)
tree073105fcdeba619db38aa40e467dfe88973fb45c /util.lua
parentHandle dotted lambda-lists and symbols (diff)
downloadlam-2a5c0883ca907e97110ea0050080f74ccbb143e2.tar.gz
lam-2a5c0883ca907e97110ea0050080f74ccbb143e2.zip
Change arity assertion code
Diffstat (limited to 'util.lua')
-rw-r--r--util.lua31
1 files changed, 8 insertions, 23 deletions
diff --git a/util.lua b/util.lua index d151858..8fedbf7 100644 --- a/util.lua +++ b/util.lua
@@ -7,29 +7,14 @@ function m.pop (tbl)
7 return table.remove(tbl, 1) 7 return table.remove(tbl, 1)
8end 8end
9 9
10function m.proc (arity, fn) 10function m.assert_arity (r, min, max)
11 --[[ Wrap RN in a check that for its ARITY. 11 local rmin = min or 0
12 ARITY can be a number, the minimum number of arguments, 12 local rmax = max or 1/0 -- infinity
13 or a table {MIN, MAX}. If MIN is nil or absent, it's 0; 13 local rlen = #r
14 if MAX is nil or absent, it's infinity. MIN and MAX are 14 if rlen < rmin or rlen > rmax then
15 both inclusive. 15 error(string.format("Wrong arity: %s; expecting %s",
16 ]] 16 rlen,
17 local rmin, rmax, rstr 17 rmin == rmax and rmin or (rmin..".."..rmax)))
18 if type(arity) ~= "table" then
19 rmin, rmax = arity, arity
20 rstr = rmin
21 else
22 rmin, rmax = arity[1] or 0, arity[2] or 1/0 -- infinity
23 rstr = rmin .. ".." .. rmax
24 end
25 return function (r)
26 local rlen = r and #r or 0
27 if rlen < rmin or rlen > rmax then
28 error(string.format("Wrong arity: %s, need %s",
29 rlen,
30 rstr))
31 end
32 return fn(r)
33 end 18 end
34end 19end
35 20