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