Weirdness Passing Messages

David Burgun dburgun at dsl.pipex.com
Fri Mar 24 11:43:43 EST 2006


On 24 Mar 2006, at 16:12, J. Landman Gay wrote:

> David Burgun wrote:
>
>> Incidentally, the above works  just fine regardless of the stack/ 
>> card/ object using "put <something> into me". The problem I  
>> described  yesterday was brought to light because when a new  
>> folder is selected,  I wanted to select the first line (file) in  
>> the list, so inside  ISM_FolderSelect(), I did a ISMPutMessage 
>> ("ISM_FileSelected,  kFileKind, line 1 of me), when this happened,  
>> "me" in the receiving  handler got Beswick'ed!
>
> Which is reasonable, I think. Think about this a moment --  
> parameters are always evaluated before being passed. When you pass  
> "me" in a parameter, the "me" will refer to the object currently  
> executing the script, not the target object the script will  
> eventually refer to later. This is normal behavior.

This was just short hand to explain how I came to find the bug. What  
I was trying to point out is that the problem was triggered by me  
calling a handler in an unopened card from an object inside the same  
(unopened card).

The actual code is:

put line 1 of the text of me into myFileName
get ISMPutMessage(ISM_FileSelected,  kFileKind, myFileName)

The problem was in the ISM_FIleSelected handler in the *destination"  
object. Which did this:


on ISM_PutMessage( heMessageID,theSubCode,theFilePathName)
--
--  Other code
--

put <something>  into me  --<something> being based on the file name.

--
--  Other code
--
end ISM_PutMessage

> Take this example:
>
>   addNums (1+1)
>
> The addNums handler will receive a parameter of "2", not "1+1".  
> Ditto for "me", which will be interpreted as the object *currently*  
> running the script, not the future target of the handler reference.

I don't pass "me" as a parameter for the very reason you mention. The  
problem is in the destination handler which is a different "me"!!!!!
>
> When passing a reference parameter, use an ID or other static  
> reference, not "me" which is always subject to interpretation. As  
> you found out. ;)

>
> If you absolutely must use "me" then you can try putting the  
> parameter in quotes to force it into acting as a string. Strings  
> won't be evaluated. I don't know if this will work in your  
> situation but you can try it.
>
> Now that I understand your usage better, I do not think this is a bug.

The bug is that:

put <something> into me

or

set the text of me to <something>

Doesn't work 100% of the time. Sorry for the confusion, I didn't mean  
you to take the pseudo code I posted literally. I have found the bug  
now and changed the offending lines to:

set the text of the long is of me to <something> and it works fine now.

Thanks a lot
All the Best
Dave









More information about the Use-livecode mailing list