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

Chris Muller asqueaker at gmail.com
Sat Sep 21 17:17:50 UTC 2013


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.!
>
>


More information about the Squeak-dev mailing list