[MacRuby-devel] CFRange (Boxed) elements not accessible

Laurent Sansonetti lsansonetti at apple.com
Mon May 31 01:12:06 PDT 2010


Hi Paul,

On May 30, 2010, at 9:51 PM, Paul Howson wrote:

> On 31/05/2010, at 11:47 AM, Laurent Sansonetti wrote:
> 
>> Hi Paul,
>> 
>> I believe that here the function is typed to return an anonymous struct (likely a bug in the bridgesupport file), so MacRuby won't be able to associate it as an NSRange. You may be able to access location using string_range[0] and length using string_range[1].
>> 
>> Laurent
> 
> Thanks Laurent.
> 
> That appears not to work:
> 
>   undefined method `[]' for #<Boxed:0x2006947a0> (NoMethodError)

I see :( Could you file a ticket about this? I believe we should expose the structure fields for these special Boxed objects.

> Is the bridgesupport file produced elsewhere within Apple? (i.e. out of your control)

Yep, the file ships with the system, so we have full control. I just checked and the problem has been fixed in the new version of BridgeSupport that we are working on.

> Any other suggestions for getting around this bug?

It is possible to fix the problem by manually editing the file.

/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Resources/BridgeSupport/CoreText.bridgesupport

Then, locate the description of CTLineGetStringRange. It should be something like:

<function name='CTLineGetStringRange'>
<arg type='^{__CTLine=}'/>
<retval type64='{?=qq}' type='{?=ii}'/>
</function>

And replace with:

<function name='CTLineGetStringRange'>
<arg type='^{__CTLine=}'/>
<retval type64='{_CFRange=qq}' type='{_CFRange=ii}'/>
</function>

I understand that editing the file manually is probably not an option if you intend to ship the project later, but I think we can add a fix in trunk to expose the fields. We can maybe find another workaround if needed.

Laurent


More information about the MacRuby-devel mailing list