Download
74 lines 3 KiBNomsuModified 2019-03-27 raw
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
#!/usr/bin/env nomsu -V7.0.0
###
    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 (#$tree == 3):
                return $tree
            $conditions = []
            $new_lines = []
            $body = ($tree.2 if ($tree.2 is "Block" syntax tree) else [$tree.2])
            for $line in $body:
                when:
                    (not ($line is "Action" syntax tree)):
                        $new_lines, add $line
                    
                    ($line.stub == "*"):
                        if (#$line == 2):
                            $conditions, add $line.2
                        ..else:
                            $new_lines, add $line
                    
                    ($line.stub == "* else"):
                        $new_lines, add \(else \$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 \("Block" tree from $tree.2.source with (unpack $new_lines)))
        
        "if 1 is ?" "if 1 = ?":
            $values = []
            $new_lines = []
            $body = ($tree.5 if ($tree.5 is "Block" syntax tree) else [$tree.5])
            for $line in $body:
                when:
                    (not ($line is "Action" syntax tree)):
                        $new_lines, add $line
                    
                    ($line.stub == "*"):
                        if (#$line == 2):
                            $values, add $line.2
                        ..else:
                            $new_lines, add $line
                    
                    ($line.stub == "* else"):
                        $new_lines, add \(else \$line.3)
                    
                    else:
                        $values, add $line.2
                        $action = $line.3
                        unless ($action is "Block" syntax tree):
                            $action = ("Block" tree with $action)
                        $values, add $action
                        $new_lines, add
                            =lua "SyntaxTree{type='Action', source=\$values[1].source, unpack(\$values)}"
                        $values = []
            
            return
                \(if \$tree.2 is \("Block" tree from $tree.5.source with (unpack $new_lines)))