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 |
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 > > [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 |
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 > > [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 |
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, |
Free forum by Nabble | Edit this page |