Laurent Sansonetti
laure****@gmail*****
Fri Jun 29 21:09:19 JST 2007
Thanks Satoshi-san for the detailed report, I'm now working on this, in priority. Laurent On 6/29/07, Satoshi Nakagawa <snaka****@infot*****> wrote: > Hi. > > As I reported in rubycocoa:0434, > BOOL type conversions for informal protocol methods seem not to work well. > > I have done an overall testing for the BridgeSupport type conversions > around boolean values. > > You can see the result at: > > http://limechat.net/rubycocoa/bridge_test.html > > Kimura-san's test cases are for the cases of: > > - Ruby to Obj-C convertion (control_textView_doCommandBySelector) > - no objc_method informal protocol > > on the results table. > > It shows if you replace "B" for "C" of 'control:textView:doCommandBySelector:', > the conversion works normally (except a problem, 0 should be considered true). > > -- > Satoshi Nakagawa > > > On 2007/06/29, at 0:26, Laurent Sansonetti wrote: > > > It's surely a regression in RubyCocoa, but it's normal that the bridge > > support files mention 'B' instead of 'c'. gen_bridge_metadata > > automatically uses 'B' instead of 'c' for real boolean types (BOOL, > > bool, etc...) so that RubyCocoa can differentiate real booleans (BOOL) > > than char types. Because @encode(BOOL) == @encode(char). > > > > I will investigate the regression nevertheless. Thanks for the report. > > > > Laurent > > > > On Jun 28, 2007, at 5:13 PM, kimura wataru wrote: > > > >> Hi, > >> > >> I received a bug report [rubycocoa:0434](ja). This mail > >> says an informal protocol method whose return type is BOOL > >> do not works fine. > >> > >> I wrote a test code. > >> > >> --- > >> require 'osx/cocoa' > >> require 'test/unit' > >> > >> class MyClass < OSX::NSObject > >> attr_accessor :bool > >> def control_textView_doCommandBySelector(control, textView, sel) > >> return @bool > >> end > >> #objc_method 'control:textView:doCommandBySelector:', 'c@:@@:' # (1) > >> end > >> > >> class TCBool < Test::Unit::TestCase > >> def test_informal_protocol > >> rcv = MyClass.alloc.init > >> rcv.bool = false > >> val = rcv.ocm_send( > >> 'control:textView:doCommandBySelector:', nil, > >> nil, nil, '') > >> assert(!val) # fail on ppc Mac > >> rcv.bool = true > >> #$DEBUG = true > >> val = rcv.ocm_send( > >> 'control:textView:doCommandBySelector:', nil, > >> nil, nil, '') > >> $DEBUG = false > >> assert(val) > >> end > >> def test_ruby > >> rcv = MyClass.alloc.init > >> rcv.bool = false > >> val = rcv.control_textView_doCommandBySelector(nil, nil, '') > >> assert(!val) > >> rcv.bool = true > >> val = rcv.control_textView_doCommandBySelector(nil, nil, '') > >> assert(val) > >> end > >> end > >> --- > >> > >> This code fails with RubyCocoa trunk(r1853) and MacOSX 10.4.8ppc. > >> (succeeds on intel) > >> * add invoking objc_method (1), then the all of tests were passed > >> * edit AppKit.bridgesupport and modify the type encoding > >> "B20 at 0:4 at 8@12:16" -> "c20 at 0:4 at 8@12:16" ("B" -> "c"), then > >> the all of tests were passed > >> > >> I think the conflict of type encoding between objc-runtime and > >> bridgesupport file causes this problem. > >> > >> ObjC BOOL is described as type encoding "c", not "B". > >> "c" means signed char, and "B" means unsigned int. > >> > >> -- > >> kimura wataru > > _______________________________________________ > Rubycocoa-devel mailing list > Rubyc****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/rubycocoa-devel >