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@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’
>> anyway.
> 
> 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.
> 
> -- 
> Mark Waddingham ~ m...@livecode.com ~ http://www.livecode.com/
> LiveCode: Everyone can create apps
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode@lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription 
> preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to