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

Frank Shearar frank.shearar at gmail.com
Sat Sep 21 17:33:40 UTC 2013


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


More information about the Squeak-dev mailing list