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