Re: there is a subtle problem doing: mySlot := obj getSlot(slotname)

Jan-Paul Bultmann <[email protected]>
Newsgroups gmane.comp.lang.io
Message-ID <[email protected]>
Yeah,
this is a phenomenon we lovely called activation cancer.
You have two options, the first is provided by Jake, the other one is to disable the Activatable bit on the method.

    getSlot(myMethod) setIsActivatable(false)

In acute we had the idea of using metas (indirection object that represent slot annotations) to put the Activatable bits on them.
This way you'd make the "slot" activatable and not the method it holds.

Cheers Jan
On Nov 8, 2011, at 13:30 PM, Mildred Ki'Lya wrote:

> Hi,
> 
> I like static typing a lit, and I thought ... why not implement a layer of static typing in Io directly. I could run a compilation stage just before running the main program and check typing errors using the wonderful Io introspection features. Note: this is my code that I write in Io.
> 
> At some point, I need to check a method implementation against an interface. To do that, I need to find the method implementation in an object. To do that, i'm using getSlot to do something like:
> 
>   checkObjectMessage := method(obj, slotname, returnInterface, args,
>     # Find the message implementation
>     slot := obj getSlot(slotname)
>     "name: " print; slotname print; "." println
>     "slot: " print; obj getSlot(slotname) print; "." println
>     "slot: " print; slot print; "." println
>     # TODO: iterate over all instructions, and check each instruction is legal
>     self
>   )
> 
> You can see few print messages ... this is for debug. When I run this code, I get a difference between the first "slot:" printed line, and the second "slot:" printed line. The first displays the code of the method, something like:
> 
> slot: 
> # /home/shanti/Perso/io/libs/iovm/io/A2_Object.io:461
> method(
>     getSlot("self") print; write("\n"); getSlot("self")
> )
> .
> 
> This is expected. But then the second line shows:
> 
> slot: Object_0x98778f8 do(
>   appendProto(Object_0x985c7a0)
> 
> Object_0x98778f8 do(
>   appendProto(Object_0x985c7a0)
> .
> 
> Apparently the local variable "slot" is being assigned to a method ... and whel looking up this variable, the method is called. I suppose I should do getSlot("slot") to do the trick. I was wondering if there was a way to store a Block object in a variable, and be able to access this variable in any other way than getSlot("varname").
> 
> And, I think this should be added to the pitfalls page, unless I missed something.
> 
> Thank you,
> 
> Mildred
> 
> -- 
> Mildred Ki'Lya
> http://mildred.fr
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.