33 lines
1.2 KiB
Plaintext
33 lines
1.2 KiB
Plaintext
maybe_update_key_in_definitions = function(old_definition_name, definition_name, node)
|
|
--print(old_definition_name, definition_name)
|
|
if old_definition_name ~= definition_name then
|
|
if old_definition_name == nil or Definitions[old_definition_name] ~= node then
|
|
local pos = array.find(Definitions, node)
|
|
--print('found at index', pos)
|
|
assert(pos)
|
|
table.remove(Definitions, pos)
|
|
for i,n in ipairs(Definitions) do n.key = i end
|
|
elseif Definitions[old_definition_name] == node then
|
|
--print('found at key', old_definition_name)
|
|
Definitions[old_definition_name] = nil
|
|
end
|
|
-- at this point we're sure node is no longer in Definitions
|
|
node.key = nil
|
|
if definition_name and Definitions[definition_name] == nil then
|
|
--print('moving to key', definition_name)
|
|
Definitions[definition_name] = node
|
|
node.key = definition_name
|
|
elseif definition_name == nil or Definitions[definition_name] then
|
|
-- temporary collision; try again later
|
|
-- deleting and reinserting is inefficient, but hopefully rare
|
|
--print('moving to index', #Definitions+1)
|
|
table.insert(Definitions, node)
|
|
node.key = #Definitions
|
|
end
|
|
--print('-- definition keys')
|
|
--for k in pairs(Definitions) do
|
|
--print(k)
|
|
--end
|
|
end
|
|
end
|