aboutsummaryrefslogtreecommitdiff
path: root/compatibility/2.nom
blob: b4b0efd6238c87ed0abf3850f650eb306dfd5a37 (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
36
37
38
#!/usr/bin/env nomsu -V6.12.12.8
#
    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"
        "when"
    ]
    
    for $n in $need_blocks:
        if ($tree.stub is $n):
            $bits = [: for $ in $tree: add (($ upgraded) if ($ is syntax tree) else $)]
            unless (($bits, last) is "Block" syntax tree):
                $body = ($bits, last)
                $bits.(size of $bits) =
                    =lua "SyntaxTree{type='Block', source=\$body.source, \$body}"
            return (=lua "SyntaxTree{type='Action', source=\$tree.source, unpack(\$bits)}")