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:
parent
82b68e09a3
commit
289f10b3c5
3 changed files with 19 additions and 3 deletions
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
},
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue