Stack with the same name loop

Mark Waddingham mark at livecode.com
Thu Oct 7 12:43:44 EDT 2021


On 2021-10-07 17:25, Brian Milby via use-livecode wrote:
> I would be more of a fan of lowering the engine check to just a
> warning vice a hard error/prohibition.  Like you said, if you don’t
> use the long name then most of the time you are going to reference the
> earliest opened version of the stack (based on the linked list of open
> stacks).  But if you reference an object within the same stack (or at
> least the visible card), it can reference by short name.  I guess I
> should expand my test stack to check that.

I'm not quite sure how the engine would give a warning - the behavior 
being discussed in this thread is the way the IDE deals with how the 
engine deals with a specific case...

In general, the engine will either let something happen or it won't. In 
this specific case, it doesn't let implicit opens of stacks (which is 
what all initial openings of stacks are when you use a 'stack <name>' 
chunk are - given the potential disconnect between what <name> is, and 
what stackfile might actually be loaded) proceed if there is already a 
stack with the same name in memory...

However it *does* send a message 'reloadStack' that can be handled so 
script can decide what to do.

Indeed, this handler could happily let things go ahead:

   on reloadStack pStackName, pPath
     local tOldFilename
     set the name of stack pStackName to (pStackName & "~")
     put the filename of stack pStackName into tOldFilename
     set the filename of stack pStackName to "this is a unique name"
     go stack pPath
     set the name of stack "this is a unique name" to pStackName
   end reloadStack

The IDE chooses not to do this to stop the large number of other issues 
which could arise from having multiple stacks in memory with the same 
name (in an environment where it might happen 'by accident', rather than 
for any particularly controlled reason as might be the case in a 
standalone environment written to cope with it).

> I can see a couple of ways to implement this where it would not impact
> existing code.  First would be a global flag to enable opening of
> files with the same name (default to off/false).  The second would be
> a “force” parameter to the open command which would bypass the check.

I guess my real question here is what would be the purpose of that? i.e. 
What problem does it solve?

Warmest Regards,

Mark.

-- 
Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps




More information about the use-livecode mailing list