[BUG]UndefinedObject(Object)>>doesNotUnderstand: #update

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

[BUG]UndefinedObject(Object)>>doesNotUnderstand: #update

Ben Coman

I was using DrGeo for the first time from the bundled release 11.08 on
Windows 7.  About 30 minutes in I drew three equally intersecting
circles, added a reflection line with each circle reflected.  I added a
free point with a middle (I think to a circle) and was trying to add a
locus.

When moving any of the points defining the circles I am getting a dozen
or more cascading MNUs down the screen.  Moving the reflection line
still works okay.

The error occurs in following method...
DrGeo>>updateDirtyCostumes
    self presenter tool costumes do: [ :each | each update ].
    self area changed

In the debugger inspecting "self presenter tool costumes" returns nil.  
While I can't judge whether returning nil is valid here, as a Smalltalk
newbie what I am really interested in is:

1. The semantics of sending a "do:" message to nil.  By the principle of
least surprise I would expect that it would do ...nothing, whereas here
it tries later sending the "update" method to it.

2. Why in lines 0027 and 0641 is the "do:" method received by
OrderedCollection and not UndefinedObject? Actually I can't see "do:" in
the hierarchy of UndefinedObject, so why does UndefinedObject not raise
a MNU for "do:" ?

The image with the error is available at...
http://blog.openinworld.com/miscfiles/DrGeo-updateDirtyCostumes-MNU-2011-10-22-btc.zip

The stack trace generated by the <Mail out bug report> menu item is
below. I wasn't sure how much of it to cut or leave, so I've left it all.
------------------8<-------------------------
00000001 22 October 2011 10:27:03 pm
00000002
00000003 VM: Win32 - IX86 - NT - Squeak3.10.2 of 11 February 2010
[latest update: #9314]
00000004 Image: Pharo1.3 [Latest update: #13293]
00000005
00000006 UndefinedObject(Object)>>doesNotUnderstand: #update
00000007     Receiver: nil
00000008     Arguments and temporary variables:
00000009         aMessage:     update
00000010         exception:     MessageNotUnderstood: receiver of
"update" is nil
00000011         resumeValue:     nil
00000012     Receiver's instance variables:
00000013 nil
00000014
00000015 [:each | each update] in DrGeo>>updateDirtyCostumes
00000016     Receiver: a DrGeo
00000017     Arguments and temporary variables:
00000018         each:     nil
00000019     Receiver's instance variables:
00000020         view:     a DrGeoWindow(378798080)
00000021         domain:     a DrGeoDomain
00000022         costumes:     an OrderedCollection(a DrGPointCostume a
DrGPointCostume a DrGCircleC...etc...
00000023         undoneCostumes:     an OrderedCollection(a
DrGPointCostume a DrGLineCostume a DrGLi...etc...
00000024         presenter:     a DrGeoPresenter
00000025         isLoading:     false
00000026
00000027 OrderedCollection>>do:
00000028     Receiver: an OrderedCollection(a DrGPointCostume a
DrGCircleCostume a DrGCircleCostume a DrGPointCos...etc...
00000029     Arguments and temporary variables:
00000030         aBlock:     [:each | each update]
00000031         index:     10
00000032     Receiver's instance variables:
00000033         array:     an Array(a DrGPointCostume a
DrGCircleCostume a DrGCircleCostume a DrGPo...etc...
00000034         firstIndex:     1
00000035         lastIndex:     11
00000036
00000037 DrGeo>>updateDirtyCostumes
00000038     Receiver: a DrGeo
00000039     Arguments and temporary variables:
00000040
00000041     Receiver's instance variables:
00000042         view:     a DrGeoWindow(378798080)
00000043         domain:     a DrGeoDomain
00000044         costumes:     an OrderedCollection(a DrGPointCostume a
DrGPointCostume a DrGCircleC...etc...
00000045         undoneCostumes:     an OrderedCollection(a
DrGPointCostume a DrGLineCostume a DrGLi...etc...
00000046         presenter:     a DrGeoPresenter
00000047         isLoading:     false
00000048
00000049 WeakMessageSend>>value
00000050     Receiver: WeakMessageSend(#updateDirtyCostumes -> a DrGeo)
00000051     Arguments and temporary variables:
00000052
00000053     Receiver's instance variables:
00000054         selector:     #updateDirtyCostumes
00000055         shouldBeNil:     #()
00000056         arguments:     a WeakArray()
00000057
00000058 DrGeoDomain(Object)>>triggerEvent:
00000059     Receiver: a DrGeoDomain
00000060     Arguments and temporary variables:
00000061         anEventSelector:     #updatedDirtyItems
00000062     Receiver's instance variables:
00000063         dependents:     a DependentsArray(a DrGeoWindow(378798080))
00000064         factory:     a DrGMathItemFactory
00000065         cmdManager:     a DrGCommandManager
00000066         actionMap:     an
IdentityDictionary(#groupCostumes->WeakMessageSend(#groupCostumes...etc...
00000067
00000068 DrGeoDomain>>updateDirty:
00000069     Receiver: a DrGeoDomain
00000070     Arguments and temporary variables:
00000071         mathItems:     an OrderedCollection(a DrGPointFreeItem
a DrGCircle2ptsItem a DrGCir...etc...
00000072     Receiver's instance variables:
00000073         dependents:     a DependentsArray(a DrGeoWindow(378798080))
00000074         factory:     a DrGMathItemFactory
00000075         cmdManager:     a DrGCommandManager
00000076         actionMap:     an
IdentityDictionary(#groupCostumes->WeakMessageSend(#groupCostumes...etc...
00000077
00000078 DrGeoDomain>>moveEvent:inDirection:withDirty:
00000079     Receiver: a DrGeoDomain
00000080     Arguments and temporary variables:
00000081         aMathItem:     a DrGPointFreeItem
00000082         aPoint:     0.9705882352941176@ -1.0588235294117647
00000083         mathItems:     an OrderedCollection(a DrGPointFreeItem
a DrGCircle2ptsItem a DrGCir...etc...
00000084     Receiver's instance variables:
00000085         dependents:     a DependentsArray(a DrGeoWindow(378798080))
00000086         factory:     a DrGMathItemFactory
00000087         cmdManager:     a DrGCommandManager
00000088         actionMap:     an
IdentityDictionary(#groupCostumes->WeakMessageSend(#groupCostumes...etc...
00000089
00000090 DrGSelectToolStateDragged>>handleMouseAt:
00000091     Receiver: a DrGSelectToolStateDragged
00000092     Arguments and temporary variables:
00000093         aPoint:     368@255
00000094         griddedPoint:     368@255
00000095     Receiver's instance variables:
00000096         context:     a DrGSelectTool
00000097
00000098 DrGSelectTool(DrGDynamicTool)>>handleMouseAt:
00000099     Receiver: a DrGSelectTool
00000100     Arguments and temporary variables:
00000101         aPoint:     368@255
00000102     Receiver's instance variables:
00000103         state:     a DrGSelectToolStateNeutral
00000104         presenter:     a DrGeoPresenter
00000105         spot:     nil
00000106         last:     nil
00000107         costume:     nil
00000108         mathItemUnderMouse:     nil
00000109         start:     nil
00000110         mathItems:     nil
00000111         costumes:     nil
00000112
00000113 DrGDrawable>>mouseMove:
00000114     Receiver: a DrGDrawable(1072168960)
00000115     Arguments and temporary variables:
00000116         evt:     [367@253 368@255 mouseMove red 191104532 nil]
00000117     Receiver's instance variables:
00000118         bounds:     5@105 corner: 1184@640
00000119         owner:     a DrGeoWindow(378798080)
00000120         submorphs:     an Array(a DrGLabelMorph(121372672)' ' a
DrGLabelMorph(20709376)'a' ...etc...
00000121         fullBounds:     5@105 corner: 1184@640
00000122         color:     Color white
00000123         extension:     a MorphExtension (1037565952) [locked]  
[other:  (dragEnabled -> tru...etc...
00000124         borderWidth:     0
00000125         borderColor:     (Color r: 0.667 g: 0.667 b: 0.667)
00000126         backgroundMorph:     nil
00000127         worldState:     nil
00000128         griddingOn:     nil
00000129         balloonTarget:     a RectangleMorph(769392640)
00000130         tipOn:     true
00000131         selection:     nil
00000132         app:     a DrGeo
00000133         ox:     0.0
00000134         oy:     0.0
00000135         scale:     34.0
00000136
00000137 DrGDrawable>>handleMouseMove:
00000138     Receiver: a DrGDrawable(1072168960)
00000139     Arguments and temporary variables:
00000140         anEvent:     [367@253 368@255 mouseMove red 191104532 nil]
00000141     Receiver's instance variables:
00000142         bounds:     5@105 corner: 1184@640
00000143         owner:     a DrGeoWindow(378798080)
00000144         submorphs:     an Array(a DrGLabelMorph(121372672)' ' a
DrGLabelMorph(20709376)'a' ...etc...
00000145         fullBounds:     5@105 corner: 1184@640
00000146         color:     Color white
00000147         extension:     a MorphExtension (1037565952) [locked]  
[other:  (dragEnabled -> tru...etc...
00000148         borderWidth:     0
00000149         borderColor:     (Color r: 0.667 g: 0.667 b: 0.667)
00000150         backgroundMorph:     nil
00000151         worldState:     nil
00000152         griddingOn:     nil
00000153         balloonTarget:     a RectangleMorph(769392640)
00000154         tipOn:     true
00000155         selection:     nil
00000156         app:     a DrGeo
00000157         ox:     0.0
00000158         oy:     0.0
00000159         scale:     34.0
00000160
00000161 MouseMoveEvent>>sentTo:
00000162     Receiver: [367@253 368@255 mouseMove red 191104532 nil]
00000163     Arguments and temporary variables:
00000164         anObject:     a DrGDrawable(1072168960)
00000165     Receiver's instance variables:
00000166         timeStamp:     191104532
00000167         source:     a HandMorph(843055104)
00000168         windowIndex:     nil
00000169         type:     #mouseMove
00000170         buttons:     4
00000171         position:     368@255
00000172         handler:     nil
00000173         wasHandled:     false
00000174         startPoint:     367@253
00000175         trail:     {(368@254). (368@255)}
00000176
00000177 DrGDrawable(Morph)>>handleEvent:
00000178     Receiver: a DrGDrawable(1072168960)
00000179     Arguments and temporary variables:
00000180         anEvent:     [367@253 368@255 mouseMove red 191104532 nil]
00000181     Receiver's instance variables:
00000182         bounds:     5@105 corner: 1184@640
00000183         owner:     a DrGeoWindow(378798080)
00000184         submorphs:     an Array(a DrGLabelMorph(121372672)' ' a
DrGLabelMorph(20709376)'a' ...etc...
00000185         fullBounds:     5@105 corner: 1184@640
00000186         color:     Color white
00000187         extension:     a MorphExtension (1037565952) [locked]  
[other:  (dragEnabled -> tru...etc...
00000188         borderWidth:     0
00000189         borderColor:     (Color r: 0.667 g: 0.667 b: 0.667)
00000190         backgroundMorph:     nil
00000191         worldState:     nil
00000192         griddingOn:     nil
00000193         balloonTarget:     a RectangleMorph(769392640)
00000194         tipOn:     true
00000195         selection:     nil
00000196         app:     a DrGeo
00000197         ox:     0.0
00000198         oy:     0.0
00000199         scale:     34.0
00000200
00000201 DrGDrawable(Morph)>>handleFocusEvent:
00000202     Receiver: a DrGDrawable(1072168960)
00000203     Arguments and temporary variables:
00000204         anEvent:     [367@253 368@255 mouseMove red 191104532 nil]
00000205     Receiver's instance variables:
00000206         bounds:     5@105 corner: 1184@640
00000207         owner:     a DrGeoWindow(378798080)
00000208         submorphs:     an Array(a DrGLabelMorph(121372672)' ' a
DrGLabelMorph(20709376)'a' ...etc...
00000209         fullBounds:     5@105 corner: 1184@640
00000210         color:     Color white
00000211         extension:     a MorphExtension (1037565952) [locked]  
[other:  (dragEnabled -> tru...etc...
00000212         borderWidth:     0
00000213         borderColor:     (Color r: 0.667 g: 0.667 b: 0.667)
00000214         backgroundMorph:     nil
00000215         worldState:     nil
00000216         griddingOn:     nil
00000217         balloonTarget:     a RectangleMorph(769392640)
00000218         tipOn:     true
00000219         selection:     nil
00000220         app:     a DrGeo
00000221         ox:     0.0
00000222         oy:     0.0
00000223         scale:     34.0
00000224
00000225 [ActiveHand := self.
00000226     ActiveEvent := anEvent.
00000227     result := focusHolder
00000228                 handleFocusEvent: (anEvent
00000229                         transformedBy: (focusHolder
transformedFrom: self))] in HandMorph>>sendFocusEvent:to:clear:
00000230     Receiver: a HandMorph(843055104)
00000231     Arguments and temporary variables:
00000232         anEvent:     [367@253 368@255 mouseMove red 191104532 nil]
00000233         focusHolder:     a DrGDrawable(1072168960)
00000234         result:     #(nil)
00000235     Receiver's instance variables:
00000236         bounds:     736@567 corner: 752@583
00000237         owner:     a PasteUpMorph(425197568) [world]
00000238         submorphs:     #()
00000239         fullBounds:     736@567 corner: 752@583
00000240         color:     Color blue
00000241         extension:     a MorphExtension (141295616)
[eventHandler = an EventHandler]
00000242         mouseFocus:     nil
00000243         keyboardFocus:     nil
00000244         eventListeners:     nil
00000245         mouseListeners:     nil
00000246         keyboardListeners:     nil
00000247         mouseClickState:     nil
00000248         mouseOverHandler:     a MouseOverHandler
00000249         lastMouseEvent:     [736@567 mouseUp 191499012 nil]
00000250         targetOffset:     148@17
00000251         damageRecorder:     a DamageRecorder
00000252         cacheCanvas:     nil
00000253         cachedCanvasHasHoles:     true
00000254         temporaryCursor:     nil
00000255         temporaryCursorOffset:     nil
00000256         hardwareCursor:     nil
00000257         hasChanged:     true
00000258         savedPatch:     nil
00000259         userInitials:     ''
00000260         lastEventBuffer:     #(1 191499012 736 567 0 0 0 1)
00000261         lastKeyScanCode:     85
00000262         combinedChar:     nil
00000263
00000264 [aBlock value] in PasteUpMorph>>becomeActiveDuring:
00000265     Receiver: a PasteUpMorph(425197568) [world]
00000266     Arguments and temporary variables:
00000267         aBlock:     [ActiveHand := self.
00000268     ActiveEvent := anEvent.
00000269     result := focusHolder
00000270         ...etc...
00000271     Receiver's instance variables:
00000272         bounds:     0@0 corner: 1264@722
00000273         owner:     nil
00000274         submorphs:     an Array(a TaskbarMorph(984088576) a
SystemWindow(552599552) a DrGeo...etc...
00000275         fullBounds:     nil
00000276         color:     (Color r: 0.97 g: 0.98 b: 1.0)
00000277         extension:     a MorphExtension (666632192)
[eventHandler = an EventHandler]  [othe...etc...
00000278         borderWidth:     0
00000279         borderColor:     (Color r: 0.03 g: 0.02 b: 0.0)
00000280         backgroundMorph:     nil
00000281         worldState:     a WorldState
00000282         griddingOn:     nil
00000283
00000284 BlockClosure>>on:do:
00000285     Receiver: [aBlock value]
00000286     Arguments and temporary variables:
00000287         exception:     Error
00000288         handlerAction:     [:ex |
00000289 ActiveWorld := priorWorld.
00000290     ActiveEvent := priorEvent.
00000291     ...etc...
00000292         handlerActive:     false
00000293     Receiver's instance variables:
00000294         outerContext:     PasteUpMorph>>becomeActiveDuring:
00000295         startpc:     67
00000296         numArgs:     0
00000297
00000298 PasteUpMorph>>becomeActiveDuring:
00000299     Receiver: a PasteUpMorph(425197568) [world]
00000300     Arguments and temporary variables:
00000301         aBlock:     [ActiveHand := self.
00000302     ActiveEvent := anEvent.
00000303     result := focusHolder
00000304         ...etc...
00000305         priorWorld:     a PasteUpMorph(425197568) [world]
00000306         priorHand:     a HandMorph(843055104)
00000307         priorEvent:     [367@253 mouseOver red nil nil]
00000308     Receiver's instance variables:
00000309         bounds:     0@0 corner: 1264@722
00000310         owner:     nil
00000311         submorphs:     an Array(a TaskbarMorph(984088576) a
SystemWindow(552599552) a DrGeo...etc...
00000312         fullBounds:     nil
00000313         color:     (Color r: 0.97 g: 0.98 b: 1.0)
00000314         extension:     a MorphExtension (666632192)
[eventHandler = an EventHandler]  [othe...etc...
00000315         borderWidth:     0
00000316         borderColor:     (Color r: 0.03 g: 0.02 b: 0.0)
00000317         backgroundMorph:     nil
00000318         worldState:     a WorldState
00000319         griddingOn:     nil
00000320
00000321 HandMorph>>sendFocusEvent:to:clear:
00000322     Receiver: a HandMorph(843055104)
00000323     Arguments and temporary variables:
00000324         anEvent:     [367@253 368@255 mouseMove red 191104532 nil]
00000325         focusHolder:     a DrGDrawable(1072168960)
00000326         aBlock:     [self mouseFocus: nil]
00000327         w:     a PasteUpMorph(425197568) [world]
00000328         result:     #(nil)
00000329     Receiver's instance variables:
00000330         bounds:     736@567 corner: 752@583
00000331         owner:     a PasteUpMorph(425197568) [world]
00000332         submorphs:     #()
00000333         fullBounds:     736@567 corner: 752@583
00000334         color:     Color blue
00000335         extension:     a MorphExtension (141295616)
[eventHandler = an EventHandler]
00000336         mouseFocus:     nil
00000337         keyboardFocus:     nil
00000338         eventListeners:     nil
00000339         mouseListeners:     nil
00000340         keyboardListeners:     nil
00000341         mouseClickState:     nil
00000342         mouseOverHandler:     a MouseOverHandler
00000343         lastMouseEvent:     [736@567 mouseUp 191499012 nil]
00000344         targetOffset:     148@17
00000345         damageRecorder:     a DamageRecorder
00000346         cacheCanvas:     nil
00000347         cachedCanvasHasHoles:     true
00000348         temporaryCursor:     nil
00000349         temporaryCursorOffset:     nil
00000350         hardwareCursor:     nil
00000351         hasChanged:     true
00000352         savedPatch:     nil
00000353         userInitials:     ''
00000354         lastEventBuffer:     #(1 191499012 736 567 0 0 0 1)
00000355         lastKeyScanCode:     85
00000356         combinedChar:     nil
00000357
00000358 HandMorph>>sendEvent:focus:clear:
00000359     Receiver: a HandMorph(843055104)
00000360     Arguments and temporary variables:
00000361         anEvent:     [367@253 368@255 mouseMove red 191104532 nil]
00000362         focusHolder:     a DrGDrawable(1072168960)
00000363         aBlock:     [self mouseFocus: nil]
00000364         result:     nil
00000365     Receiver's instance variables:
00000366         bounds:     736@567 corner: 752@583
00000367         owner:     a PasteUpMorph(425197568) [world]
00000368         submorphs:     #()
00000369         fullBounds:     736@567 corner: 752@583
00000370         color:     Color blue
00000371         extension:     a MorphExtension (141295616)
[eventHandler = an EventHandler]
00000372         mouseFocus:     nil
00000373         keyboardFocus:     nil
00000374         eventListeners:     nil
00000375         mouseListeners:     nil
00000376         keyboardListeners:     nil
00000377         mouseClickState:     nil
00000378         mouseOverHandler:     a MouseOverHandler
00000379         lastMouseEvent:     [736@567 mouseUp 191499012 nil]
00000380         targetOffset:     148@17
00000381         damageRecorder:     a DamageRecorder
00000382         cacheCanvas:     nil
00000383         cachedCanvasHasHoles:     true
00000384         temporaryCursor:     nil
00000385         temporaryCursorOffset:     nil
00000386         hardwareCursor:     nil
00000387         hasChanged:     true
00000388         savedPatch:     nil
00000389         userInitials:     ''
00000390         lastEventBuffer:     #(1 191499012 736 567 0 0 0 1)
00000391         lastKeyScanCode:     85
00000392         combinedChar:     nil
00000393
00000394 HandMorph>>sendMouseEvent:
00000395     Receiver: a HandMorph(843055104)
00000396     Arguments and temporary variables:
00000397         anEvent:     [367@253 368@255 mouseMove red 191104532 nil]
00000398     Receiver's instance variables:
00000399         bounds:     736@567 corner: 752@583
00000400         owner:     a PasteUpMorph(425197568) [world]
00000401         submorphs:     #()
00000402         fullBounds:     736@567 corner: 752@583
00000403         color:     Color blue
00000404         extension:     a MorphExtension (141295616)
[eventHandler = an EventHandler]
00000405         mouseFocus:     nil
00000406         keyboardFocus:     nil
00000407         eventListeners:     nil
00000408         mouseListeners:     nil
00000409         keyboardListeners:     nil
00000410         mouseClickState:     nil
00000411         mouseOverHandler:     a MouseOverHandler
00000412         lastMouseEvent:     [736@567 mouseUp 191499012 nil]
00000413         targetOffset:     148@17
00000414         damageRecorder:     a DamageRecorder
00000415         cacheCanvas:     nil
00000416         cachedCanvasHasHoles:     true
00000417         temporaryCursor:     nil
00000418         temporaryCursorOffset:     nil
00000419         hardwareCursor:     nil
00000420         hasChanged:     true
00000421         savedPatch:     nil
00000422         userInitials:     ''
00000423         lastEventBuffer:     #(1 191499012 736 567 0 0 0 1)
00000424         lastKeyScanCode:     85
00000425         combinedChar:     nil
00000426
00000427 HandMorph>>handleEvent:
00000428     Receiver: a HandMorph(843055104)
00000429     Arguments and temporary variables:
00000430         anEvent:     [367@253 368@255 mouseMove red 191104532 nil]
00000431         evt:     [367@253 368@255 mouseMove red 191104532 nil]
00000432         ofs:     nil
00000433     Receiver's instance variables:
00000434         bounds:     736@567 corner: 752@583
00000435         owner:     a PasteUpMorph(425197568) [world]
00000436         submorphs:     #()
00000437         fullBounds:     736@567 corner: 752@583
00000438         color:     Color blue
00000439         extension:     a MorphExtension (141295616)
[eventHandler = an EventHandler]
00000440         mouseFocus:     nil
00000441         keyboardFocus:     nil
00000442         eventListeners:     nil
00000443         mouseListeners:     nil
00000444         keyboardListeners:     nil
00000445         mouseClickState:     nil
00000446         mouseOverHandler:     a MouseOverHandler
00000447         lastMouseEvent:     [736@567 mouseUp 191499012 nil]
00000448         targetOffset:     148@17
00000449         damageRecorder:     a DamageRecorder
00000450         cacheCanvas:     nil
00000451         cachedCanvasHasHoles:     true
00000452         temporaryCursor:     nil
00000453         temporaryCursorOffset:     nil
00000454         hardwareCursor:     nil
00000455         hasChanged:     true
00000456         savedPatch:     nil
00000457         userInitials:     ''
00000458         lastEventBuffer:     #(1 191499012 736 567 0 0 0 1)
00000459         lastKeyScanCode:     85
00000460         combinedChar:     nil
00000461
00000462 HandMorph>>processEvents
00000463     Receiver: a HandMorph(843055104)
00000464     Arguments and temporary variables:
00000465         evt:     [367@253 368@255 mouseMove red 191104532 nil]
00000466         evtBuf:     #(1 191104532 368 254 4 0 0 1)
00000467         type:     1
00000468         hadAny:     false
00000469     Receiver's instance variables:
00000470         bounds:     736@567 corner: 752@583
00000471         owner:     a PasteUpMorph(425197568) [world]
00000472         submorphs:     #()
00000473         fullBounds:     736@567 corner: 752@583
00000474         color:     Color blue
00000475         extension:     a MorphExtension (141295616)
[eventHandler = an EventHandler]
00000476         mouseFocus:     nil
00000477         keyboardFocus:     nil
00000478         eventListeners:     nil
00000479         mouseListeners:     nil
00000480         keyboardListeners:     nil
00000481         mouseClickState:     nil
00000482         mouseOverHandler:     a MouseOverHandler
00000483         lastMouseEvent:     [736@567 mouseUp 191499012 nil]
00000484         targetOffset:     148@17
00000485         damageRecorder:     a DamageRecorder
00000486         cacheCanvas:     nil
00000487         cachedCanvasHasHoles:     true
00000488         temporaryCursor:     nil
00000489         temporaryCursorOffset:     nil
00000490         hardwareCursor:     nil
00000491         hasChanged:     true
00000492         savedPatch:     nil
00000493         userInitials:     ''
00000494         lastEventBuffer:     #(1 191499012 736 567 0 0 0 1)
00000495         lastKeyScanCode:     85
00000496         combinedChar:     nil
00000497
00000498 [:h |
00000499 ActiveHand := h.
00000500     h processEvents.
00000501     ActiveHand := nil] in WorldState>>doOneCycleNowFor:
00000502     Receiver: a WorldState
00000503     Arguments and temporary variables:
00000504         h:     a HandMorph(843055104)
00000505     Receiver's instance variables:
00000506         hands:     an Array(a HandMorph(843055104))
00000507         viewBox:     0@0 corner: 1264@722
00000508         canvas:     a FormCanvas on: DisplayScreen(1264x722x32)
00000509         damageRecorder:     a DamageRecorder
00000510         stepList:     a Heap(StepMessage(#stepAt: -> a
ToolbarDropListMorph(496762880))(a T...etc...
00000511         lastStepTime:     191499016
00000512         lastStepMessage:     nil
00000513         lastCycleTime:     191499036
00000514         alarms:     a Heap()
00000515         lastAlarmTime:     191499016
00000516         menuBuilder:     nil
00000517
00000518 Array(SequenceableCollection)>>do:
00000519     Receiver: an Array(a HandMorph(843055104))
00000520     Arguments and temporary variables:
00000521         aBlock:     [:h |
00000522 ActiveHand := h.
00000523     h processEvents.
00000524     ActiveHand := nil]
00000525         index:     1
00000526         indexLimiT:     1
00000527     Receiver's instance variables:
00000528 an Array(a HandMorph(843055104))
00000529
00000530 WorldState>>handsDo:
00000531     Receiver: a WorldState
00000532     Arguments and temporary variables:
00000533         aBlock:     [:h |
00000534 ActiveHand := h.
00000535     h processEvents.
00000536     ActiveHand := nil]
00000537     Receiver's instance variables:
00000538         hands:     an Array(a HandMorph(843055104))
00000539         viewBox:     0@0 corner: 1264@722
00000540         canvas:     a FormCanvas on: DisplayScreen(1264x722x32)
00000541         damageRecorder:     a DamageRecorder
00000542         stepList:     a Heap(StepMessage(#stepAt: -> a
ToolbarDropListMorph(496762880))(a T...etc...
00000543         lastStepTime:     191499016
00000544         lastStepMessage:     nil
00000545         lastCycleTime:     191499036
00000546         alarms:     a Heap()
00000547         lastAlarmTime:     191499016
00000548         menuBuilder:     nil
00000549
00000550 WorldState>>doOneCycleNowFor:
00000551     Receiver: a WorldState
00000552     Arguments and temporary variables:
00000553         aWorld:     a PasteUpMorph(425197568) [world]
00000554     Receiver's instance variables:
00000555         hands:     an Array(a HandMorph(843055104))
00000556         viewBox:     0@0 corner: 1264@722
00000557         canvas:     a FormCanvas on: DisplayScreen(1264x722x32)
00000558         damageRecorder:     a DamageRecorder
00000559         stepList:     a Heap(StepMessage(#stepAt: -> a
ToolbarDropListMorph(496762880))(a T...etc...
00000560         lastStepTime:     191499016
00000561         lastStepMessage:     nil
00000562         lastCycleTime:     191499036
00000563         alarms:     a Heap()
00000564         lastAlarmTime:     191499016
00000565         menuBuilder:     nil
00000566
00000567 WorldState>>doOneCycleFor:
00000568     Receiver: a WorldState
00000569     Arguments and temporary variables:
00000570         aWorld:     a PasteUpMorph(425197568) [world]
00000571     Receiver's instance variables:
00000572         hands:     an Array(a HandMorph(843055104))
00000573         viewBox:     0@0 corner: 1264@722
00000574         canvas:     a FormCanvas on: DisplayScreen(1264x722x32)
00000575         damageRecorder:     a DamageRecorder
00000576         stepList:     a Heap(StepMessage(#stepAt: -> a
ToolbarDropListMorph(496762880))(a T...etc...
00000577         lastStepTime:     191499016
00000578         lastStepMessage:     nil
00000579         lastCycleTime:     191499036
00000580         alarms:     a Heap()
00000581         lastAlarmTime:     191499016
00000582         menuBuilder:     nil
00000583
00000584 PasteUpMorph>>doOneCycle
00000585     Receiver: a PasteUpMorph(425197568) [world]
00000586     Arguments and temporary variables:
00000587
00000588     Receiver's instance variables:
00000589         bounds:     0@0 corner: 1264@722
00000590         owner:     nil
00000591         submorphs:     an Array(a TaskbarMorph(984088576) a
SystemWindow(552599552) a DrGeo...etc...
00000592         fullBounds:     nil
00000593         color:     (Color r: 0.97 g: 0.98 b: 1.0)
00000594         extension:     a MorphExtension (666632192)
[eventHandler = an EventHandler]  [othe...etc...
00000595         borderWidth:     0
00000596         borderColor:     (Color r: 0.03 g: 0.02 b: 0.0)
00000597         backgroundMorph:     nil
00000598         worldState:     a WorldState
00000599         griddingOn:     nil
00000600
00000601 [[World doOneCycle.
00000602     Processor yield.
00000603     false] whileFalse.
00000604     nil] in Project class>>spawnNewProcess
00000605     Receiver: Project
00000606     Arguments and temporary variables:
00000607
00000608     Receiver's instance variables:
00000609         superclass:     Model
00000610         methodDict:     a MethodDictionary()
00000611         format:     132
00000612         instanceVariables:     nil
00000613         organization:     ('as yet unclassified')
00000614
00000615         subclasses:     nil
00000616         name:     #Project
00000617         classPool:     a Dictionary(#UIProcess->a Process in nil )
00000618         sharedPools:     nil
00000619         environment:     a SystemDictionary(lots of globals)
00000620         category:     #'System-Support'
00000621         traitComposition:     {}
00000622         localSelectors:     nil
00000623
00000624 [self value.
00000625     Processor terminateActive] in BlockClosure>>newProcess
00000626     Receiver: [[World doOneCycle.
00000627     Processor yield.
00000628     false] whileFalse.
00000629     nil]
00000630     Arguments and temporary variables:
00000631
00000632     Receiver's instance variables:
00000633         outerContext:     Project class>>spawnNewProcess
00000634         startpc:     57
00000635         numArgs:     0
00000636
00000637
00000638 --- The full stack ---
00000639 UndefinedObject(Object)>>doesNotUnderstand: #update
00000640 [:each | each update] in DrGeo>>updateDirtyCostumes
00000641 OrderedCollection>>do:
00000642 DrGeo>>updateDirtyCostumes
00000643 WeakMessageSend>>value
00000644 DrGeoDomain(Object)>>triggerEvent:
00000645 DrGeoDomain>>updateDirty:
00000646 DrGeoDomain>>moveEvent:inDirection:withDirty:
00000647 DrGSelectToolStateDragged>>handleMouseAt:
00000648 DrGSelectTool(DrGDynamicTool)>>handleMouseAt:
00000649 DrGDrawable>>mouseMove:
00000650 DrGDrawable>>handleMouseMove:
00000651 MouseMoveEvent>>sentTo:
00000652 DrGDrawable(Morph)>>handleEvent:
00000653 DrGDrawable(Morph)>>handleFocusEvent:
00000654 [ActiveHand := self.
00000655     ActiveEvent := anEvent.
00000656     result := focusHolder
00000657                 handleFocusEvent: (anEvent
00000658                         transformedBy: (focusHolder
transformedFrom: self))] in HandMorph>>sendFocusEvent:to:clear:
00000659 [aBlock value] in PasteUpMorph>>becomeActiveDuring:
00000660 BlockClosure>>on:do:
00000661 PasteUpMorph>>becomeActiveDuring:
00000662 HandMorph>>sendFocusEvent:to:clear:
00000663 HandMorph>>sendEvent:focus:clear:
00000664 HandMorph>>sendMouseEvent:
00000665 HandMorph>>handleEvent:
00000666 HandMorph>>processEvents
00000667 [:h |
00000668 ActiveHand := h.
00000669     h processEvents.
00000670     ActiveHand := nil] in WorldState>>doOneCycleNowFor:
00000671 Array(SequenceableCollection)>>do:
00000672 WorldState>>handsDo:
00000673 WorldState>>doOneCycleNowFor:
00000674 WorldState>>doOneCycleFor:
00000675 PasteUpMorph>>doOneCycle
00000676 [[World doOneCycle.
00000677     Processor yield.
00000678     false] whileFalse.
00000679     nil] in Project class>>spawnNewProcess
00000680 [self value.
00000681     Processor terminateActive] in BlockClosure>>newProcess


Reply | Threaded
Open this post in threaded view
|

Re: [BUG]UndefinedObject(Object)>>doesNotUnderstand: #update

Schwab,Wilhelm K
Ben,

I can't comment on the workings of Dr. Geo, but since you ask about #do:, nil, least surprise etc., I can tell you that errors are your friends.  Note that there is a difference between sending #do: to nil (would you really expect "nothing" to know how to iterate its contents?) and sending #do: to a collection that contains elements, some of which happen to be nil?  In the latter case, would it really be non-surprising to have nil elements treated differently from their peers?  Would you have them treated differently only if nil encounters a problem doing what is asked of it?  In that case, #do: would have to trap and suppress errors, at least for nil entries.

All of that sounds pretty surprising to me.  Eventually, it will to you too.  Happy Smalltalking!

Bill



________________________________________
From: [hidden email] [[hidden email]] On Behalf Of Ben Coman [[hidden email]]
Sent: Saturday, October 22, 2011 2:36 PM
To: [hidden email]
Subject: [Pharo-project] [BUG]UndefinedObject(Object)>>doesNotUnderstand:       #update

I was using DrGeo for the first time from the bundled release 11.08 on
Windows 7.  About 30 minutes in I drew three equally intersecting
circles, added a reflection line with each circle reflected.  I added a
free point with a middle (I think to a circle) and was trying to add a
locus.

When moving any of the points defining the circles I am getting a dozen
or more cascading MNUs down the screen.  Moving the reflection line
still works okay.

The error occurs in following method...
DrGeo>>updateDirtyCostumes
    self presenter tool costumes do: [ :each | each update ].
    self area changed

In the debugger inspecting "self presenter tool costumes" returns nil.
While I can't judge whether returning nil is valid here, as a Smalltalk
newbie what I am really interested in is:

1. The semantics of sending a "do:" message to nil.  By the principle of
least surprise I would expect that it would do ...nothing, whereas here
it tries later sending the "update" method to it.

2. Why in lines 0027 and 0641 is the "do:" method received by
OrderedCollection and not UndefinedObject? Actually I can't see "do:" in
the hierarchy of UndefinedObject, so why does UndefinedObject not raise
a MNU for "do:" ?

The image with the error is available at...
http://blog.openinworld.com/miscfiles/DrGeo-updateDirtyCostumes-MNU-2011-10-22-btc.zip

The stack trace generated by the <Mail out bug report> menu item is
below. I wasn't sure how much of it to cut or leave, so I've left it all.
------------------8<-------------------------
00000001 22 October 2011 10:27:03 pm
00000002
00000003 VM: Win32 - IX86 - NT - Squeak3.10.2 of 11 February 2010
[latest update: #9314]




Reply | Threaded
Open this post in threaded view
|

Re: [BUG]UndefinedObject(Object)>>doesNotUnderstand: #update

Ben Coman
Thanks for your comment Bill.  I need to learn more about good exception
handling for my own applications.

What I was surprised about was that nil appeared to receive a #do: but
not raise an error, and that next step in execution was
OrderedCollection>>do: .
Anyway, saving the sketch, closing the image, and the next day opening
the sketch has cleared the error.

Ben

Schwab,Wilhelm K wrote:

> Ben,
>
> I can't comment on the workings of Dr. Geo, but since you ask about #do:, nil, least surprise etc., I can tell you that errors are your friends.  Note that there is a difference between sending #do: to nil (would you really expect "nothing" to know how to iterate its contents?) and sending #do: to a collection that contains elements, some of which happen to be nil?  In the latter case, would it really be non-surprising to have nil elements treated differently from their peers?  Would you have them treated differently only if nil encounters a problem doing what is asked of it?  In that case, #do: would have to trap and suppress errors, at least for nil entries.
>
> All of that sounds pretty surprising to me.  Eventually, it will to you too.  Happy Smalltalking!
>
> Bill
>
>
>
> ________________________________________
> From: [hidden email] [[hidden email]] On Behalf Of Ben Coman [[hidden email]]
> Sent: Saturday, October 22, 2011 2:36 PM
> To: [hidden email]
> Subject: [Pharo-project] [BUG]UndefinedObject(Object)>>doesNotUnderstand:       #update
>
> I was using DrGeo for the first time from the bundled release 11.08 on
> Windows 7.  About 30 minutes in I drew three equally intersecting
> circles, added a reflection line with each circle reflected.  I added a
> free point with a middle (I think to a circle) and was trying to add a
> locus.
>
> When moving any of the points defining the circles I am getting a dozen
> or more cascading MNUs down the screen.  Moving the reflection line
> still works okay.
>
> The error occurs in following method...
> DrGeo>>updateDirtyCostumes
>     self presenter tool costumes do: [ :each | each update ].
>     self area changed
>
> In the debugger inspecting "self presenter tool costumes" returns nil.
> While I can't judge whether returning nil is valid here, as a Smalltalk
> newbie what I am really interested in is:
>
> 1. The semantics of sending a "do:" message to nil.  By the principle of
> least surprise I would expect that it would do ...nothing, whereas here
> it tries later sending the "update" method to it.
>
> 2. Why in lines 0027 and 0641 is the "do:" method received by
> OrderedCollection and not UndefinedObject? Actually I can't see "do:" in
> the hierarchy of UndefinedObject, so why does UndefinedObject not raise
> a MNU for "do:" ?
>
> The image with the error is available at...
> http://blog.openinworld.com/miscfiles/DrGeo-updateDirtyCostumes-MNU-2011-10-22-btc.zip
>
> The stack trace generated by the <Mail out bug report> menu item is
> below. I wasn't sure how much of it to cut or leave, so I've left it all.
> ------------------8<-------------------------
> 00000001 22 October 2011 10:27:03 pm
> 00000002
> 00000003 VM: Win32 - IX86 - NT - Squeak3.10.2 of 11 February 2010
> [latest update: #9314]
>
>
>
>
>
>  


Reply | Threaded
Open this post in threaded view
|

Re: [BUG]UndefinedObject(Object)>>doesNotUnderstand: #update

Hilaire Fernandes
Ben,

Can you send me a saved sketch producing the error (not the whole
image), I would like to see track and register the error on the bug tracler.

Hilaire


Le 24/10/2011 15:56, Ben Coman a écrit :

> Thanks for your comment Bill.  I need to learn more about good exception
> handling for my own applications.
> What I was surprised about was that nil appeared to receive a #do: but
> not raise an error, and that next step in execution was
> OrderedCollection>>do: . Anyway, saving the sketch, closing the image,
> and the next day opening the sketch has cleared the error.
>
> Ben
>
> Schwab,Wilhelm K wrote:
>> Ben,
>>
>> I can't comment on the workings of Dr. Geo, but since you ask about
>> #do:, nil, least surprise etc., I can tell you that errors are your
>> friends.  Note that there is a difference between sending #do: to nil
>> (would you really expect "nothing" to know how to iterate its
>> contents?) and sending #do: to a collection that contains elements,
>> some of which happen to be nil?  In the latter case, would it really
>> be non-surprising to have nil elements treated differently from their
>> peers?  Would you have them treated differently only if nil encounters
>> a problem doing what is asked of it?  In that case, #do: would have to
>> trap and suppress errors, at least for nil entries.
>>
>> All of that sounds pretty surprising to me.  Eventually, it will to
>> you too.  Happy Smalltalking!
>>
>> Bill
>>
>>
>>
>> ________________________________________
>> From:
>> [hidden email] [[hidden email]]
>> On Behalf Of Ben Coman [[hidden email]]
>> Sent: Saturday, October 22, 2011 2:36 PM
>> To: [hidden email]
>> Subject: [Pharo-project]
>> [BUG]UndefinedObject(Object)>>doesNotUnderstand:       #update
>>
>> I was using DrGeo for the first time from the bundled release 11.08 on
>> Windows 7.  About 30 minutes in I drew three equally intersecting
>> circles, added a reflection line with each circle reflected.  I added a
>> free point with a middle (I think to a circle) and was trying to add a
>> locus.
>>
>> When moving any of the points defining the circles I am getting a dozen
>> or more cascading MNUs down the screen.  Moving the reflection line
>> still works okay.
>>
>> The error occurs in following method...
>> DrGeo>>updateDirtyCostumes
>>     self presenter tool costumes do: [ :each | each update ].
>>     self area changed
>>
>> In the debugger inspecting "self presenter tool costumes" returns nil.
>> While I can't judge whether returning nil is valid here, as a Smalltalk
>> newbie what I am really interested in is:
>>
>> 1. The semantics of sending a "do:" message to nil.  By the principle of
>> least surprise I would expect that it would do ...nothing, whereas here
>> it tries later sending the "update" method to it.
>>
>> 2. Why in lines 0027 and 0641 is the "do:" method received by
>> OrderedCollection and not UndefinedObject? Actually I can't see "do:" in
>> the hierarchy of UndefinedObject, so why does UndefinedObject not raise
>> a MNU for "do:" ?
>>
>> The image with the error is available at...
>> http://blog.openinworld.com/miscfiles/DrGeo-updateDirtyCostumes-MNU-2011-10-22-btc.zip
>>
>>
>> The stack trace generated by the <Mail out bug report> menu item is
>> below. I wasn't sure how much of it to cut or leave, so I've left it all.
>> ------------------8<-------------------------
>> 00000001 22 October 2011 10:27:03 pm
>> 00000002
>> 00000003 VM: Win32 - IX86 - NT - Squeak3.10.2 of 11 February 2010
>> [latest update: #9314]
>>
>>
>>
>>
>>
>>  
>
>
>


--
Education 0.2 -- http://blog.ofset.org/hilaire


Reply | Threaded
Open this post in threaded view
|

Re: [BUG]UndefinedObject(Object)>>doesNotUnderstand: #update

Ben Coman
The sketch is attached as requested, however from the broken image, if I save the sketch, close it and reopen it, then the problem goes away.
So it seems the error is more intrinsic to the GUI, and only exists in the image I previously linked to.

btw, The immediate naive fix would be to replace to #do: with #ifNotNilDo:

Hilaire Fernandes wrote:
Ben,

Can you send me a saved sketch producing the error (not the whole
image), I would like to see track and register the error on the bug tracler.

Hilaire


Le 24/10/2011 15:56, Ben Coman a écrit :
  
Thanks for your comment Bill.  I need to learn more about good exception
handling for my own applications.
What I was surprised about was that nil appeared to receive a #do: but
not raise an error, and that next step in execution was
OrderedCollection>>do: . Anyway, saving the sketch, closing the image,
and the next day opening the sketch has cleared the error.

Ben

Schwab,Wilhelm K wrote:
    
Ben,

I can't comment on the workings of Dr. Geo, but since you ask about
#do:, nil, least surprise etc., I can tell you that errors are your
friends.  Note that there is a difference between sending #do: to nil
(would you really expect "nothing" to know how to iterate its
contents?) and sending #do: to a collection that contains elements,
some of which happen to be nil?  In the latter case, would it really
be non-surprising to have nil elements treated differently from their
peers?  Would you have them treated differently only if nil encounters
a problem doing what is asked of it?  In that case, #do: would have to
trap and suppress errors, at least for nil entries.

All of that sounds pretty surprising to me.  Eventually, it will to
you too.  Happy Smalltalking!

Bill



________________________________________
From:
[hidden email] [[hidden email]]
On Behalf Of Ben Coman [[hidden email]]
Sent: Saturday, October 22, 2011 2:36 PM
To: [hidden email]
Subject: [Pharo-project]
[BUG]UndefinedObject(Object)>>doesNotUnderstand:       #update

I was using DrGeo for the first time from the bundled release 11.08 on
Windows 7.  About 30 minutes in I drew three equally intersecting
circles, added a reflection line with each circle reflected.  I added a
free point with a middle (I think to a circle) and was trying to add a
locus.

When moving any of the points defining the circles I am getting a dozen
or more cascading MNUs down the screen.  Moving the reflection line
still works okay.

The error occurs in following method...
DrGeo>>updateDirtyCostumes
    self presenter tool costumes do: [ :each | each update ].
    self area changed

In the debugger inspecting "self presenter tool costumes" returns nil.
While I can't judge whether returning nil is valid here, as a Smalltalk
newbie what I am really interested in is:

1. The semantics of sending a "do:" message to nil.  By the principle of
least surprise I would expect that it would do ...nothing, whereas here
it tries later sending the "update" method to it.

2. Why in lines 0027 and 0641 is the "do:" method received by
OrderedCollection and not UndefinedObject? Actually I can't see "do:" in
the hierarchy of UndefinedObject, so why does UndefinedObject not raise
a MNU for "do:" ?

The image with the error is available at...
http://blog.openinworld.com/miscfiles/DrGeo-updateDirtyCostumes-MNU-2011-10-22-btc.zip


The stack trace generated by the <Mail out bug report> menu item is
below. I wasn't sure how much of it to cut or leave, so I've left it all.
------------------8<-------------------------
00000001 22 October 2011 10:27:03 pm
00000002
00000003 VM: Win32 - IX86 - NT - Squeak3.10.2 of 11 February 2010
[latest update: #9314]





  
      

    


  


<?xml  version="1.0" encoding="UTF-8" ?> <drgenius> <drgeo grid="False" name="Crash" origin_x="0.0" origin_y="2.8499999999999988" scale="4"> <point color="Red" delta="7@7" id="918377562" masked="False" name=" " style="Cross" thickness="Normal" type="Free"> <x>-35.86764705882354</x> <y>-23.11764705882353</y></point> <point color="Red" delta="7@7" id="899623431" masked="False" name=" " style="Cross" thickness="Normal" type="Free"> <x>-3.1323529411764586</x> <y>2.705882352941182</y></point> <circle anchor="0.5" color="Black" delta="7@7" id="181413990" masked="False" name="" style="plain" thickness="Normal" type="2pts"> <parent ref="918377562"/> <parent ref="899623431"/> </circle> <circle anchor="0.5" color="Black" delta="7@7" id="10468498" masked="False" name="" style="plain" thickness="Normal" type="2pts"> <parent ref="899623431"/> <parent ref="918377562"/> </circle> <point color="Red" delta="7@7" extra="1" id="216673448" masked="False" name=" " style="Cross" thickness="Normal" type="Intersection"> <parent ref="181413990"/> <parent ref="10468498"/> </point> <circle anchor="0.5" color="Black" delta="7@7" id="13182169" masked="False" name="" style="plain" thickness="Normal" type="2pts"> <parent ref="216673448"/> <parent ref="918377562"/> </circle> <point color="Red" delta="7@7" id="832084607" masked="False" name=" " style="Cross" thickness="Normal" type="Free"> <x>68.00176470588235</x> <y>-9.951176470588235</y></point> <point color="Red" delta="7@7" id="926390339" masked="False" name=" " style="Cross" thickness="Normal" type="Free"> <x>56.84367647058824</x> <y>12.56720588235294</y></point> <line anchor="0.5" color="Black" delta="7@7" id="231652571" masked="False" name="" style="plain" thickness="Normal" type="2pts"> <parent ref="832084607"/> <parent ref="926390339"/> </line> <circle anchor="0.5" color="Black" delta="7@7" id="169202835" masked="False" name="" style="plain" thickness="Normal" type="Reflexion"> <parent ref="10468498"/> <parent ref="231652571"/> </circle> <circle anchor="0.5" color="Black" delta="7@7" id="256717170" masked="False" name="" style="plain" thickness="Normal" type="Reflexion"> <parent ref="13182169"/> <parent ref="231652571"/> </circle> <circle anchor="0.5" color="Black" delta="7@7" id="84751719" masked="False" name="" style="plain" thickness="Normal" type="Reflexion"> <parent ref="181413990"/> <parent ref="231652571"/> </circle> <point color="Red" delta="-18.409772256210537@29.903189608986928" id="927936856" masked="False" name="a" style="Cross" thickness="Normal" type="Free"> <x>-5.262605042016807</x> <y>71.75420168067227</y></point> <point color="Red" delta="7@7" id="6661566" masked="False" name=" " style="Cross" thickness="Normal" type="Middle_2pts"> <parent ref="927936856"/> <parent ref="899623431"/> </point> <line anchor="0.5" color="Black" delta="7@7" id="69797720" masked="False" name="" style="plain" thickness="Normal" type="perpendicular"> <parent ref="231652571"/> <parent ref="899623431"/> </line></drgeo></drgenius>

crash.png (6K) Download Attachment