nomsu/compatibility/2.4.nom

71 lines
3.1 KiB
Plaintext

#!/usr/bin/env nomsu -V5.12.12.8
#
This file defines upgrades from Nomsu <2.4 to Nomsu 2.4
use "compatibility/compatibility.nom"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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)}"