adding a method via Parser/Compiler

Adrian Lienhard alienhard at netstyle.ch
Fri May 7 10:17:12 UTC 2004


Hi Jakob,

The problem that the newly compiled method does not show up in the 
class browser is that it is not classified.

Try this to add a new method, which is even simpler than directly 
calling the compiler:

TestClass
	compile:  'showOnTranscript: anObject
          		Transcript show: anObject.'
	classified: 'mycategory'

Cheers,
Adrian


On May 7, 2004, at 10:47 AM, Jakob Praher wrote:

> hi squeakers,
>
> finally I got some time to play with the squeak environment - kudos to 
> you all.
> Please apologize, but I am a smalltalk beginnner.
>
> I wanted to know how to define a new Method on the fly and, thanks to 
> the terrific inspectors and browsers I found out that the Compiler / 
> Parser can be used to compile text to parse trees and optionally hang 
> in methods in classes.
>
> "create a new class"
> Object subclass: #TestClass  .....
>
> "create a new method node and add it to TestClass's MethodDictionary"
> methodNode := Compiler new
>    compile: (ReadStream on:
>       'showOnTranscript anObject
>          Transcript show: anObject.'
>    in: TestClass
>    notifying: nil
>    ifFail: [Smalltalk beep]
> .
>
> This works very well, if I say for instance:
>
> TestClass new showOnTranscript: 'hello from showOnTranscript in 
> TestClass'.
>
> I get the results printed on the Transcript.
> The funny thing is though, that the method is not shown in the 
> ObjectBrowser/ClassBrowser.
> But the #subclass method creates a new Entry in the Browser.
>
> I have also tried to create a CompiledMethod with the generate method 
> and hang it in the TestClass manually via Behavior>>addSelector, but 
> had no luck with that too.
>
> so I am just curious, and would like to know, how to do it right :-)
> -- Jakob
>
>
___________________
Adrian Lienhard
www.adrian-lienhard.ch
www.netstyle.ch




More information about the Squeak-dev mailing list