aboutsummaryrefslogtreecommitdiff
path: root/lib/compatibility/2.4.nom
diff options
context:
space:
mode:
Diffstat (limited to 'lib/compatibility/2.4.nom')
-rw-r--r--lib/compatibility/2.4.nom85
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)}"
+ }