+1 too. Fewer side-effects and/or more side-effect free refactoring is better.
Regards, Gary ----- Original Message ----- From: "Igor Stasenko" <[email protected]> To: <[email protected]> Sent: Tuesday, November 03, 2009 3:56 PM Subject: Re: [Pharo-project] Compiler compile: > +1 Niko. > There should be an easy interface for compiling the source code > without installing the result into system. > And of course, compiler should answer an instance of compiled method > > 2009/11/3 Niko Schwarz <[email protected]>: >> Hi list, >> >> consider this code: >> >> c := Compiler compile: 'meth "bla" ^ 2'. >> > Try using > > c:= Compiler new > compiledMethodFor: ... > > > The class-side #compile:... method , is method which serves for > directly compiling & installing the method into receiver. > In the above case - into Compiler class, but you can also do that for > any other class: > > MyClass compile: .... > >> Here, c will be set to the symbol #meth. And Compiler will be added a >> new method "meth". >> >> This is of course counter-intuitive, but it's kind of wired into the >> system. Behavior>compile: does certainly more than compile. It >> compiles the code and adds it to itself, then returns the methodName >> as a symbol. Without mirrors, it's hard to do it right, though. >> >> Also, there's an easy method to add a method to a class, but no easy >> method to get a CompiledMethod object. I don't want to strongly >> advocate for my change, I just want to offer it. Here's what I did in >> my system: >> >> I changed Compiler>compile: to do the following: >> class side: >> >> compile: aString onClass: aClass >> ^ self new compiledMethodFor: aString onClass: aClass >> >> instance side: >> >> compiledMethodFor: textOrStream onClass: aClass >> >> | methodNode method | >> class := aClass. >> self from: textOrStream class: class context: nil notifying: nil. >> methodNode := self translate: sourceStream noPattern: false ifFail: >> [^self error: 'Compilation failed']. >> method := methodNode generate: #(0 0 0 0). >> self interactive ifTrue: >> [method := method copyWithTempsFromMethodNode: methodNode]. >> ^method >> >> This has its own problem, like: compile: suddenly has different >> semantics on Compiler than anywhere else. Best might be renaming >> Behavior>compile: to something more intuitive. Like >> #compileFromAndAdd:. >> >> Cheers, >> >> Niko >> >> _______________________________________________ >> Pharo-project mailing list >> [email protected] >> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> > > > > -- > Best regards, > Igor Stasenko AKA sig. > > _______________________________________________ > Pharo-project mailing list > [email protected] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project _______________________________________________ Pharo-project mailing list [email protected] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
