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