diff options
Diffstat (limited to 'lib/compatibility/2.4.nom')
| -rw-r--r-- | lib/compatibility/2.4.nom | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/lib/compatibility/2.4.nom b/lib/compatibility/2.4.nom new file mode 100644 index 0000000..e0d2e02 --- /dev/null +++ b/lib/compatibility/2.4.nom @@ -0,0 +1,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)}" + } |
