code / nomsu

Lines6.6K Lua5.1K PEG1.3K make117
2 others 83
Markdown60 Bourne Again Shell23
(75 lines)
1 #!/usr/bin/env nomsu -V7.0.0
2 ###
3 This file defines upgrades from Nomsu <2.4 to Nomsu 2.4
5 use "compatibility/compatibility"
7 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9 upgrade $tree to "2.4" as:
10 unless ($tree is "Action" syntax tree): return
11 if $tree.stub is:
12 "when" "if":
13 if (#$tree == 3):
14 return $tree
15 $conditions = []
16 $new_lines = []
17 $body = ($tree.2 if ($tree.2 is "Block" syntax tree) else [$tree.2])
18 for $line in $body:
19 when:
20 (not ($line is "Action" syntax tree)):
21 $new_lines, add $line
23 ($line.stub == "*"):
24 if (#$line == 2):
25 $conditions, add $line.2
26 ..else:
27 $new_lines, add $line
29 ($line.stub == "* else"):
30 $new_lines, add \(else \$line.3)
32 else:
33 $conditions, add $line.2
34 $action = $line.3
35 unless ($action is "Block" syntax tree):
36 $action = (=lua "SyntaxTree{type='Block', source=\$action.source, \$action}")
37 $conditions, add $action
38 $new_lines, add
39 =lua ("
40 SyntaxTree{type='Action', source=\$conditions[1].source, unpack(\$conditions)}
41 ")
42 $conditions = []
44 return \(when \("Block" tree from $tree.2.source with (unpack $new_lines)))
46 "if 1 is ?" "if 1 = ?":
47 $values = []
48 $new_lines = []
49 $body = ($tree.5 if ($tree.5 is "Block" syntax tree) else [$tree.5])
50 for $line in $body:
51 when:
52 (not ($line is "Action" syntax tree)):
53 $new_lines, add $line
55 ($line.stub == "*"):
56 if (#$line == 2):
57 $values, add $line.2
58 ..else:
59 $new_lines, add $line
61 ($line.stub == "* else"):
62 $new_lines, add \(else \$line.3)
64 else:
65 $values, add $line.2
66 $action = $line.3
67 unless ($action is "Block" syntax tree):
68 $action = ("Block" tree with $action)
69 $values, add $action
70 $new_lines, add
71 =lua "SyntaxTree{type='Action', source=\$values[1].source, unpack(\$values)}"
72 $values = []
74 return
75 \(if \$tree.2 is \("Block" tree from $tree.5.source with (unpack $new_lines)))