[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
|