variable capture bug in match extension
[metalua.git] / src / samples / xmatch_test.mlua
blobde907e8cfca6f2a059a7d8b643f37b986d6d5b8d
1 -{ extension 'xmatch' }\r
2 \r
3 WIDTH=60\r
4 function p(msg) io.write(msg..' ':rep(WIDTH-#msg)) end\r
5 \r
6 ----------------------------------------------------------------------\r
7 p"match as an expression"\r
8 print(match 1 with 1 -> 'ok' | 2 -> 'KO')\r
9 \r
10 ----------------------------------------------------------------------\r
11 p "global match function"\r
12 match function g\r
13 | x if x<10 -> return 'o'\r
14 | _         -> return 'k'\r
15 end\r
16 print(g(1)..g(11))\r
18 ----------------------------------------------------------------------\r
19 p "global match function, multi-args"\r
20 match function cmp\r
21 | x, y if x<y -> return 'increasing'\r
22 | _, _        -> return 'decreasing'\r
23       end\r
25 if cmp(1,2)=='increasing' and cmp(2,1)=='decreasing' then\r
26    print "ok" else print "KO"\r
27 end\r
29 ----------------------------------------------------------------------\r
30 p "local match function"\r
31 do\r
32    local match function x\r
33    | 1 -> print 'ok'\r
34    end\r
35    x(1)\r
36 end\r
37 assert(not x)\r
39 ----------------------------------------------------------------------\r
40 p "global bind assignment"\r
41 bind {a, b} = {'o', 'k'}\r
42 print(a..b)\r
44 ----------------------------------------------------------------------\r
45 p "local bind assignment"\r
46 c, d = 'k', 'o'\r
47 do\r
48    local bind {c, {d}} = {'o', {'k'}}\r
49    print(c..d)\r
50 end\r
52 ----------------------------------------------------------------------\r
53 p "local bind assignment scope"\r
54 print(d..c)\r