きりかノート 3冊め

おあそびプログラミング

RubyCocoa 今日のコミット

  • tc_objcptr.rb, tc_types.rbがSnow Leopardでもテストをパスするよう修正(r2260)

てかコメントアウトした。Snow LeopardのBridgeSupportでは、多くのcftypesがtoll-free(__NSCFTypeをも使って)になっていて、テスト中のオブジェクトの型のassertが失敗しまくる。Rubyではその型になっていないし、そもそも型名が未定義になる。

以前と同様にCGColorRefなどの型名を使えるようにするパッチは用意したけど、考えてみると型名を使う状況が型判定くらいしか想定できなかったので未適用。

  • OSX::NSNotFoundの値をOSX::NSIntegerMaxで再定義するようにした(r2261)

Snow Leopardの64bitでのNSNotFoundの値が-1になっていて、Rubyの整数としてはNSIntegerMaxと異なってしまう問題がある。個人的にはBridgeSupportのバグだと思ってるけど、とりあえずRubyCocoa側ではosx/objc/foundation.rbで定数を削除->再定義で回避することにした。

/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSObjCRuntime.h
174:#define NSIntegerMax    LONG_MAX
218:enum {NSNotFound = NSIntegerMax};

/System/Library/Frameworks/Foundation.framework/Versions/C/Resources/BridgeSupport/Foundation.bridgesupport
563:<enum name='NSIntegerMax' value64='9223372036854775807' value='2147483647'/
637:<enum name='NSNotFound' value64='-1' value='2147483647'/>

他の定数でもありそうだよな、こういうこと。

  • tc_passbyref.rb, tests/tc_objcptr.rbがSnow Leopardの64bitでとおるようにした(r2262)

LP64でlongのサイズが8バイトなのでそのように。実行中のモードが64/32のどっちかを判定する方法がわからなかったので、OSX::RUBYCOCOA_BUILD_LP64 (true or false)という定数を導入してしまった。この名前はかなり気に入らないので、良い名前があれば提案お願いします。