1
0
Fork 0
mirror of https://github.com/Reuh/anselme.git synced 2025-10-27 16:49:31 +00:00

Branch serialization only keep current branch

This commit is contained in:
Étienne Fildadut 2024-01-03 17:46:29 +01:00
parent 82b68e09a3
commit 289f10b3c5
3 changed files with 19 additions and 3 deletions

View file

@ -4,7 +4,8 @@
local ast = require("anselme.ast")
local Branched = ast.abstract.Runtime {
local Branched
Branched = ast.abstract.Runtime {
type = "branched",
mutable = true,
@ -53,6 +54,16 @@ local Branched = ast.abstract.Runtime {
_eval = function(self, state)
return self:get(state)
end,
-- serialize/deserialize in current branch and discard other branches
_serialize = function(self)
local state = require("anselme.serializer_state")
return self:get(state)
end,
_deserialize = function(self)
local state = require("anselme.serializer_state")
return Branched:new(state, self)
end
}

View file

@ -114,13 +114,18 @@ State = class {
-- This can be loaded back later using `:load`.
save = function(self)
local struct = persistent_manager:get_struct(self)
return binser.serialize(anselme.versions.save, struct)
package.loaded["anselme.serializer_state"] = self
local r = binser.serialize(anselme.versions.save, struct)
package.loaded["anselme.serializer_state"] = nil
return r
end,
--- Load a string generated by `:save`.
--
-- Variables that already exist will be overwritten with the loaded data.
load = function(self, save)
package.loaded["anselme.serializer_state"] = self
local version, struct = binser.deserializeN(save, 2)
package.loaded["anselme.serializer_state"] = nil
if version ~= anselme.versions.save then print("Loading a save file generated by a different Anselme version, things may break!") end
for key, val in struct:iter() do
persistent_manager:set(self, key, val)

View file

@ -10,7 +10,7 @@ return {
{
"defined", "(c::function, s::string)",
function(state, c, s)
return Boolean:new(c.scope:defined_in_current_strict(state, s:to_identifier()))
return Boolean:new(c.scope:defined_in_current(state, s:to_identifier()))
end
},
{