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 ast = require("anselme.ast")
|
||||||
|
|
||||||
local Branched = ast.abstract.Runtime {
|
local Branched
|
||||||
|
Branched = ast.abstract.Runtime {
|
||||||
type = "branched",
|
type = "branched",
|
||||||
mutable = true,
|
mutable = true,
|
||||||
|
|
||||||
|
|
@ -53,6 +54,16 @@ local Branched = ast.abstract.Runtime {
|
||||||
|
|
||||||
_eval = function(self, state)
|
_eval = function(self, state)
|
||||||
return self:get(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
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -114,13 +114,18 @@ State = class {
|
||||||
-- This can be loaded back later using `:load`.
|
-- This can be loaded back later using `:load`.
|
||||||
save = function(self)
|
save = function(self)
|
||||||
local struct = persistent_manager:get_struct(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,
|
end,
|
||||||
--- Load a string generated by `:save`.
|
--- Load a string generated by `:save`.
|
||||||
--
|
--
|
||||||
-- Variables that already exist will be overwritten with the loaded data.
|
-- Variables that already exist will be overwritten with the loaded data.
|
||||||
load = function(self, save)
|
load = function(self, save)
|
||||||
|
package.loaded["anselme.serializer_state"] = self
|
||||||
local version, struct = binser.deserializeN(save, 2)
|
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
|
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
|
for key, val in struct:iter() do
|
||||||
persistent_manager:set(self, key, val)
|
persistent_manager:set(self, key, val)
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ return {
|
||||||
{
|
{
|
||||||
"defined", "(c::function, s::string)",
|
"defined", "(c::function, s::string)",
|
||||||
function(state, c, s)
|
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
|
end
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue