From 803d1093bbb941419f26fd8cbf284f1e7f35e059 Mon Sep 17 00:00:00 2001 From: Codinget Date: Tue, 1 Dec 2020 22:05:04 +0100 Subject: [PATCH] added table syntax for var, closes #19 --- Build.moon | 22 +++++++++++----------- moonbuild/core/Variable.moon | 12 +++++++++++- moonbuild/env/init.moon | 2 +- out/moonbuild.lua | 20 ++++++++++++++++++-- 4 files changed, 41 insertions(+), 15 deletions(-) diff --git a/Build.moon b/Build.moon index 8364903..1018365 100644 --- a/Build.moon +++ b/Build.moon @@ -1,17 +1,17 @@ -public var 'MOONC', 'moonc' -public var 'AMALG', 'amalg.lua' -public var 'RM', 'rm', '-f', '--' -public var 'LUA', 'lua5.3' +public var MOONC: 'moonc' +public var AMALG: 'amalg.lua' +public var RM: 'rm', '-f', '--' +public var LUA: 'lua5.3' -var 'LIB_SRC', _.wildcard 'moonbuild/**.moon' -var 'BIN_SRC', _.wildcard 'bin/*.moon' +var LIB_SRC: _.wildcard 'moonbuild/**.moon' +var BIN_SRC: _.wildcard 'bin/*.moon' -var 'LIB_LUA', _.patsubst LIB_SRC, '%.moon', '%.lua' -var 'BIN_LUA', _.patsubst BIN_SRC, '%.moon', '%.lua' -var 'BIN', _.patsubst BIN_LUA, 'bin/%.lua', 'out/%' -var 'LIB', 'out/moonbuild.lua' +var LIB_LUA: _.patsubst LIB_SRC, '%.moon', '%.lua' +var BIN_LUA: _.patsubst BIN_SRC, '%.moon', '%.lua' +var BIN: _.patsubst BIN_LUA, 'bin/%.lua', 'out/%' +var LIB: 'out/moonbuild.lua' -var 'MODULES', _.foreach (_.patsubst LIB_LUA, '%.lua', '%'), => @gsub '/', '.' +var MODULES: _.foreach (_.patsubst LIB_LUA, '%.lua', '%'), => @gsub '/', '.' with public default target 'all' \after 'bin' diff --git a/moonbuild/core/Variable.moon b/moonbuild/core/Variable.moon index b1c0e4a..0285841 100644 --- a/moonbuild/core/Variable.moon +++ b/moonbuild/core/Variable.moon @@ -4,7 +4,17 @@ class Variable new: (@name, ...) => @public = false - if (select '#', ...) !=1 or (type ...) == 'table' + if (type @name) == 'table' + error "not a valid var table: #{next @name}" unless (type next @name) == 'string' + error "more than one var at once: #{next @name}, #{next @name, (next @name)}" if next @name, (next @name) + name = next @name + @name, param = name, @name + val = param[name] + if (select '#', ...) !=0 or (type val) == 'table' + @value = flatten val, ... + else + @value = val + elseif (select '#', ...) !=1 or (type ...) == 'table' @value = flatten ... else @value = ... diff --git a/moonbuild/env/init.moon b/moonbuild/env/init.moon index 588fbc0..04e6dad 100644 --- a/moonbuild/env/init.moon +++ b/moonbuild/env/init.moon @@ -21,7 +21,7 @@ import flatten from _ rawset env, 'var', (name, ...) -> var = Variable name, ... ctx\addvar var - rawset varlayer, name, var.value + rawset varlayer, var.name, var.value var rawset env, 'target', (name, opts) -> diff --git a/out/moonbuild.lua b/out/moonbuild.lua index fa0ee4c..d22a888 100644 --- a/out/moonbuild.lua +++ b/out/moonbuild.lua @@ -2227,7 +2227,23 @@ do __init = function(self, name, ...) self.name = name self.public = false - if (select('#', ...)) ~= 1 or (type(...)) == 'table' then + if (type(self.name)) == 'table' then + if not ((type(next(self.name))) == 'string') then + error("not a valid var table: " .. tostring(next(self.name))) + end + if next(self.name, (next(self.name))) then + error("more than one var at once: " .. tostring(next(self.name)) .. ", " .. tostring(next(self.name, (next(self.name))))) + end + name = next(self.name) + local param + self.name, param = name, self.name + local val = param[name] + if (select('#', ...)) ~= 0 or (type(val)) == 'table' then + self.value = flatten(val, ...) + else + self.value = val + end + elseif (select('#', ...)) ~= 1 or (type(...)) == 'table' then self.value = flatten(...) else self.value = ... @@ -2545,7 +2561,7 @@ return function(ctx) rawset(env, 'var', function(name, ...) local var = Variable(name, ...) ctx:addvar(var) - rawset(varlayer, name, var.value) + rawset(varlayer, var.name, var.value) return var end) rawset(env, 'target', function(name, opts)