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

Reply via email to