[squeak-dev] strange test failure

Eliot Miranda eliot.miranda at gmail.com
Thu Jan 20 17:34:12 UTC 2011


Hi Chris,

On Thu, Jan 20, 2011 at 8:55 AM, Chris Muller <asqueaker at gmail.com> wrote:

> One of the tests only fails in Cog, with a very strange phenomena.
>
> It's easy to reproduce with the line of code from the test:
>
>     ObjectsTool initializedInstance showAll openCenteredInWorld
>
> the strange part is in the passing of the "(colors at: i)" argument
> from ColorForm>>colormapIfNeededForDepth:.  As you can see in the
> stack trace below (or in debugger from above expression), the third
> element is definitely an instance of Color.
>
> Yet, the message ends up being sent to a LargePositiveInteger,
> 4278192128 to be exact.
>

This bug is understood and fixed in my sources and I'll roll out new VMs
over the weekend.  The bug is the result of the ColorArray leaking into the
VM's atCache which means that later on it responds to at: in the Interpreter
using the at: primitive that answers the integer value in the ColorArray
without converting the value into a color.  This was a regression introduced
when I fixed the objects-as-methods issues late last year.  Thanks to
Matthew Fulmer for creating the reproducible case.

best
Eliot

>
>  - Chris
>
>
>
> Subject: [BUG]LargePositiveInteger(Object)>>doesNotUnderstand:
> #pixelValueForDepth:
> 19 January 2011 7:59:01.819 pm
>
> VM: unix - Smalltalk
> Image: Squeak4.2alpha [latest update: #10910]
>
> SecurityManager state:
> Restricted: false
> FileAccess: true
> SocketAccess: true
>
> LargePositiveInteger(Object)>>doesNotUnderstand: #pixelValueForDepth:
>        Receiver: 4278192128
>        Arguments and temporary variables:
>                aMessage:       pixelValueForDepth: 32
>                exception:      MessageNotUnderstood:
> LargePositiveInteger>>pixelValueForDepth:
>                resumeValue:    nil
>        Receiver's instance variables:
> 4278192128
>
> ColorForm>>colormapIfNeededForDepth:
>        Receiver: ColorForm(52x29x8)
>        Arguments and temporary variables:
>                destDepth:      32
>                newMap:         a Bitmap of length 256
>                i:      3
>                iLimiT:         256
>        Receiver's instance variables:
>                bits:   #[225 121 17 227 23 227 219 212 205 189 188 174 187
> 185 156
> 164 156 157 1...etc...
>                width:  52
>                height:         29
>                depth:  8
>                offset:         0 at 0
>                colors:         a ColorArray(Color transparent (Color r: 0.0
> g: 0.0 b:
> 0.031) (Color r:...etc...
>                cachedDepth:    nil
>                cachedColormap:         nil
>
> ColorForm>>colormapIfNeededFor:
>        Receiver: ColorForm(52x29x8)
>        Arguments and temporary variables:
>                destForm:       Form(212x49x32)
>                newMap:         nil
>                color:  nil
>                pv:     nil
>                i:      nil
>                iLimiT:         nil
>        Receiver's instance variables:
>                bits:   #[225 121 17 227 23 227 219 212 205 189 188 174 187
> 185 156
> 164 156 157 1...etc...
>                width:  52
>                height:         29
>                depth:  8
>                offset:         0 at 0
>                colors:         a ColorArray(Color transparent (Color r: 0.0
> g: 0.0 b:
> 0.031) (Color r:...etc...
>                cachedDepth:    nil
>                cachedColormap:         nil
>
> FormCanvas>>image:at:sourceRect:rule:
>        Receiver: a FormCanvas on: Form(212x49x32)
>        Arguments and temporary variables:
>                aForm:  ColorForm(52x29x8)
>                aPoint:         131 at 10
>                sourceRect:     0 at 0 corner: 52 at 29
>                rule:   24
>        Receiver's instance variables:
>                target:         nil
>                filterSelector:         nil
>                origin:         0 at 0
>                clipRect:       0 at 0 corner: 212 at 49
>                form:   Form(212x49x32)
>                port:   a GrafPort
>                shadowColor:    nil
>
> FormCanvas(Canvas)>>translucentImage:at:sourceRect:
>        Receiver: a FormCanvas on: Form(212x49x32)
>        Arguments and temporary variables:
>                aForm:  ColorForm(52x29x8)
>                aPoint:         131 at 10
>                sourceRect:     0 at 0 corner: 52 at 29
>        Receiver's instance variables:
>                target:         nil
>                filterSelector:         nil
>                origin:         0 at 0
>                clipRect:       0 at 0 corner: 212 at 49
>                form:   Form(212x49x32)
>                port:   a GrafPort
>                shadowColor:    nil
>
> FormCanvas(Canvas)>>translucentImage:at:
>        Receiver: a FormCanvas on: Form(212x49x32)
>        Arguments and temporary variables:
>                aForm:  ColorForm(52x29x8)
>                aPoint:         131 at 10
>        Receiver's instance variables:
>                target:         nil
>                filterSelector:         nil
>                origin:         0 at 0
>                clipRect:       0 at 0 corner: 212 at 49
>                form:   Form(212x49x32)
>                port:   a GrafPort
>                shadowColor:    nil
>
> ThreePhaseButtonMorph>>drawOn:
>        Receiver: 3PButton(#goUp:with: 3545)
>        Arguments and temporary variables:
>                aCanvas:        a FormCanvas on: Form(212x49x32)
>        Receiver's instance variables:
>                bounds:         131 at 10 corner: 183 at 39
>                owner:  an AlignmentMorph<script controls>(2589)
>                submorphs:      #()
>                fullBounds:     131 at 10 corner: 183 at 39
>                color:  Color blue
>                extension:      a MorphExtension (3716) [balloonText]
>  [externalName =
> Go Button ]
>                image:  ColorForm(52x29x8)
>                offImage:       ColorForm(52x29x8)
>                pressedImage:   ColorForm(52x29x8)
>                state:  #off
>                target:         a StandardScriptingSystem
>                actionSelector:         #goUp:with:
>                arguments:      {nil . 3PButton(#goUp:with: 3545)}
>                actWhen:        #buttonUp
>
> FormCanvas(Canvas)>>draw:
>        Receiver: a FormCanvas on: Form(212x49x32)
>        Arguments and temporary variables:
>                anObject:       3PButton(#goUp:with: 3545)
>        Receiver's instance variables:
>                target:         nil
>                filterSelector:         nil
>                origin:         0 at 0
>                clipRect:       0 at 0 corner: 212 at 49
>                form:   Form(212x49x32)
>                port:   a GrafPort
>                shadowColor:    nil
>
> FormCanvas(Canvas)>>drawMorph:
>        Receiver: a FormCanvas on: Form(212x49x32)
>        Arguments and temporary variables:
>                aMorph:         3PButton(#goUp:with: 3545)
>        Receiver's instance variables:
>                target:         nil
>                filterSelector:         nil
>                origin:         0 at 0
>                clipRect:       0 at 0 corner: 212 at 49
>                form:   Form(212x49x32)
>                port:   a GrafPort
>                shadowColor:    nil
>
> [] in ThreePhaseButtonMorph(Morph)>>fullDrawOn:
>        Receiver: 3PButton(#goUp:with: 3545)
>        Arguments and temporary variables:
>                aCanvas:        a FormCanvas on: Form(212x49x32)
>        Receiver's instance variables:
>                bounds:         131 at 10 corner: 183 at 39
>                owner:  an AlignmentMorph<script controls>(2589)
>                submorphs:      #()
>                fullBounds:     131 at 10 corner: 183 at 39
>                color:  Color blue
>                extension:      a MorphExtension (3716) [balloonText]
>  [externalName =
> Go Button ]
>                image:  ColorForm(52x29x8)
>                offImage:       ColorForm(52x29x8)
>                pressedImage:   ColorForm(52x29x8)
>                state:  #off
>                target:         a StandardScriptingSystem
>                actionSelector:         #goUp:with:
>                arguments:      {nil . 3PButton(#goUp:with: 3545)}
>                actWhen:        #buttonUp
>
> FormCanvas>>roundCornersOf:in:during:
>        Receiver: a FormCanvas on: Form(212x49x32)
>        Arguments and temporary variables:
>                aMorph:         3PButton(#goUp:with: 3545)
>                bounds:         131 at 10 corner: 183 at 39
>                aBlock:         [closure] in
> ThreePhaseButtonMorph(Morph)>>fullDrawOn:
>        Receiver's instance variables:
>                target:         nil
>                filterSelector:         nil
>                origin:         0 at 0
>                clipRect:       0 at 0 corner: 212 at 49
>                form:   Form(212x49x32)
>                port:   a GrafPort
>                shadowColor:    nil
>
> FormCanvas(Canvas)>>roundCornersOf:during:
>        Receiver: a FormCanvas on: Form(212x49x32)
>        Arguments and temporary variables:
>                aMorph:         3PButton(#goUp:with: 3545)
>                aBlock:         [closure] in
> ThreePhaseButtonMorph(Morph)>>fullDrawOn:
>        Receiver's instance variables:
>                target:         nil
>                filterSelector:         nil
>                origin:         0 at 0
>                clipRect:       0 at 0 corner: 212 at 49
>                form:   Form(212x49x32)
>                port:   a GrafPort
>                shadowColor:    nil
>
> ThreePhaseButtonMorph(Morph)>>fullDrawOn:
>        Receiver: 3PButton(#goUp:with: 3545)
>        Arguments and temporary variables:
>                aCanvas:        a FormCanvas on: Form(212x49x32)
>        Receiver's instance variables:
>                bounds:         131 at 10 corner: 183 at 39
>                owner:  an AlignmentMorph<script controls>(2589)
>                submorphs:      #()
>                fullBounds:     131 at 10 corner: 183 at 39
>                color:  Color blue
>                extension:      a MorphExtension (3716) [balloonText]
>  [externalName =
> Go Button ]
>                image:  ColorForm(52x29x8)
>                offImage:       ColorForm(52x29x8)
>                pressedImage:   ColorForm(52x29x8)
>                state:  #off
>                target:         a StandardScriptingSystem
>                actionSelector:         #goUp:with:
>                arguments:      {nil . 3PButton(#goUp:with: 3545)}
>                actWhen:        #buttonUp
>
> FormCanvas(Canvas)>>fullDraw:
>        Receiver: a FormCanvas on: Form(212x49x32)
>        Arguments and temporary variables:
>                anObject:       3PButton(#goUp:with: 3545)
>        Receiver's instance variables:
>                target:         nil
>                filterSelector:         nil
>                origin:         0 at 0
>                clipRect:       0 at 0 corner: 212 at 49
>                form:   Form(212x49x32)
>                port:   a GrafPort
>                shadowColor:    nil
>
> FormCanvas(Canvas)>>fullDrawMorph:
>        Receiver: a FormCanvas on: Form(212x49x32)
>        Arguments and temporary variables:
>                aMorph:         3PButton(#goUp:with: 3545)
>        Receiver's instance variables:
>                target:         nil
>                filterSelector:         nil
>                origin:         0 at 0
>                clipRect:       0 at 0 corner: 212 at 49
>                form:   Form(212x49x32)
>                port:   a GrafPort
>                shadowColor:    nil
>
> [] in [] in AlignmentMorph(Morph)>>drawSubmorphsOn:
>        Receiver: an AlignmentMorph<script controls>(2589)
>        Arguments and temporary variables:
> <<error during printing>
>        Receiver's instance variables:
>                bounds:         25 at 8 corner: 185 at 41
>                owner:  an AlignmentMorph(1206)
>                submorphs:      {3PButton(#stopUp:with: 2931) .
> 3PButton(#stepStillDown:with: 3201) ...etc...
>                fullBounds:     25 at 8 corner: 185 at 41
>                color:  Color transparent
>                extension:      a MorphExtension (2601) [externalName =
> script controls
> ]  [other:  ...etc...
>                borderWidth:    0
>                borderColor:    Color black
>
> Array(SequenceableCollection)>>reverseDo:
>        Receiver: {3PButton(#stopUp:with: 2931) .
> 3PButton(#stepStillDown:with: 3201) . 3PButton(#goUp:with:...etc...
>        Arguments and temporary variables:
>                aBlock:         [closure] in [] in
> AlignmentMorph(Morph)>>drawSubmorphsOn:
>                index:  3
>        Receiver's instance variables:
> {3PButton(#stopUp:with: 2931) . 3PButton(#stepStillDown:with: 3201) .
> 3PButton(#goUp:with:...etc...
>
> [] in AlignmentMorph(Morph)>>drawSubmorphsOn:
>        Receiver: an AlignmentMorph<script controls>(2589)
>        Arguments and temporary variables:
> <<error during printing>
>        Receiver's instance variables:
>                bounds:         25 at 8 corner: 185 at 41
>                owner:  an AlignmentMorph(1206)
>                submorphs:      {3PButton(#stopUp:with: 2931) .
> 3PButton(#stepStillDown:with: 3201) ...etc...
>                fullBounds:     25 at 8 corner: 185 at 41
>                color:  Color transparent
>                extension:      a MorphExtension (2601) [externalName =
> script controls
> ]  [other:  ...etc...
>                borderWidth:    0
>                borderColor:    Color black
>
> AlignmentMorph(Morph)>>drawSubmorphsOn:
>        Receiver: an AlignmentMorph<script controls>(2589)
>        Arguments and temporary variables:
>                aCanvas:        a FormCanvas on: Form(212x49x32)
>                drawBlock:      [closure] in
> AlignmentMorph(Morph)>>drawSubmorphsOn:
>        Receiver's instance variables:
>                bounds:         25 at 8 corner: 185 at 41
>                owner:  an AlignmentMorph(1206)
>                submorphs:      {3PButton(#stopUp:with: 2931) .
> 3PButton(#stepStillDown:with: 3201) ...etc...
>                fullBounds:     25 at 8 corner: 185 at 41
>                color:  Color transparent
>                extension:      a MorphExtension (2601) [externalName =
> script controls
> ]  [other:  ...etc...
>                borderWidth:    0
>                borderColor:    Color black
>
>
> --- The full stack ---
> LargePositiveInteger(Object)>>doesNotUnderstand: #pixelValueForDepth:
> ColorForm>>colormapIfNeededForDepth:
> ColorForm>>colormapIfNeededFor:
> FormCanvas>>image:at:sourceRect:rule:
> FormCanvas(Canvas)>>translucentImage:at:sourceRect:
> FormCanvas(Canvas)>>translucentImage:at:
> ThreePhaseButtonMorph>>drawOn:
> FormCanvas(Canvas)>>draw:
> FormCanvas(Canvas)>>drawMorph:
> [] in ThreePhaseButtonMorph(Morph)>>fullDrawOn:
> FormCanvas>>roundCornersOf:in:during:
> FormCanvas(Canvas)>>roundCornersOf:during:
> ThreePhaseButtonMorph(Morph)>>fullDrawOn:
> FormCanvas(Canvas)>>fullDraw:
> FormCanvas(Canvas)>>fullDrawMorph:
> [] in [] in AlignmentMorph(Morph)>>drawSubmorphsOn:
> Array(SequenceableCollection)>>reverseDo:
> [] in AlignmentMorph(Morph)>>drawSubmorphsOn:
> AlignmentMorph(Morph)>>drawSubmorphsOn:
>  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> [] in AlignmentMorph(Morph)>>fullDrawOn:
> FormCanvas>>roundCornersOf:in:during:
> FormCanvas(Canvas)>>roundCornersOf:during:
> AlignmentMorph(Morph)>>fullDrawOn:
> FormCanvas(Canvas)>>fullDraw:
> FormCanvas(Canvas)>>fullDrawMorph:
> [] in [] in AlignmentMorph(Morph)>>drawSubmorphsOn:
> Array(SequenceableCollection)>>reverseDo:
> [] in AlignmentMorph(Morph)>>drawSubmorphsOn:
> AlignmentMorph(Morph)>>drawSubmorphsOn:
> [] in AlignmentMorph(Morph)>>fullDrawOn:
> FormCanvas>>roundCornersOf:in:during:
> FormCanvas(Canvas)>>roundCornersOf:during:
> AlignmentMorph(Morph)>>fullDrawOn:
> FormCanvas(Canvas)>>fullDraw:
> FormCanvas(Canvas)>>fullDrawMorph:
> [] in [] in AllScriptsTool(Morph)>>drawSubmorphsOn:
> Array(SequenceableCollection)>>reverseDo:
> [] in AllScriptsTool(Morph)>>drawSubmorphsOn:
> AllScriptsTool(Morph)>>drawSubmorphsOn:
> [] in AllScriptsTool(Morph)>>fullDrawOn:
> CornerRounder class>>roundCornersOf:on:in:displayBlock:borderWidth:corners:
> FormCanvas>>roundCornersOf:in:during:
> FormCanvas(Canvas)>>roundCornersOf:during:
> AllScriptsTool(Morph)>>fullDrawOn:
> FormCanvas(Canvas)>>fullDraw:
> FormCanvas(Canvas)>>fullDrawMorph:
> [] in AllScriptsTool(Morph)>>imageForm:backgroundColor:forRectangle:
> FormCanvas>>translateBy:during:
> AllScriptsTool(Morph)>>imageForm:backgroundColor:forRectangle:
> PartsBin class>>thumbnailForQuad:color:
> [] in PartsBin>>listDirection:quadList:buttonClass:
> SortedCollection(OrderedCollection)>>do:
> PartsBin>>listDirection:quadList:buttonClass:
> PartsBin>>listDirection:quadList:
> ObjectsTool>>installQuads:fromButton:
> [] in ObjectsTool>>showAll
> BlockClosure>>ensure:
> CursorWithMask(Cursor)>>showWhile:
> ObjectsTool>>showAll
> MorphicUIBugTest class>>DoIt
> Compiler>>evaluate:in:to:notifying:ifFail:logged:
> -- and more not shown --
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20110120/3d3bf831/attachment.htm


More information about the Squeak-dev mailing list