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 <[email protected]> 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
