diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2019-01-14 17:14:34 -0800 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2019-01-14 17:14:57 -0800 |
| commit | ddef8be3df626d63f6e575d4c1416295a22371ad (patch) | |
| tree | 78af9584447b085f06d6412d2cc20137a460848b /lib/compatibility/2.nom | |
| parent | 9fceff7e785bb234971b443809eef3da9051c598 (diff) | |
Moved compatibility to lib/ and fixed path searching for .peg files.
Diffstat (limited to 'lib/compatibility/2.nom')
| -rw-r--r-- | lib/compatibility/2.nom | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/compatibility/2.nom b/lib/compatibility/2.nom new file mode 100644 index 0000000..caf7a86 --- /dev/null +++ b/lib/compatibility/2.nom @@ -0,0 +1,38 @@ +#!/usr/bin/env nomsu -V6.14 +# + This file defines upgrades from Nomsu 1 to Nomsu 2 + +use "compatibility/compatibility" + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +upgrade $tree to "2" as: + unless ($tree is "Action" syntax tree): return + if ($tree.stub is "if 1 2 else"): + $true_body = ($tree.3 upgraded) + unless ($true_body is "Block" syntax tree): + $true_body = \(: $true_body) + $false_body = ($tree.5 upgraded) + unless ($false_body is "Block" syntax tree): + $false_body = (=lua "Block(\$false_body.source, \$false_body)") + + return + \(if $cond $true_body else $false_body) with vars { + .cond = ($tree.2 upgraded), .true_body = $true_body, .false_body = $false_body + } + + $need_blocks = [ + "if", "unless", "for 1 in", "for 1 = 2 in", "repeat while 1", "repeat 1 times" + "repeat", "repeat until 1", "for 1 in 2 to 3 by", "for 1 in 2 to 3 via" + "for 1 in 2 to", "for 1 2 in", "do", "for 1 in recursive", "test", "with", "result of" + "when" + ] + + for $n in $need_blocks: + if ($tree.stub is $n): + $bits = [: for $ in $tree: add (($ upgraded) if ($ is syntax tree) else $)] + unless (($bits, last) is "Block" syntax tree): + $body = ($bits, last) + $bits.(size of $bits) = + =lua "SyntaxTree{type='Block', source=\$body.source, \$body}" + return (=lua "SyntaxTree{type='Action', source=\$tree.source, unpack(\$bits)}") |
