[squeak-dev] The Trunk: Traits-nice.299.mcz

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Sat Sep 21 21:06:42 UTC 2013


No, the Compiler did not classify for ages...
The Compiler does not install the generated CompiledMethod, it either
answer it, or execute it.
So I did not change much, I just avoided to pass an information that the
Compiler does not need.
In fact, the category was used only in one place: to pass it to a
SyntaxErrorNotification, then to a SyntaxError, just to display the
category in the pop up window (the single message in message list...).
For backward compatibility it's possible to add the messages in *deprecated
protocol, but since there are many messages, I'd like to ear which one
exactly...


2013/9/21 Chris Muller <asqueaker at gmail.com>

> I was too afraid to update my image because I need stability at the
> moment so I haven't tested or reviewed it closely yet.
>
> What's got me confused is that we've just changed some age-old API's
> because, suddenly, after all these years, someone decided it wasn't
> the Compiler's responsibility to classify..?  To compile something we
> have to specify the Class to compile it in, and all classes have
> categories / protocols, so isn't it convenient to do that during
> compilation?  What is responsible for classifying now and what is the
> new API for code-generators to classify the methods they generate?
>
> On Sat, Sep 21, 2013 at 2:52 PM, Nicolas Cellier
> <nicolas.cellier.aka.nice at gmail.com> wrote:
> > Please send reports, I'm all ear.
> > Though I'm not aware of any raised: no sender no implementor in my image.
> > Or is it raised ? It's a Morph thing...
> >
> >
> > 2013/9/21 Frank Shearar <frank.shearar at gmail.com>
> >>
> >> For instance: http://build.squeak.org/job/SqueakTrunk/536/console
> >>
> >> Look for
> >>
> >> Exception MessageNotUnderstood raised:
> >> Behavior class>>compile:notifying:trailer:ifFail:
> >>
> >> I don't know where it's coming from yet - that's the entire stack trace.
> >>
> >> frank
> >>
> >>
> >> On 21 September 2013 18:17, Chris Muller <asqueaker at gmail.com> wrote:
> >> > I would expect these changes to break a lot of code..
> >> >
> >> > On Fri, Sep 20, 2013 at 2:45 PM,  <commits at source.squeak.org> wrote:
> >> >> Nicolas Cellier uploaded a new version of Traits to project The
> Trunk:
> >> >> http://source.squeak.org/trunk/Traits-nice.299.mcz
> >> >>
> >> >> ==================== Summary ====================
> >> >>
> >> >> Name: Traits-nice.299
> >> >> Author: nice
> >> >> Time: 20 September 2013, 9:45:04.474 pm
> >> >> UUID: d6c18da8-7e93-4bcc-b94e-7f67426a2965
> >> >> Ancestors: Traits-nice.298
> >> >>
> >> >> Don't pass a category to a Compiler, classifying is not its job.
> >> >>
> >> >> =============== Diff against Traits-nice.298 ===============
> >> >>
> >> >> Item was changed:
> >> >>   ----- Method: ClassDescription>>traitAddSelector:withMethod: (in
> >> >> category '*Traits-NanoKernel') -----
> >> >>   traitAddSelector: selector withMethod: traitMethod
> >> >>         "Add a method inherited from a trait.
> >> >>         Recompiles to avoid sharing and implement aliasing."
> >> >>         | oldMethod source methodNode newMethod originalSelector |
> >> >>         oldMethod := self compiledMethodAt: selector ifAbsent:[nil].
> >> >>         oldMethod ifNotNil:[
> >> >>                 "The following is an important optimization as it
> >> >> prevents exponential
> >> >>                 growth in recompilation. If T1 is used by T2 and T2
> by
> >> >> T3 then (without
> >> >>                 this optimization) any change in T1 would cause all
> >> >> methods in T2 to be
> >> >>                 recompiled and each recompilation of a method in T2
> >> >> would cause T3
> >> >>                 to be fully recompiled. The test eliminates all such
> >> >> situations."
> >> >>                 (oldMethod sameTraitCodeAs: traitMethod)
> >> >> ifTrue:[^oldMethod].
> >> >>         ].
> >> >>         originalSelector := traitMethod selector.
> >> >>         source := traitMethod methodClass sourceCodeAt:
> >> >> originalSelector.
> >> >>         originalSelector == selector ifFalse:[
> >> >>                 "Replace source selectors for aliases"
> >> >>                 source := self replaceSelector: originalSelector
> >> >> withAlias: selector in: source.
> >> >>         ].
> >> >>         methodNode := self newCompiler
> >> >> +               compile: source in: self notifying: nil
> ifFail:[^nil].
> >> >> -               compile: source in: self classified: nil notifying:
> nil
> >> >> ifFail:[^nil].
> >> >>         newMethod := methodNode generate: self defaultMethodTrailer.
> >> >>         newMethod putSource: source fromParseNode: methodNode
> inFile: 2
> >> >>                 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut:
> >> >> 'Trait method'; cr].
> >> >>         newMethod originalTraitMethod: traitMethod.
> >> >>         ^super addSelectorSilently: selector withMethod: newMethod.!
> >> >>
> >> >>
> >> >
> >>
> >
> >
> >
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20130921/a05fd609/attachment.htm


More information about the Squeak-dev mailing list