2007年 10月 21日

Io ObjcBridge

Io は ObjcBridge が最初からついてきててなかなかおもしろそう……と思いきやうまく動かなかった。

ObjcBridge autoLookupClassNamesOn
ObjcBridge debugOn

AppDelegate := Object clone do (
	applicationDidFinishLaunching: := method(aNotification,
		"launched" print
	)
)

app := NSApplication sharedApplication
app setDelegate:(AppDelegate clone)
app run
Io -> Objc (id)sharedApplication()
Io -> Objc (void)setDelegate:(id)
[Objc2Io respondsToSelector:"applicationWillBecomeActive:"] = 0
[Objc2Io respondsToSelector:"applicationWillResignActive:"] = 0
[Objc2Io respondsToSelector:"applicationWillFinishLaunching:"] = 0
[Objc2Io respondsToSelector:"applicationDidUpdate:"] = 0
[Objc2Io respondsToSelector:"applicationDidUnhide:"] = 0
[Objc2Io respondsToSelector:"applicationWillUnhide:"] = 0
[Objc2Io respondsToSelector:"applicationWillUpdate:"] = 0
[Objc2Io respondsToSelector:"applicationWillTerminate:"] = 0
[Objc2Io respondsToSelector:"applicationDidChangeScreenParameters:"] = 0
[Objc2Io respondsToSelector:"applicationDidBecomeActive:"] = 0
[Objc2Io respondsToSelector:"applicationDidResignActive:"] = 0
[Objc2Io respondsToSelector:"applicationDidFinishLaunching:"] = 1
[Objc2Io respondsToSelector:"applicationWillHide:"] = 0
[Objc2Io respondsToSelector:"applicationDidHide:"] = 0
[Objc2Io respondsToSelector:"validRequestorForSendType:returnType:"] = 0
Io -> Objc (void)run()
[Objc2Io respondsToSelector:"application:runTest:duration:"] = 0
[Objc2Io respondsToSelector:"application:openFiles:"] = 0
[Objc2Io respondsToSelector:"application:openFile:"] = 0
Objc -> Io (void)applicationDidFinishLaunching:(id)

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00000000
0x00000000 in ?? ()

debugOn だとブリッジのメッセージのやりとりがみれる。delegate 呼ぶときにおちてる。深く追ってない (追えない)

みてのとおり obj-c との名前の変換はない。

squareBrackets が未定義なのはこれのためってのもありそう? (実際 ObjcBridge では squareBrackets が定義されてる。けどいまいち使いかたがわからない)