programatically generating methods
Niko Matsakis
niko at alum.mit.edu
Fri Dec 7 10:30:13 UTC 2007
Actually, there is one additional problem with this technique:
the comment which I insert gets lost.
thanks!
Niko
On Dec 7, 2007, at 11:28 AM, Niko Matsakis wrote:
> What is the best way to programatically generate a CompiledMethod
> from a string?
>
> This is what I currently do:
>
> mthd := Compiler new
> compile:(String streamContents: [:stream |
> stream
> nextPutAll: 'bindingsString'; cr;
> tab; nextPutAll: 'Dynamically generated by bindingsString:'
> asSmalltalkComment; cr;
> tab; nextPutAll: '^ '; nextPutAll: aString
> surroundedBySingleQuotes; nextPut: $.; cr.
> ])
> in:self
> classified:'bindings'
> notifying:nil
> ifFail:[:x | ^ x].
> self class addSelector:#bindingsString withMethod: mthd generate.
> self class organization classify: #bindingsString under:#bindings
> suppressIfDefault:false.
>
> This works, actually, though I'm sure the "ifFail" block is totally
> wrong. However, it doesn't "feel" like the right way. For one
> thing, I am not sure that method of Compiler is a public API. For
> another, I have to repeat a lot of information such as the selector
> and classification.
>
> This is in relation to my last message: I am trying to generate
> methods that will return constant data so that it survives
> Monticello. (I also tried hacking around with MCClassDefinition,
> but that seemed like a lot of work...). The constant data is only a
> string, so if there is an easier way I'm all ears.
>
>
> thanks!
>
> Niko
More information about the Squeak-dev
mailing list
|