reorg

[?]
Apr 15, 2023, 5:14 PM
NVEA3SMUPTZBTM76PANXZON47KVZ4KVIDOZCP5NQQKJ2OI22JX2AC

Dependencies

  • [2] WYKKFV2G prevent overriding foundational definitions
  • [3] LRDM35CE app running again
  • [4] TBWAE64A app is now live, can communicate with driver
  • [5] QFURHRTP rename globals to have a single uppercase letter
  • [6] T3RKP4IJ clarify a comment

Change contents

  • edit in live.lua at line 43
    [3.2048][2.54:1075]()
    end
    -- Everything that exists before we start loading the live files is frozen and
    -- can't be edited live.
    function live.freeze_all_existing_definitions()
    Live.frozen_definitions = {on=true} -- special case for version 1
    local done = {}
    done[Live.frozen_definitions]=true
    live.freeze_all_existing_definitions_in(_G, {}, done)
    end
    function live.freeze_all_existing_definitions_in(tab, scopes, done)
    -- track duplicates to avoid cycles like _G._G, _G._G._G, etc.
    if done[tab] then return end
    done[tab] = true
    for name,binding in pairs(tab) do
    local full_name = live.full_name(scopes, name)
    --? print(full_name)
    Live.frozen_definitions[full_name] = true
    if type(binding) == 'table' and full_name ~= 'package' then -- var 'package' contains copies of all modules, but not the best name; rely on people to not modify package.loaded.io.open, etc.
    table.insert(scopes, name)
    live.freeze_all_existing_definitions_in(binding, scopes, done)
    table.remove(scopes)
    end
    end
  • edit in live.lua at line 45
    [2.1080][2.1080:1215](),[2.1215][3.2048:2053](),[3.2048][3.2048:2053]()
    function live.full_name(scopes, name)
    local ns = table.concat(scopes, '.')
    if #ns == 0 then return name end
    return ns..'.'..name
    end
  • edit in live.lua at line 332
    [3.8844]
    [3.8844]
    -- === infrastructure for performing various safety checks on any new definition
  • replacement in live.lua at line 335
    [3.8845][3.8845:8904]()
    -- ========= on error, pause the app and wait for messages
    [3.8845]
    [3.9011]
    -- Everything that exists before we start loading the live files is frozen and
    -- can't be edited live.
    function live.freeze_all_existing_definitions()
    Live.frozen_definitions = {on=true} -- special case for version 1
    local done = {}
    done[Live.frozen_definitions]=true
    live.freeze_all_existing_definitions_in(_G, {}, done)
    end
    function live.freeze_all_existing_definitions_in(tab, scopes, done)
    -- track duplicates to avoid cycles like _G._G, _G._G._G, etc.
    if done[tab] then return end
    done[tab] = true
    for name,binding in pairs(tab) do
    local full_name = live.full_name(scopes, name)
    --? print(full_name)
    Live.frozen_definitions[full_name] = true
    if type(binding) == 'table' and full_name ~= 'package' then -- var 'package' contains copies of all modules, but not the best name; rely on people to not modify package.loaded.io.open, etc.
    table.insert(scopes, name)
    live.freeze_all_existing_definitions_in(binding, scopes, done)
    table.remove(scopes)
    end
    end
    end
    function live.full_name(scopes, name)
    local ns = table.concat(scopes, '.')
    if #ns == 0 then return name end
    return ns..'.'..name
    end
    -- === on error, pause the app and wait for messages