From 6ba79a8ff1015c3d2b5c28bc61c27275f5abc2af Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Tue, 31 Oct 2017 16:19:08 -0700 Subject: Added support for serializing rules. --- nomsu.lua | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'nomsu.lua') diff --git a/nomsu.lua b/nomsu.lua index b00560c..055c8a2 100644 --- a/nomsu.lua +++ b/nomsu.lua @@ -242,6 +242,7 @@ do assert(type(thunk) == 'function', "Bad thunk: " .. tostring(repr(thunk))) local canonical_args = nil local aliases = { } + self.def_number = self.def_number + 1 for _index_0 = 1, #signature do local _des_0 = signature[_index_0] local stub, arg_names @@ -269,13 +270,33 @@ do arg_names = arg_names, src = src, is_macro = is_macro, - aliases = aliases + aliases = aliases, + def_number = self.def_number } end end, defmacro = function(self, signature, thunk, src) return self:def(signature, thunk, src, true) end, + serialize_defs = function(self, after) + if after == nil then + after = 0 + end + defs = { } + for _, def in pairs(self.defs) do + defs[def.def_number] = def.src or "" + end + local keys = utils.keys(defs) + table.sort(keys) + local buff = { } + for _index_0 = 1, #keys do + local i = keys[_index_0] + if i > after and #defs[i] > 0 then + insert(buff, defs[i]) + end + end + return concat(buff, "\n") + end, call = function(self, stub, line_no, ...) local def = self.defs[stub] if def and def.is_macro and self.callstack[#self.callstack] ~= "#macro" then @@ -1063,6 +1084,7 @@ end)]]):format(concat(lua_bits, "\n")) self.defs = setmetatable({ }, { __index = parent and parent.defs }) + self.def_number = 0 self.callstack = { } self.debug = false self.utils = utils -- cgit v1.2.3