aboutsummaryrefslogtreecommitdiff
path: root/compatibility/2.4.nom
blob: e0d2e028d8c7300cdb8811068f68b5827accf95a (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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/env nomsu -V6.14
#
    This file defines upgrades from Nomsu <2.4 to Nomsu 2.4
    
use "compatibility/compatibility"

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

upgrade $tree to "2.4" as:
    unless ($tree is "Action" syntax tree): return
    if $tree.stub is:
        "when" "if":
            if ((size of $tree) == 3): return $tree
            $conditions = []
            $new_lines = []
            $body =
                ($tree.2 upgraded) if ($tree.2 is "Block" syntax tree) else [$tree.2 upgraded]
            
            for $line in $body:
                when:
                    (not ($line is "Action" syntax tree)):
                        $new_lines, add $line
                    
                    ($line.stub is "*"):
                        if ((size of $line) == 2):
                            $conditions, add $line.2
                        ..else:
                            $new_lines, add $line
                    
                    ($line.stub == "* else"):
                        $new_lines, add (\(else $block) with vars {.block = $line.3})
                    
                    else:
                        $conditions, add $line.2
                        $action = $line.3
                        unless ($action is "Block" syntax tree):
                            $action = (=lua "SyntaxTree{type='Block', source=\$action.source, \$action}")
                        $conditions, add $action
                        $new_lines, add
                            =lua ("
                                SyntaxTree{type='Action', source=\$conditions[1].source, unpack(\$conditions)}
                            ")
                        $conditions = []
            
            return
                \(when $body) with vars {
                    .body =
                        =lua "SyntaxTree{type='Block', source=\$tree[2].source, unpack(\$new_lines)}"
                }
        
        "if 1 is ?" "if 1 = ?":
            $values = []
            $new_lines = []
            $body =
                ($tree.5 upgraded) if ($tree.5 is "Block" syntax tree) else [$tree.5 upgraded]
            
            for $line in $body:
                when:
                    (not ($line is "Action" syntax tree)):
                        $new_lines, add $line
                    
                    ($line.stub is "*"):
                        if ((size of $line) == 2):
                            $values, add $line.2
                        ..else:
                            $new_lines, add $line
                    
                    ($line.stub == "* else"):
                        $new_lines, add (\(else $block) with vars {.block = $line.3})
                    
                    else:
                        $values, add $line.2
                        $action = $line.3
                        unless ($action is "Block" syntax tree): $action = \(: $action)
                        $values, add $action
                        $new_lines, add
                            =lua "SyntaxTree{type='Action', source=\$values[1].source, unpack(\$values)}"
                        $values = []
            
            return
                \(if $var is $body) with vars {
                    .var = ($tree.2 upgraded)
                    .body =
                        =lua "SyntaxTree{type='Block', source=\$tree[5].source, unpack(\$new_lines)}"
                }