[squeak-dev] The Inbox: Traits-ct.313.mcz

commits at source.squeak.org commits at source.squeak.org
Sat Nov 14 19:17:52 UTC 2020

A new version of Traits was added to project The Inbox:

==================== Summary ====================

Name: Traits-ct.313
Author: ct
Time: 14 November 2020, 8:17:49.385394 pm
UUID: dc5db75d-4841-4848-9a68-297964a9f045
Ancestors: Traits-pre.312

Complements Compiler-ct.453 and Compiler-ct.452 (both in inbox at this moment).

=============== Diff against Traits-pre.312 ===============

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.
- 	methodNode := self newCompiler
- 		compile: source in: self notifying: nil ifFail:[^nil].
  	newMethod := methodNode generate: (self defaultMethodTrailerIfLogSource: true).
  	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