[squeak-dev] How do I replace a call SmalltalkImage>>associationAt:ifAbsent:? (Environments)

H. Hirzel hannes.hirzel at gmail.com
Mon Oct 9 10:06:28 UTC 2017


Note: ScriptEncoder belongs to Etoys

EncoderForV3PlusClosures subclass: #ScriptEncoder
	instanceVariableNames: 'referenceObject'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'Etoys-Squeakland-System-Compiler'

Maybe the fix has to be done earlier in the method #allLiterals

    #allLiterals
calls
    #associationForClass


allLiterals
	addedSelectorAndMethodClassLiterals ifFalse:
		[addedSelectorAndMethodClassLiterals := true.
		"Put the optimized selectors in literals so as to browse senders more easily"
		optimizedSelectors := optimizedSelectors reject: [:e| literalStream
originalContents hasLiteral: e].
		optimizedSelectors isEmpty ifFalse: [
			"Use one entry per literal if enough room, else make anArray"
			literalStream position + optimizedSelectors size + 2 >= self maxNumLiterals
				ifTrue: [self litIndex: optimizedSelectors asArray]
				ifFalse: [optimizedSelectors do: [:e | self litIndex: e]]].
		"Add a slot for selector or MethodProperties"
		self litIndex: nil.
		self litIndex: self associationForClass].
	^literalStream contents


On 10/9/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
> Hello
>
> How do I replace a call SmalltalkImage>>associationAt:ifAbsent:?
>
> ScriptEncoder>>associationForClass
> 	| assoc |
> 	assoc := self environment associationAt: cue getClass name ifAbsent:
> [nil].
> 	^assoc value == cue getClass
> 		ifTrue: [assoc]
> 		ifFalse: [Association new value: cue getClass]
>
>
>
> SmalltalkImage>>associationAt: key ifAbsent: aBlock
> 	"Obsoleted."
>
> 	self deprecated: 'Use Smalltalk globals'.
> 	^globals associationAt: key ifAbsent: aBlock
>
>
> A direct replacement does not work.
>
>
> Kind regards
>
> Hannes
>


More information about the Squeak-dev mailing list