Stack with the same name loop
brian at milby7.com
Thu Oct 7 10:57:17 EDT 2021
Clone stack avoids the check. It is not that hard to get multiple stacks with the same short name but different long names in memory (in a standalone). The engine makes sane choices when referencing the top stack in that case. Any individual stack can be referenced via the long name.
Sent from my iPhone
> On Oct 7, 2021, at 10:38 AM, Mark Waddingham via use-livecode <use-livecode at lists.runrev.com> wrote:
> On 2021-10-07 15:26, Pi Digital via use-livecode wrote:
>> Hi Mark (both :) )
>> Thanks for your explanation. Very thorough.
>> What I don’t understand is why the engine needs to delete the old
>> reference (weak handle) when invoking a ‘save as’. Is it not just a
>> matter of resaving you a new location and making the pointer to the
>> storage device for that instance? Why does it need to save it and then
>> remove from memory at all? Just carry on with what is already in
>> memory without the need to reload. That’s why we use a ‘save as’
> This isn't related to 'Save As' - nor is the engine doing anything here beyond sending a message - which is enforcing the 'only one main stack with a given (short) name exists in memory at any one time' invariant.
> When a stack is deserialized from the on-disk file - before it is 'hooked up' to anything (i.e. added to the list of things considered for any sort of search), it sweeps through all loaded mainStacks and checks to see if there is a name conflict (i.e. short name of new stack matches that of old).
> If there is (and the filenames are different) then it deletes what it has just loaded and sends a 'reloadStack' message. Otherwise, it hooks the new loaded stack up to the internal list of things considered actual stacks.
> The IDE handles the reloadStack message - it shows the dialog in question.
> If you choose 'Cancel' it takes no action - so nothing changes (no new stack loaded, no old stack deleted).
> If you choose 'Purge' the IDE does its best to remove the current stack in memory and *then* trys to load the new stack (from the different filepath) - as (in principal) there is no longer any stack in memory with the conflicting name, then engine loads it and things carry on.
> If you choose 'Save' the IDE does the same as above except that *before* it tries to remove the current stack from memory, it saves (save as, if the current stack has no filename).
> So the looping problem here lies somewhere in the process removing the existing stack from memory / saving it.
> Warmest Regards,
> Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
> LiveCode: Everyone can create apps
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
More information about the use-livecode