39 lines
1.6 KiB
Plaintext
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)}")
|