variable capture bug in match extension
[metalua.git] / src / samples / h_test.mlua
blobb8cdb53038843fb9af0e29bbe392507f3ee932f3
1 -{ extension 'log' }
2 -{ extension  'H'  }
4 require 'metalua.compiler'
6 TEST_CASES = { 
8    {  "everything should be renamed",
9       +{ block: 
10          local x = 3
11          print(x) },
12       { } }, 
14   {  "don't get confused between global and local x",
15      +{ block: 
16         print(x)
17         local x = 3
18         print(x) },
19      { alpha = { } } },
21   {  "don't rename keepme",
22      +{ block:
23         keepme()
24         dont_keep_me() },
25      { keep = 'keepme' , alpha = `Local{ { }, { } } } },
27   {  "print shouldn't be renamed the 2nd and 3rd time",
28      +{ block:
29         print(i)
30         -{!`Call{`Id 'print', `String 'hi' } } 
31         -{!+{print 'hi'}} },
32      { } },
34   {  "print shouldn't be renamed at all",
35      +{ block: 
36         print(i)
37         -{`Call{`Id 'print', `String 'hi' } }
38         -{+{print 'hi'}} },
39      { keep = 'print' } },
41   {  "Rename print with a pre-specified name, rename x freely, not y",
42      +{ block: 
43         print (x, y) },
44      {  alpha = +{stat: local RENAMED_PRINT = print}, 
45         keep  = {y = true} } } } 
47 for case in ivalues(TEST_CASES) do
48    local comment, ast, cfg = unpack(case)
49    print ('\n'..'-':rep(70))
50    print (comment)
51    local H = H:new(cfg)
52    print ("\nBEFORE PARSING:")
53    $log (ast, H, 50)
54    H(ast)
55    print ("\nAFTER PARSING:")
56    $log (ast, H, 50)
57 end
59 print ('\n'..'=':rep(70))
60 $log(TEST_CASES,40)