nomsu/compatibility/2.nom
Bruce Hill 0f0fb2256a Major overhaul of how modules and environments work, along with some
steamlining and tweaks to the makefile. Version bump: 6.14.13.8
2019-01-10 16:35:08 -08:00

39 lines
1.6 KiB
Plaintext

#!/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)}")