aboutsummaryrefslogtreecommitdiff
path: root/nomsu_environment.lua
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2019-02-06 15:33:10 -0800
committerBruce Hill <bruce@bruce-hill.com>2019-02-06 15:34:00 -0800
commit057f5b74ebb7851f6ba824129b3e3316cae23260 (patch)
tree2561ca637f5db834cb8f8b82831cbbbbc26d71ae /nomsu_environment.lua
parent618e48ad98c0e2b36eb22c75251dddc141d822e6 (diff)
Moving to better, more centralized versioning system. Now the Nomsu
version is just defined as a list at the top of nomsu.moon, and uses X.Y.Z form instead of X.Y.Z.W. Added a ([...], from 2) method and a ([...], up to 5) method, and fixed a few upgrade bugs.
Diffstat (limited to 'nomsu_environment.lua')
-rw-r--r--nomsu_environment.lua15
1 files changed, 5 insertions, 10 deletions
diff --git a/nomsu_environment.lua b/nomsu_environment.lua
index 8573179..08993ea 100644
--- a/nomsu_environment.lua
+++ b/nomsu_environment.lua
@@ -23,8 +23,7 @@ make_tree = function(tree, userdata)
return tree
end
local Parsers = { }
-local max_parser_version = 0
-for version = 1, 999 do
+for version = 1, NOMSU_VERSION[1] do
local peg_file
if package.nomsupath then
local pegpath = package.nomsupath:gsub("lib/%?%.nom", "?.peg"):gsub("lib/%?%.lua", "?.peg")
@@ -37,10 +36,7 @@ for version = 1, 999 do
else
peg_file = io.open("nomsu." .. tostring(version) .. ".peg")
end
- if not (peg_file) then
- break
- end
- max_parser_version = version
+ assert(peg_file, "No PEG file found for Nomsu version " .. tostring(version))
local peg_contents = peg_file:read('*a')
peg_file:close()
Parsers[version] = make_parser(peg_contents, make_tree)
@@ -87,8 +83,6 @@ _1_as_list = function(x)
end
local nomsu_environment
nomsu_environment = Importer({
- NOMSU_COMPILER_VERSION = 13,
- NOMSU_SYNTAX_VERSION = max_parser_version,
next = next,
unpack = unpack or table.unpack,
setmetatable = setmetatable,
@@ -171,8 +165,9 @@ nomsu_environment = Importer({
if syntax_version then
syntax_version = tonumber(syntax_version:match("^[0-9]+"))
end
- syntax_version = syntax_version or (version and tonumber(version:match("^[0-9]+")) or max_parser_version)
- local parse = Parsers[syntax_version] or Parsers[max_parser_version]
+ syntax_version = syntax_version or (version and tonumber(version:match("^[0-9]+")) or NOMSU_VERSION[1])
+ local parse = Parsers[syntax_version]
+ assert(parse, "No parser found for Nomsu syntax version " .. tostring(syntax_version))
local tree = parse(nomsu_code, source.filename)
if tree.shebang then
tree.version = tree.version or tree.shebang:match("nomsu %-V[ ]*([%d.]*)")