[squeak-dev] The Trunk: Traits-nice.299.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Sep 20 19:45:24 UTC 2013
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
|