error on latest pharo spur 32 windows vm

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

error on latest pharo spur 32 windows vm

Nicolai Hess-3-2
PharoVM-Spur32-win-latest.zip from 18.03.16:

Opening a fresh image works, but using the menu shows an error
Improper store into indexable object

Error: Improper store into indexable object
Bitmap(Object)>>error:
Bitmap(Object)>>errorImproperStore
Bitmap(Object)>>at:put:
[ :assoc |
| theta nextIndex nextColor nextWord distance step |
nextIndex := (assoc key * length) rounded.
nextColor := assoc value.
nextWord := nextColor pixelWordForDepth: 32.
distance := nextIndex - lastIndex.
distance = 0
    ifTrue: [ distance := 1 ].
step := 1.0 / distance asFloat.
theta := 0.0.
lastIndex + 1 to: nextIndex do: [ :i |
    theta := theta + step.
    "The following is an open-coded version of:
                color := nextColor alphaMixed: theta with: lastColor.
                bits at: i put: (color scaledPixelValue32).
            "
    bits
        at: i
        put: (self scaledAlphaMix: theta of: lastWord with: nextWord) ].
lastIndex := nextIndex.
lastColor := nextColor.
lastWord := nextWord ] in GradientFillStyle>>computePixelRampOfSize: in Block: [ :assoc | ...
SortedCollection(OrderedCollection)>>do:
GradientFillStyle>>computePixelRampOfSize:
[ :key | (GradientFillStyle new colorRamp: key) computePixelRampOfSize: 512 ] in GradientFillStyle class>>initPixelRampCache in Block: [ :key | (GradientFillStyle new colorRamp: key) co...etc...
BlockClosure>>cull:
[ | value |
value := block cull: key.
"Sadly we have to check the presence of key again
                in case of the block execution already added the entry"
keyIndex
    associationAt: key
    ifAbsent: [ association := self newAssociationKey: key value: value.
        ^ self handleMiss: association ] ] in [ | association |
association := keyIndex
    associationAt: key
    ifAbsent: [ | value |
        value := block cull: key.
        "Sadly we have to check the presence of key again
                in case of the block execution already added the entry"
        keyIndex
            associationAt: key
            ifAbsent: [ association := self newAssociationKey: key value: value.
                ^ self handleMiss: association ] ].
^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | value |...
Dictionary>>associationAt:ifAbsent:
[ | association |
association := keyIndex
    associationAt: key
    ifAbsent: [ | value |
        value := block cull: key.
        "Sadly we have to check the presence of key again
                in case of the block execution already added the entry"
        keyIndex
            associationAt: key
            ifAbsent: [ association := self newAssociationKey: key value: value.
                ^ self handleMiss: association ] ].
^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | association |...
UndefinedObject>>ifNil:ifNotNil:
LRUCache(AbstractCache)>>critical:
LRUCache>>at:ifAbsentPut:
LRUCache(AbstractCache)>>at:
GradientFillStyle>>pixelRamp
BalloonEngine>>registerFill:
BalloonEngine>>registerFills:
BalloonEngine>>registerFill:and:
BalloonEngine>>drawRectangle:fill:borderWidth:borderColor:transform:
BalloonCanvas>>drawRectangle:color:borderWidth:borderColor:
BalloonCanvas>>fillRectangle:basicFillStyle:
FormCanvas>>balloonFillRectangle:fillStyle:
FormCanvas>>fillRectangle:basicFillStyle:
GradientFillStyle(FillStyle)>>fillRectangle:on:
FormCanvas(Canvas)>>fillRectangle:fillStyle:
FormCanvas(Canvas)>>fillRectangle:fillStyle:borderStyle:
MenuMorph(Morph)>>drawOn:
MenuMorph>>drawOn:
FormCanvas(Canvas)>>draw:
Error: Improper store into indexable object
Bitmap(Object)>>error:
Bitmap(Object)>>errorImproperStore
Bitmap(Object)>>at:put:
[ :assoc |
| theta nextIndex nextColor nextWord distance step |
nextIndex := (assoc key * length) rounded.
nextColor := assoc value.
nextWord := nextColor pixelWordForDepth: 32.
distance := nextIndex - lastIndex.
distance = 0
    ifTrue: [ distance := 1 ].
step := 1.0 / distance asFloat.
theta := 0.0.
lastIndex + 1 to: nextIndex do: [ :i |
    theta := theta + step.
    "The following is an open-coded version of:
                color := nextColor alphaMixed: theta with: lastColor.
                bits at: i put: (color scaledPixelValue32).
            "
    bits
        at: i
        put: (self scaledAlphaMix: theta of: lastWord with: nextWord) ].
lastIndex := nextIndex.
lastColor := nextColor.
lastWord := nextWord ] in GradientFillStyle>>computePixelRampOfSize: in Block: [ :assoc | ...
SortedCollection(OrderedCollection)>>do:
GradientFillStyle>>computePixelRampOfSize:
[ :key | (GradientFillStyle new colorRamp: key) computePixelRampOfSize: 512 ] in GradientFillStyle class>>initPixelRampCache in Block: [ :key | (GradientFillStyle new colorRamp: key) co...etc...
BlockClosure>>cull:
[ | value |
value := block cull: key.
"Sadly we have to check the presence of key again
                in case of the block execution already added the entry"
keyIndex
    associationAt: key
    ifAbsent: [ association := self newAssociationKey: key value: value.
        ^ self handleMiss: association ] ] in [ | association |
association := keyIndex
    associationAt: key
    ifAbsent: [ | value |
        value := block cull: key.
        "Sadly we have to check the presence of key again
                in case of the block execution already added the entry"
        keyIndex
            associationAt: key
            ifAbsent: [ association := self newAssociationKey: key value: value.
                ^ self handleMiss: association ] ].
^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | value |...
Dictionary>>associationAt:ifAbsent:
[ | association |
association := keyIndex
    associationAt: key
    ifAbsent: [ | value |
        value := block cull: key.
        "Sadly we have to check the presence of key again
                in case of the block execution already added the entry"
        keyIndex
            associationAt: key
            ifAbsent: [ association := self newAssociationKey: key value: value.
                ^ self handleMiss: association ] ].
^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | association |...
UndefinedObject>>ifNil:ifNotNil:
LRUCache(AbstractCache)>>critical:
LRUCache>>at:ifAbsentPut:
LRUCache(AbstractCache)>>at:
GradientFillStyle>>pixelRamp
GradientFillStyle>>=
PluggableButtonMorph(Morph)>>fillStyle:
PluggableButtonMorph>>extent:
Pharo3Theme(UITheme)>>newButtonIn:for:getState:action:arguments:getEnabled:label:help:
Pharo3Theme(UITheme)>>newTaskbarButtonIn:for:
SpecWindow(SystemWindow)>>taskbarButtonFor:
TaskbarTask>>taskbarButtonFor:
[ :t |
| button |
button := t taskbarButtonFor: self.
button ifNotNil: [ self addMorphBack: button ] ] in TaskbarMorph>>updateTaskButtons in Block: [ :t | ...
OrderedCollection>>do:
TaskbarMorph>>updateTaskButtons
TaskbarMorph>>updateTasks
[ self updateBounds.
self updateTasks ] in TaskbarMorph>>ownerChanged in Block: [ self updateBounds....
BlockClosure>>on:do:
TaskbarMorph>>ownerChanged

Reply | Threaded
Open this post in threaded view
|

Re: error on latest pharo spur 32 windows vm

Max Leske
That’s a problem with the latest VM. You need to use the stable VM until Esteban has compiled a fixed version.

Cheers,
Max


> On 21 Mar 2016, at 08:19, Nicolai Hess <[hidden email]> wrote:
>
> PharoVM-Spur32-win-latest.zip from 18.03.16:
>
> Opening a fresh image works, but using the menu shows an error
> Improper store into indexable object
>
> Error: Improper store into indexable object
> Bitmap(Object)>>error:
> Bitmap(Object)>>errorImproperStore
> Bitmap(Object)>>at:put:
> [ :assoc |
> | theta nextIndex nextColor nextWord distance step |
> nextIndex := (assoc key * length) rounded.
> nextColor := assoc value.
> nextWord := nextColor pixelWordForDepth: 32.
> distance := nextIndex - lastIndex.
> distance = 0
>     ifTrue: [ distance := 1 ].
> step := 1.0 / distance asFloat.
> theta := 0.0.
> lastIndex + 1 to: nextIndex do: [ :i |
>     theta := theta + step.
>     "The following is an open-coded version of:
>                 color := nextColor alphaMixed: theta with: lastColor.
>                 bits at: i put: (color scaledPixelValue32).
>             "
>     bits
>         at: i
>         put: (self scaledAlphaMix: theta of: lastWord with: nextWord) ].
> lastIndex := nextIndex.
> lastColor := nextColor.
> lastWord := nextWord ] in GradientFillStyle>>computePixelRampOfSize: in Block: [ :assoc | ...
> SortedCollection(OrderedCollection)>>do:
> GradientFillStyle>>computePixelRampOfSize:
> [ :key | (GradientFillStyle new colorRamp: key) computePixelRampOfSize: 512 ] in GradientFillStyle class>>initPixelRampCache in Block: [ :key | (GradientFillStyle new colorRamp: key) co...etc...
> BlockClosure>>cull:
> [ | value |
> value := block cull: key.
> "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
> keyIndex
>     associationAt: key
>     ifAbsent: [ association := self newAssociationKey: key value: value.
>         ^ self handleMiss: association ] ] in [ | association |
> association := keyIndex
>     associationAt: key
>     ifAbsent: [ | value |
>         value := block cull: key.
>         "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
>         keyIndex
>             associationAt: key
>             ifAbsent: [ association := self newAssociationKey: key value: value.
>                 ^ self handleMiss: association ] ].
> ^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | value |...
> Dictionary>>associationAt:ifAbsent:
> [ | association |
> association := keyIndex
>     associationAt: key
>     ifAbsent: [ | value |
>         value := block cull: key.
>         "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
>         keyIndex
>             associationAt: key
>             ifAbsent: [ association := self newAssociationKey: key value: value.
>                 ^ self handleMiss: association ] ].
> ^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | association |...
> UndefinedObject>>ifNil:ifNotNil:
> LRUCache(AbstractCache)>>critical:
> LRUCache>>at:ifAbsentPut:
> LRUCache(AbstractCache)>>at:
> GradientFillStyle>>pixelRamp
> BalloonEngine>>registerFill:
> BalloonEngine>>registerFills:
> BalloonEngine>>registerFill:and:
> BalloonEngine>>drawRectangle:fill:borderWidth:borderColor:transform:
> BalloonCanvas>>drawRectangle:color:borderWidth:borderColor:
> BalloonCanvas>>fillRectangle:basicFillStyle:
> FormCanvas>>balloonFillRectangle:fillStyle:
> FormCanvas>>fillRectangle:basicFillStyle:
> GradientFillStyle(FillStyle)>>fillRectangle:on:
> FormCanvas(Canvas)>>fillRectangle:fillStyle:
> FormCanvas(Canvas)>>fillRectangle:fillStyle:borderStyle:
> MenuMorph(Morph)>>drawOn:
> MenuMorph>>drawOn:
> FormCanvas(Canvas)>>draw:
> Error: Improper store into indexable object
> Bitmap(Object)>>error:
> Bitmap(Object)>>errorImproperStore
> Bitmap(Object)>>at:put:
> [ :assoc |
> | theta nextIndex nextColor nextWord distance step |
> nextIndex := (assoc key * length) rounded.
> nextColor := assoc value.
> nextWord := nextColor pixelWordForDepth: 32.
> distance := nextIndex - lastIndex.
> distance = 0
>     ifTrue: [ distance := 1 ].
> step := 1.0 / distance asFloat.
> theta := 0.0.
> lastIndex + 1 to: nextIndex do: [ :i |
>     theta := theta + step.
>     "The following is an open-coded version of:
>                 color := nextColor alphaMixed: theta with: lastColor.
>                 bits at: i put: (color scaledPixelValue32).
>             "
>     bits
>         at: i
>         put: (self scaledAlphaMix: theta of: lastWord with: nextWord) ].
> lastIndex := nextIndex.
> lastColor := nextColor.
> lastWord := nextWord ] in GradientFillStyle>>computePixelRampOfSize: in Block: [ :assoc | ...
> SortedCollection(OrderedCollection)>>do:
> GradientFillStyle>>computePixelRampOfSize:
> [ :key | (GradientFillStyle new colorRamp: key) computePixelRampOfSize: 512 ] in GradientFillStyle class>>initPixelRampCache in Block: [ :key | (GradientFillStyle new colorRamp: key) co...etc...
> BlockClosure>>cull:
> [ | value |
> value := block cull: key.
> "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
> keyIndex
>     associationAt: key
>     ifAbsent: [ association := self newAssociationKey: key value: value.
>         ^ self handleMiss: association ] ] in [ | association |
> association := keyIndex
>     associationAt: key
>     ifAbsent: [ | value |
>         value := block cull: key.
>         "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
>         keyIndex
>             associationAt: key
>             ifAbsent: [ association := self newAssociationKey: key value: value.
>                 ^ self handleMiss: association ] ].
> ^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | value |...
> Dictionary>>associationAt:ifAbsent:
> [ | association |
> association := keyIndex
>     associationAt: key
>     ifAbsent: [ | value |
>         value := block cull: key.
>         "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
>         keyIndex
>             associationAt: key
>             ifAbsent: [ association := self newAssociationKey: key value: value.
>                 ^ self handleMiss: association ] ].
> ^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | association |...
> UndefinedObject>>ifNil:ifNotNil:
> LRUCache(AbstractCache)>>critical:
> LRUCache>>at:ifAbsentPut:
> LRUCache(AbstractCache)>>at:
> GradientFillStyle>>pixelRamp
> GradientFillStyle>>=
> PluggableButtonMorph(Morph)>>fillStyle:
> PluggableButtonMorph>>extent:
> Pharo3Theme(UITheme)>>newButtonIn:for:getState:action:arguments:getEnabled:label:help:
> Pharo3Theme(UITheme)>>newTaskbarButtonIn:for:
> SpecWindow(SystemWindow)>>taskbarButtonFor:
> TaskbarTask>>taskbarButtonFor:
> [ :t |
> | button |
> button := t taskbarButtonFor: self.
> button ifNotNil: [ self addMorphBack: button ] ] in TaskbarMorph>>updateTaskButtons in Block: [ :t | ...
> OrderedCollection>>do:
> TaskbarMorph>>updateTaskButtons
> TaskbarMorph>>updateTasks
> [ self updateBounds.
> self updateTasks ] in TaskbarMorph>>ownerChanged in Block: [ self updateBounds....
> BlockClosure>>on:do:
> TaskbarMorph>>ownerChanged
> 


Reply | Threaded
Open this post in threaded view
|

Re: error on latest pharo spur 32 windows vm

EstebanLM
In reply to this post by Nicolai Hess-3-2
Hi,

yes, vmLatest is a bit unstable right now, Nicolas Cellier is working on optimising integer operations and that causes some noise in the middle.
It will be fixed soon but for the moment the “workaround” is using stable vm… I suppose next couple of days it will be fixed.

Esteban

> On 21 Mar 2016, at 08:19, Nicolai Hess <[hidden email]> wrote:
>
> PharoVM-Spur32-win-latest.zip from 18.03.16:
>
> Opening a fresh image works, but using the menu shows an error
> Improper store into indexable object
>
> Error: Improper store into indexable object
> Bitmap(Object)>>error:
> Bitmap(Object)>>errorImproperStore
> Bitmap(Object)>>at:put:
> [ :assoc |
> | theta nextIndex nextColor nextWord distance step |
> nextIndex := (assoc key * length) rounded.
> nextColor := assoc value.
> nextWord := nextColor pixelWordForDepth: 32.
> distance := nextIndex - lastIndex.
> distance = 0
>     ifTrue: [ distance := 1 ].
> step := 1.0 / distance asFloat.
> theta := 0.0.
> lastIndex + 1 to: nextIndex do: [ :i |
>     theta := theta + step.
>     "The following is an open-coded version of:
>                 color := nextColor alphaMixed: theta with: lastColor.
>                 bits at: i put: (color scaledPixelValue32).
>             "
>     bits
>         at: i
>         put: (self scaledAlphaMix: theta of: lastWord with: nextWord) ].
> lastIndex := nextIndex.
> lastColor := nextColor.
> lastWord := nextWord ] in GradientFillStyle>>computePixelRampOfSize: in Block: [ :assoc | ...
> SortedCollection(OrderedCollection)>>do:
> GradientFillStyle>>computePixelRampOfSize:
> [ :key | (GradientFillStyle new colorRamp: key) computePixelRampOfSize: 512 ] in GradientFillStyle class>>initPixelRampCache in Block: [ :key | (GradientFillStyle new colorRamp: key) co...etc...
> BlockClosure>>cull:
> [ | value |
> value := block cull: key.
> "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
> keyIndex
>     associationAt: key
>     ifAbsent: [ association := self newAssociationKey: key value: value.
>         ^ self handleMiss: association ] ] in [ | association |
> association := keyIndex
>     associationAt: key
>     ifAbsent: [ | value |
>         value := block cull: key.
>         "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
>         keyIndex
>             associationAt: key
>             ifAbsent: [ association := self newAssociationKey: key value: value.
>                 ^ self handleMiss: association ] ].
> ^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | value |...
> Dictionary>>associationAt:ifAbsent:
> [ | association |
> association := keyIndex
>     associationAt: key
>     ifAbsent: [ | value |
>         value := block cull: key.
>         "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
>         keyIndex
>             associationAt: key
>             ifAbsent: [ association := self newAssociationKey: key value: value.
>                 ^ self handleMiss: association ] ].
> ^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | association |...
> UndefinedObject>>ifNil:ifNotNil:
> LRUCache(AbstractCache)>>critical:
> LRUCache>>at:ifAbsentPut:
> LRUCache(AbstractCache)>>at:
> GradientFillStyle>>pixelRamp
> BalloonEngine>>registerFill:
> BalloonEngine>>registerFills:
> BalloonEngine>>registerFill:and:
> BalloonEngine>>drawRectangle:fill:borderWidth:borderColor:transform:
> BalloonCanvas>>drawRectangle:color:borderWidth:borderColor:
> BalloonCanvas>>fillRectangle:basicFillStyle:
> FormCanvas>>balloonFillRectangle:fillStyle:
> FormCanvas>>fillRectangle:basicFillStyle:
> GradientFillStyle(FillStyle)>>fillRectangle:on:
> FormCanvas(Canvas)>>fillRectangle:fillStyle:
> FormCanvas(Canvas)>>fillRectangle:fillStyle:borderStyle:
> MenuMorph(Morph)>>drawOn:
> MenuMorph>>drawOn:
> FormCanvas(Canvas)>>draw:
> Error: Improper store into indexable object
> Bitmap(Object)>>error:
> Bitmap(Object)>>errorImproperStore
> Bitmap(Object)>>at:put:
> [ :assoc |
> | theta nextIndex nextColor nextWord distance step |
> nextIndex := (assoc key * length) rounded.
> nextColor := assoc value.
> nextWord := nextColor pixelWordForDepth: 32.
> distance := nextIndex - lastIndex.
> distance = 0
>     ifTrue: [ distance := 1 ].
> step := 1.0 / distance asFloat.
> theta := 0.0.
> lastIndex + 1 to: nextIndex do: [ :i |
>     theta := theta + step.
>     "The following is an open-coded version of:
>                 color := nextColor alphaMixed: theta with: lastColor.
>                 bits at: i put: (color scaledPixelValue32).
>             "
>     bits
>         at: i
>         put: (self scaledAlphaMix: theta of: lastWord with: nextWord) ].
> lastIndex := nextIndex.
> lastColor := nextColor.
> lastWord := nextWord ] in GradientFillStyle>>computePixelRampOfSize: in Block: [ :assoc | ...
> SortedCollection(OrderedCollection)>>do:
> GradientFillStyle>>computePixelRampOfSize:
> [ :key | (GradientFillStyle new colorRamp: key) computePixelRampOfSize: 512 ] in GradientFillStyle class>>initPixelRampCache in Block: [ :key | (GradientFillStyle new colorRamp: key) co...etc...
> BlockClosure>>cull:
> [ | value |
> value := block cull: key.
> "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
> keyIndex
>     associationAt: key
>     ifAbsent: [ association := self newAssociationKey: key value: value.
>         ^ self handleMiss: association ] ] in [ | association |
> association := keyIndex
>     associationAt: key
>     ifAbsent: [ | value |
>         value := block cull: key.
>         "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
>         keyIndex
>             associationAt: key
>             ifAbsent: [ association := self newAssociationKey: key value: value.
>                 ^ self handleMiss: association ] ].
> ^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | value |...
> Dictionary>>associationAt:ifAbsent:
> [ | association |
> association := keyIndex
>     associationAt: key
>     ifAbsent: [ | value |
>         value := block cull: key.
>         "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
>         keyIndex
>             associationAt: key
>             ifAbsent: [ association := self newAssociationKey: key value: value.
>                 ^ self handleMiss: association ] ].
> ^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | association |...
> UndefinedObject>>ifNil:ifNotNil:
> LRUCache(AbstractCache)>>critical:
> LRUCache>>at:ifAbsentPut:
> LRUCache(AbstractCache)>>at:
> GradientFillStyle>>pixelRamp
> GradientFillStyle>>=
> PluggableButtonMorph(Morph)>>fillStyle:
> PluggableButtonMorph>>extent:
> Pharo3Theme(UITheme)>>newButtonIn:for:getState:action:arguments:getEnabled:label:help:
> Pharo3Theme(UITheme)>>newTaskbarButtonIn:for:
> SpecWindow(SystemWindow)>>taskbarButtonFor:
> TaskbarTask>>taskbarButtonFor:
> [ :t |
> | button |
> button := t taskbarButtonFor: self.
> button ifNotNil: [ self addMorphBack: button ] ] in TaskbarMorph>>updateTaskButtons in Block: [ :t | ...
> OrderedCollection>>do:
> TaskbarMorph>>updateTaskButtons
> TaskbarMorph>>updateTasks
> [ self updateBounds.
> self updateTasks ] in TaskbarMorph>>ownerChanged in Block: [ self updateBounds....
> BlockClosure>>on:do:
> TaskbarMorph>>ownerChanged
> 


Reply | Threaded
Open this post in threaded view
|

Re: error on latest pharo spur 32 windows vm

Nicolai Hess-3-2
In reply to this post by Max Leske


2016-03-21 8:26 GMT+01:00 Max Leske <[hidden email]>:
That’s a problem with the latest VM. You need to use the stable VM until Esteban has compiled a fixed version.


Thanks, yes, stable works, I just wanted to let you know :-)
 
Cheers,
Max


> On 21 Mar 2016, at 08:19, Nicolai Hess <[hidden email]> wrote:
>
> PharoVM-Spur32-win-latest.zip from 18.03.16:
>
> Opening a fresh image works, but using the menu shows an error
> Improper store into indexable object
>
>  [31mError: Improper store into indexable object
>  [0mBitmap(Object)>>error:
> Bitmap(Object)>>errorImproperStore
> Bitmap(Object)>>at:put:
> [ :assoc |
> | theta nextIndex nextColor nextWord distance step |
> nextIndex := (assoc key * length) rounded.
> nextColor := assoc value.
> nextWord := nextColor pixelWordForDepth: 32.
> distance := nextIndex - lastIndex.
> distance = 0
>     ifTrue: [ distance := 1 ].
> step := 1.0 / distance asFloat.
> theta := 0.0.
> lastIndex + 1 to: nextIndex do: [ :i |
>     theta := theta + step.
>     "The following is an open-coded version of:
>                 color := nextColor alphaMixed: theta with: lastColor.
>                 bits at: i put: (color scaledPixelValue32).
>             "
>     bits
>         at: i
>         put: (self scaledAlphaMix: theta of: lastWord with: nextWord) ].
> lastIndex := nextIndex.
> lastColor := nextColor.
> lastWord := nextWord ] in GradientFillStyle>>computePixelRampOfSize: in Block: [ :assoc | ...
> SortedCollection(OrderedCollection)>>do:
> GradientFillStyle>>computePixelRampOfSize:
> [ :key | (GradientFillStyle new colorRamp: key) computePixelRampOfSize: 512 ] in GradientFillStyle class>>initPixelRampCache in Block: [ :key | (GradientFillStyle new colorRamp: key) co...etc...
> BlockClosure>>cull:
> [ | value |
> value := block cull: key.
> "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
> keyIndex
>     associationAt: key
>     ifAbsent: [ association := self newAssociationKey: key value: value.
>         ^ self handleMiss: association ] ] in [ | association |
> association := keyIndex
>     associationAt: key
>     ifAbsent: [ | value |
>         value := block cull: key.
>         "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
>         keyIndex
>             associationAt: key
>             ifAbsent: [ association := self newAssociationKey: key value: value.
>                 ^ self handleMiss: association ] ].
> ^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | value |...
> Dictionary>>associationAt:ifAbsent:
> [ | association |
> association := keyIndex
>     associationAt: key
>     ifAbsent: [ | value |
>         value := block cull: key.
>         "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
>         keyIndex
>             associationAt: key
>             ifAbsent: [ association := self newAssociationKey: key value: value.
>                 ^ self handleMiss: association ] ].
> ^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | association |...
> UndefinedObject>>ifNil:ifNotNil:
> LRUCache(AbstractCache)>>critical:
> LRUCache>>at:ifAbsentPut:
> LRUCache(AbstractCache)>>at:
> GradientFillStyle>>pixelRamp
> BalloonEngine>>registerFill:
> BalloonEngine>>registerFills:
> BalloonEngine>>registerFill:and:
> BalloonEngine>>drawRectangle:fill:borderWidth:borderColor:transform:
> BalloonCanvas>>drawRectangle:color:borderWidth:borderColor:
> BalloonCanvas>>fillRectangle:basicFillStyle:
> FormCanvas>>balloonFillRectangle:fillStyle:
> FormCanvas>>fillRectangle:basicFillStyle:
> GradientFillStyle(FillStyle)>>fillRectangle:on:
> FormCanvas(Canvas)>>fillRectangle:fillStyle:
> FormCanvas(Canvas)>>fillRectangle:fillStyle:borderStyle:
> MenuMorph(Morph)>>drawOn:
> MenuMorph>>drawOn:
> FormCanvas(Canvas)>>draw:
>  [0m [31mError: Improper store into indexable object
>  [0mBitmap(Object)>>error:
> Bitmap(Object)>>errorImproperStore
> Bitmap(Object)>>at:put:
> [ :assoc |
> | theta nextIndex nextColor nextWord distance step |
> nextIndex := (assoc key * length) rounded.
> nextColor := assoc value.
> nextWord := nextColor pixelWordForDepth: 32.
> distance := nextIndex - lastIndex.
> distance = 0
>     ifTrue: [ distance := 1 ].
> step := 1.0 / distance asFloat.
> theta := 0.0.
> lastIndex + 1 to: nextIndex do: [ :i |
>     theta := theta + step.
>     "The following is an open-coded version of:
>                 color := nextColor alphaMixed: theta with: lastColor.
>                 bits at: i put: (color scaledPixelValue32).
>             "
>     bits
>         at: i
>         put: (self scaledAlphaMix: theta of: lastWord with: nextWord) ].
> lastIndex := nextIndex.
> lastColor := nextColor.
> lastWord := nextWord ] in GradientFillStyle>>computePixelRampOfSize: in Block: [ :assoc | ...
> SortedCollection(OrderedCollection)>>do:
> GradientFillStyle>>computePixelRampOfSize:
> [ :key | (GradientFillStyle new colorRamp: key) computePixelRampOfSize: 512 ] in GradientFillStyle class>>initPixelRampCache in Block: [ :key | (GradientFillStyle new colorRamp: key) co...etc...
> BlockClosure>>cull:
> [ | value |
> value := block cull: key.
> "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
> keyIndex
>     associationAt: key
>     ifAbsent: [ association := self newAssociationKey: key value: value.
>         ^ self handleMiss: association ] ] in [ | association |
> association := keyIndex
>     associationAt: key
>     ifAbsent: [ | value |
>         value := block cull: key.
>         "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
>         keyIndex
>             associationAt: key
>             ifAbsent: [ association := self newAssociationKey: key value: value.
>                 ^ self handleMiss: association ] ].
> ^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | value |...
> Dictionary>>associationAt:ifAbsent:
> [ | association |
> association := keyIndex
>     associationAt: key
>     ifAbsent: [ | value |
>         value := block cull: key.
>         "Sadly we have to check the presence of key again
>                 in case of the block execution already added the entry"
>         keyIndex
>             associationAt: key
>             ifAbsent: [ association := self newAssociationKey: key value: value.
>                 ^ self handleMiss: association ] ].
> ^ self handleHit: association ] in LRUCache>>at:ifAbsentPut: in Block: [ | association |...
> UndefinedObject>>ifNil:ifNotNil:
> LRUCache(AbstractCache)>>critical:
> LRUCache>>at:ifAbsentPut:
> LRUCache(AbstractCache)>>at:
> GradientFillStyle>>pixelRamp
> GradientFillStyle>>=
> PluggableButtonMorph(Morph)>>fillStyle:
> PluggableButtonMorph>>extent:
> Pharo3Theme(UITheme)>>newButtonIn:for:getState:action:arguments:getEnabled:label:help:
> Pharo3Theme(UITheme)>>newTaskbarButtonIn:for:
> SpecWindow(SystemWindow)>>taskbarButtonFor:
> TaskbarTask>>taskbarButtonFor:
> [ :t |
> | button |
> button := t taskbarButtonFor: self.
> button ifNotNil: [ self addMorphBack: button ] ] in TaskbarMorph>>updateTaskButtons in Block: [ :t | ...
> OrderedCollection>>do:
> TaskbarMorph>>updateTaskButtons
> TaskbarMorph>>updateTasks
> [ self updateBounds.
> self updateTasks ] in TaskbarMorph>>ownerChanged in Block: [ self updateBounds....
> BlockClosure>>on:do:
> TaskbarMorph>>ownerChanged
>  [0m