#!/usr/bin/env nomsu -V1 use "core" use "lib/os.nom" %UPGRADES <- {} action [upgrade to %version via %upgrade_fn] %UPGRADES.%version <- %upgrade_fn parse [upgrade %tree to %version as %body] as upgrade to %version via ([%] -> (% with %tree -> %body)) action [%tree upgraded from %start_version to %end_version, %tree upgraded to %end_version from %start_version] local action [%ver as list] (% as number) for % where %ver matches "[0-9]+" %versions <-: (keys in %UPGRADES) sorted by % -> (% as list) for %ver in %versions if: (%ver as list) <= (%start_version as list) do next %ver if: (%ver as list) > (%end_version as list) stop %ver %tree <- (call %UPGRADES.%ver with [%tree]) return %tree ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ parse [%tree upgraded from %start_version] as: %tree upgraded from %start_version to (Nomsu version) parse [%tree upgraded to %end_version] as: %tree upgraded from %tree.version to %end_version parse [%tree upgraded] as: %tree upgraded from %tree.version to (Nomsu version) action [use %path from version %version] for file %filename in %path if (=lua "LOADED[\%filename]") do next %filename %file <-: read file %filename %tree <-: parse %file from %filename %tree <-: upgrade %tree from %version run tree %tree