[Mono-devel-list] Using anonymous delegates with Cocoa-Sharp...

Patrick Beard pcbeard at mac.com
Fri Mar 18 11:46:24 EST 2005


I noticed that mcs now supports anonymous delegates, so I tried 
experimenting in monodoc:

	delegate void Action();
	
	[Export("goForward:")]
	public void goForward(object sender) {
		WebBackForwardList history = webView.backForwardList;
		Action a = delegate {
			if (history.forwardListCount > 0) {
				history.goForward();
				loadHistoryItem(history.currentItem);
			}
		};
		a();
	}

When the delegate executes, this crashes the process (see stack crawl 
at end). Presumably it's the access the local variable history that's 
crashing, because if I change the code to this it doesn't crash:

	[Export("goForward:")]
	public void goForward(object sender) {
		Action a = delegate {
			WebBackForwardList history = webView.backForwardList;
			if (history.forwardListCount > 0) {
				history.goForward();
				loadHistoryItem(history.currentItem);
			}
		};
		a();
	}

Is this feature fully supported or only partially implemented?

- Patrick

Exception:  EXC_BAD_ACCESS (0x0001)
Codes:      KERN_PROTECTION_FAILURE (0x0002) at 0x00000000

Thread 0 Crashed:
0   <<00000000>> 	0x05e71464 0 + 0x5e71464
1   <<00000000>> 	0x05e718a8 0 + 0x5e718a8
2   <<00000000>> 	0x05e71804 0 + 0x5e71804
3   <<00000000>> 	0x05e716c0 0 + 0x5e716c0
4   <<00000000>> 	0x05e70c38 0 + 0x5e70c38
5   mono                     	0x000613a8 mono_runtime_invoke_array + 
0x2a4 (object.c:1909)
6   mono                     	0x00079788 ves_icall_InternalInvoke + 
0x294 (icall.c:2370)
7   <<00000000>> 	0x017ae9d8 0 + 0x17ae9d8
8   <<00000000>> 	0x017ae1f4 0 + 0x17ae1f4
9   <<00000000>> 	0x017ad350 0 + 0x17ad350
10  <<00000000>> 	0x017acd64 0 + 0x17acd64
11  <<00000000>> 	0x05e67b50 0 + 0x5e67b50
12  <<00000000>> 	0x05d26530 0 + 0x5d26530
13  <<00000000>> 	0x030d55a8 0 + 0x30d55a8
14  libCocoaSharpGlue.dylib  	0x011ec1cc glue_forwardInvocation + 0x16c 
(Glue.m:260)
15  com.apple.Foundation     	0x909fcfd0 
-[NSObject(NSForwardInvocation) forward::] + 0x198
16  libobjc.dylib            	0x90836810 _objc_msgForward + 0xb0
17  libobjc.dylib            	0x90836734 objc_msgSendv + 0xb4
18  libCocoaSharpGlue.dylib  	0x011ec458 glue_implementMethod + 0x24c 
(Glue.m:308)
19  com.apple.AppKit         	0x92e78224 -[NSApplication 
sendAction:to:from:] + 0x6c
20  com.apple.AppKit         	0x92eada44 -[NSMenu 
performActionForItemAtIndex:] + 0x188
21  com.apple.AppKit         	0x92ef22e4 -[NSCarbonMenuImpl 
performActionWithHighlightingForItemAtIndex:] + 0x68
22  com.apple.AppKit         	0x92ef8c14 -[NSMenu 
performKeyEquivalent:] + 0x104
23  com.apple.AppKit         	0x92ed7ccc -[NSApplication 
_handleKeyEquivalent:] + 0x124
24  com.apple.AppKit         	0x92df53dc -[NSApplication sendEvent:] + 
0xa5c
25  com.apple.AppKit         	0x92dfdc54 -[NSApplication run] + 0x240
26  <<00000000>> 	0x05e6b320 0 + 0x5e6b320
27  <<00000000>> 	0x05e6b1ac 0 + 0x5e6b1ac
28  mono                     	0x000613a8 mono_runtime_invoke_array + 
0x2a4 (object.c:1909)
29  mono                     	0x00079788 ves_icall_InternalInvoke + 
0x294 (icall.c:2370)
30  <<00000000>> 	0x017ae9d8 0 + 0x17ae9d8
31  <<00000000>> 	0x017ae1f4 0 + 0x17ae1f4
32  <<00000000>> 	0x017ad350 0 + 0x17ad350
33  <<00000000>> 	0x017acd64 0 + 0x17acd64
34  <<00000000>> 	0x011e4ac8 0 + 0x11e4ac8
35  <<00000000>> 	0x05e6b0f4 0 + 0x5e6b0f4
36  <<00000000>> 	0x05e6b078 0 + 0x5e6b078
37  <<00000000>> 	0x004c7344 0 + 0x4c7344
38  <<00000000>> 	0x004c7088 0 + 0x4c7088
39  <<00000000>> 	0x004c640c 0 + 0x4c640c
40  mono                     	0x0006105c mono_runtime_exec_main + 0x110 
(object.c:1766)
41  mono                     	0x00060cac mono_runtime_run_main + 0x210 
(object.c:1628)
42  mono                     	0x000040d8 mono_main + 0x91c 
(driver.c:893)
43  mono                     	0x00002468 _start + 0x188 (crt.c:267)
44  dyld                     	0x8fe1a558 _dyld_start + 0x64




More information about the Mono-devel-list mailing list