diff --git a/anselme/ast/Branched.lua b/anselme/ast/Branched.lua index 6f868b2..c4c5108 100644 --- a/anselme/ast/Branched.lua +++ b/anselme/ast/Branched.lua @@ -37,8 +37,8 @@ Branched = ast.abstract.Runtime { if val and state.source_branch then self.value[state.source_branch.branch_id] = val self.value[state.branch_id] = nil - val:merge(state, cache) end + self:get(state):merge(state, cache) end, _format = function(self, state, ...) diff --git a/anselme/ast/Environment.lua b/anselme/ast/Environment.lua index cbff40b..7a9364a 100644 --- a/anselme/ast/Environment.lua +++ b/anselme/ast/Environment.lua @@ -57,6 +57,7 @@ local VariableMetadata = ast.abstract.Runtime { end, _merge = function(self, state, cache) + self.symbol:merge(state, cache) if not self.symbol.confined_to_branch then self.branched:merge(state, cache) end diff --git a/anselme/ast/abstract/Node.lua b/anselme/ast/abstract/Node.lua index 57f0093..add4d48 100644 --- a/anselme/ast/abstract/Node.lua +++ b/anselme/ast/abstract/Node.lua @@ -288,10 +288,11 @@ Node = class { if not cache[self] then cache[self] = true self:_merge(state, cache) - self:traverse(traverse.merge, state, cache) end end, - _merge = function(self, state, cache) end, + _merge = function(self, state, cache) + self:traverse(traverse.merge, state, cache) + end, -- return string that uniquely represent this node -- the actual hash is computed in :_hash, don't redefine :hash directly