Colin Putney uploaded a new version of Environments to project The Trunk:
http://source.squeak.org/trunk/Environments-cwp.19.mcz ==================== Summary ==================== Name: Environments-cwp.19 Author: cwp Time: 1 April 2013, 11:08:28.022 pm UUID: 90a9eda4-b8ad-4f7e-9e71-c5e940c08e4f Ancestors: Environments-cwp.18 Bindings cleanup stage 1/2. =============== Diff against Environments-cwp.18 =============== Item was added: + LookupKey subclass: #AbstractBinding + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'Environments-Core'! Item was added: + ----- Method: AbstractBinding class>>convertInstances (in category 'as yet unclassified') ----- + convertInstances + | new old | + old := Binding allInstances. + new := old collect: [:ea | ClassBinding key: ea key value: ea value]. + old elementsForwardIdentityTo: new. + + old := ReadOnlyVariableBinding allInstances. + new := old collect: [:ea | ClassBinding key: ea key value: ea value]. + old elementsForwardIdentityTo: new. + + Environment allInstancesDo: + [:env | + #('contents' 'bindings' 'public' 'undeclared') do: + [:var || dict | + old := Array new writeStream. + new := Array new writeStream. + dict := env instVarNamed: var. + dict associations do: + [:binding | + binding class == Association ifTrue: + [old nextPut: binding. + new nextPut: binding key => binding value]]. + old contents elementsForwardIdentityTo: new contents]]! Item was added: + ----- Method: AbstractBinding class>>initialize (in category 'as yet unclassified') ----- + initialize + self convertInstances! Item was added: + ----- Method: AbstractBinding>>analogousCodeTo: (in category 'as yet unclassified') ----- + analogousCodeTo: anObject + "For MethodProperties comparison." + ^anObject isVariableBinding + and: [self key = anObject key + and: [self value = anObject value]]! Item was added: + ----- Method: AbstractBinding>>canAssign (in category 'as yet unclassified') ----- + canAssign + ^ true! Item was added: + ----- Method: AbstractBinding>>isSpecialReadBinding (in category 'as yet unclassified') ----- + isSpecialReadBinding + ^ false! Item was added: + ----- Method: AbstractBinding>>isSpecialWriteBinding (in category 'as yet unclassified') ----- + isSpecialWriteBinding + ^ false! Item was added: + ----- Method: AbstractBinding>>isVariableBinding (in category 'as yet unclassified') ----- + isVariableBinding + ^ true! Item was added: + ----- Method: AbstractBinding>>objectForDataStream: (in category 'as yet unclassified') ----- + objectForDataStream: refStream + "It's not yet clear how serialization should work in the presence of environments" + + self shouldBeImplemented.! Item was added: + ----- Method: AbstractBinding>>printOn: (in category 'as yet unclassified') ----- + printOn: aStream + key printOn: aStream. + aStream nextPutAll: '=>'. + self value printOn: aStream! Item was changed: + AbstractBinding subclass: #Alias - LookupKey subclass: #Alias instanceVariableNames: 'source' classVariableNames: '' poolDictionaries: '' category: 'Environments-Core'! Item was changed: + ----- Method: Alias>>initializeWithKey:source: (in category 'initialization') ----- - ----- Method: Alias>>initializeWithKey:source: (in category 'as yet unclassified') ----- initializeWithKey: aSymbol source: anAssociation self initialize. key := aSymbol. source := anAssociation! Item was changed: + ----- Method: Alias>>isSpecialReadBinding (in category 'testing') ----- - ----- Method: Alias>>isSpecialReadBinding (in category 'as yet unclassified') ----- isSpecialReadBinding ^ true! Item was changed: + ----- Method: Alias>>isSpecialWriteBinding (in category 'testing') ----- - ----- Method: Alias>>isSpecialWriteBinding (in category 'as yet unclassified') ----- isSpecialWriteBinding ^ true! Item was added: + ----- Method: Alias>>literalEqual: (in category 'error handling') ----- + literalEqual: other + "Two aliases are equal if they have the same source" + + ^ self species = other species and: [self source == other source]! Item was added: + ----- Method: Alias>>source (in category 'accessing') ----- + source + ^ source! Item was changed: + ----- Method: Alias>>value (in category 'evaluating') ----- - ----- Method: Alias>>value (in category 'as yet unclassified') ----- value ^ source value! Item was changed: + ----- Method: Alias>>value: (in category 'accessing') ----- - ----- Method: Alias>>value: (in category 'as yet unclassified') ----- value: anObject source value: anObject! Item was added: + AbstractBinding subclass: #ClassBinding + instanceVariableNames: 'value' + classVariableNames: '' + poolDictionaries: '' + category: 'Environments-Core'! Item was added: + ----- Method: ClassBinding class>>key:value: (in category 'as yet unclassified') ----- + key: key value: value + ^ self basicNew initializeWithKey: key value: value! Item was added: + ----- Method: ClassBinding>>asBinding: (in category 'as yet unclassified') ----- + asBinding: aSymbol + ^ self class key: aSymbol value: value! Item was added: + ----- Method: ClassBinding>>canAssign (in category 'as yet unclassified') ----- + canAssign + ^ false! Item was added: + ----- Method: ClassBinding>>initializeWithKey:value: (in category 'as yet unclassified') ----- + initializeWithKey: kObject value: vObject + self initialize. + key := kObject. + value := vObject.! Item was added: + ----- Method: ClassBinding>>isSpecialWriteBinding (in category 'as yet unclassified') ----- + isSpecialWriteBinding + ^ true! Item was added: + ----- Method: ClassBinding>>literalEqual: (in category 'as yet unclassified') ----- + literalEqual: other + "Class bindings are equal when the bind the same class" + + ^ self species = other species and: [self value = other value]! Item was added: + ----- Method: ClassBinding>>value (in category 'as yet unclassified') ----- + value + ^ value! Item was added: + ----- Method: ClassBinding>>value: (in category 'as yet unclassified') ----- + value: anObject + (AttemptToWriteReadOnlyGlobal signal: 'Cannot store into read-only bindings') + ifTrue: [value := anObject]! Item was added: + AbstractBinding subclass: #Global + instanceVariableNames: 'value' + classVariableNames: '' + poolDictionaries: '' + category: 'Environments-Core'! Item was added: + ----- Method: Global class>>key:value: (in category 'as yet unclassified') ----- + key: aSymbol value: anObject + ^ self basicNew initializeWithKey: aSymbol value: anObject! Item was added: + ----- Method: Global>>asBinding: (in category 'as yet unclassified') ----- + asBinding: aSymbol + ^ Alias key: aSymbol source: self! Item was added: + ----- Method: Global>>initializeWithKey:value: (in category 'as yet unclassified') ----- + initializeWithKey: aSymbol value: anObject + self initialize. + key := aSymbol. + value := anObject! Item was added: + ----- Method: Global>>literalEqual: (in category 'as yet unclassified') ----- + literalEqual: other + "Globals are only equal to themselves, since another global with the same + name could have a different value in the future." + + ^ self == other! Item was added: + ----- Method: Global>>value (in category 'as yet unclassified') ----- + value + ^ value! Item was added: + ----- Method: Global>>value: (in category 'as yet unclassified') ----- + value: anObject + value := anObject! Item was added: + ----- Method: Symbol>>=> (in category '*environments') ----- + => anObject + + ^ anObject isBehavior + ifTrue: [ClassBinding key: self value: anObject] + ifFalse: [Global key: self value: anObject]! |
Free forum by Nabble | Edit this page |