[squeak-dev] The Inbox: Monticello-fbs.581.mcz

commits at source.squeak.org commits at source.squeak.org
Sat Dec 21 22:40:05 UTC 2013


A new version of Monticello was added to project The Inbox:
http://source.squeak.org/inbox/Monticello-fbs.581.mcz

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

Name: Monticello-fbs.581
Author: fbs
Time: 21 December 2013, 8:00:04.242 pm
UUID: 26fba6b3-441c-434b-9d61-e39955f4a5ca
Ancestors: Monticello-cmm.580

Make Monticello loading/unloading Environmentally aware. Loading Monticello definitions is as simple as

["loading logic here"]
    on: EnvironmentRequest do: [:e | e resume: yourEnvironment].

=============== Diff against Monticello-cmm.580 ===============

Item was changed:
  ----- Method: MCClassDefinition>>actualClass (in category 'accessing') -----
  actualClass
+ 	| binding environment |
+ 	environment := EnvironmentRequest signal ifNil: [Smalltalk globals].
+ 	binding := environment bindingOf: name ifAbsent: [(KeyNotFound key: name) signal].
+ 	^ binding value.!
- 	^Smalltalk classNamed: self className!

Item was changed:
  ----- Method: MCClassDefinition>>createClass (in category 'installing') -----
  createClass
+ 	| environment superClass class composition |
+ 	environment := EnvironmentRequest signal ifNil: [Smalltalk globals].
- 	| superClass class composition |
  	superClass := superclassName == #nil ifFalse:
+ 					[(environment bindingOf: superclassName) value].
+ 	superClass ifNil: [(KeyNotFound key: superclassName) signal].
- 					[Smalltalk at: superclassName].
  	[class := (ClassBuilder new)
  			name: name 
+ 			inEnvironment: environment 
- 			inEnvironment: (EnvironmentRequest signal ifNil: [superClass environment]) 
  			subclassOf: superClass
  			type: type 
  			instanceVariableNames: self instanceVariablesString 
  			classVariableNames: self classVariablesString 
  			poolDictionaries: self sharedPoolsString
  			category: category.
  	] on: Warning, DuplicateVariableError do:[:ex| ex resume].
  
  	"The following is written to support traits unloading"
  	composition := self traitComposition ifNil: [Array new] ifNotNil: [:traitComposition | Compiler evaluate: traitComposition].
  	(composition isCollection and:[composition isEmpty and:[class traitComposition isEmpty]]) ifFalse:[
  		class setTraitComposition: composition asTraitComposition.
  	].
  
  	composition := self classTraitComposition ifNil: [Array new] ifNotNil: [:traitComposition | Compiler evaluate: traitComposition].
  	(composition isCollection and:[composition isEmpty and:[class class traitComposition isEmpty]]) ifFalse:[
  		class class setTraitComposition: composition asTraitComposition.
  	].
  
  	^class!

Item was changed:
  ----- Method: MCClassDefinition>>unload (in category 'installing') -----
  unload
+ 	| environment |
+ 	environment := EnvironmentRequest signal ifNil: [Smalltalk globals].
+ 	environment removeClassNamed: name.!
- 	Smalltalk removeClassNamed: name!

Item was changed:
  ----- Method: MCMethodDefinition>>actualClass (in category 'accessing') -----
  actualClass
+ 	| actualClass binding environment |
+ 	environment := EnvironmentRequest signal ifNil: [Smalltalk globals].
+ 	binding := environment bindingOf: className ifAbsent: [(KeyNotFound key: className) signal].
+ 	actualClass := binding value.
+ 	^ classIsMeta
+ 		ifTrue: [actualClass classSide]
+ 		ifFalse: [actualClass].!
- 	^Smalltalk at: className
- 		ifPresent: [:class | classIsMeta ifTrue: [class classSide] ifFalse: [class]]!



More information about the Squeak-dev mailing list