aboutsummaryrefslogtreecommitdiff
path: root/compatibility/2.nom
blob: 5c78e294d980bd5bf31553b52476c26b4b3f68f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/env nomsu -V4.8.10
#
    This file defines upgrades from Nomsu 1 to Nomsu 2

use "compatibility/compatibility.nom"

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

upgrade %tree to "2" as:
    unless (%tree is "Action" syntax tree): return
    if (%tree.stub is "if 1 2 else"):
        %true_body = (%tree.3 upgraded)
        unless (%true_body is "Block" syntax tree):
            %true_body = \(: %true_body)
        %false_body = (%tree.5 upgraded)
        unless (%false_body is "Block" syntax tree):
            %false_body = (=lua "Block(\%false_body.source, \%false_body)")
        return (..)
            \(if %cond %true_body else %false_body) with vars {..}
                cond:%tree.2 upgraded, true_body:%true_body, false_body:%false_body
    
    %need_blocks = [..]
        "if", "unless", "for 1 in", "for 1 = 2 in", "repeat while 1"
        "repeat 1 times", "repeat", "repeat until 1", "for 1 in 2 to 3 by"
        "for 1 in 2 to 3 via", "for 1 in 2 to", "for 1 2 in"
        "do", "for 1 in recursive", "test", "with", "result of"
    
    for %n in %need_blocks:
        if (%tree.stub is %n):
            %bits = (((% upgraded) if (% is syntax tree) else %) for % in %tree)
            unless ((%bits::last) is "Block" syntax tree):
                %body = (%bits::last)
                %bits.(size of %bits) = (=lua "Block(\%body.source, \%body)")
            
            return (=lua "Action(\%tree.source, unpack(\%bits))")