[MacRuby-devel] mangled range param in NSString#getLineStart:end:contentsEnd:forRange:

Michael Johnston lastobelus at mac.com
Wed Dec 9 14:25:44 PST 2009


I'm having trouble with the NSString method  
getLineStart:end:contentsEnd:forRange:.  The range param at the end  
gets mangled.

First of all, the ordinary syntax can't be used because "end" is a  
keyword, so I'm using the hash syntax.

I added cover methods to NSString to see what was happening. I made  
two cover methods, one with the same signature as  
getLineStart:end:contentsEnd:forRange: and one with the range param  
first:

- (void)getLineStart2:(NSUInteger *)startIndex end:(NSUInteger  
*)lineEndIndex contentsEnd:(NSUInteger *)contentsEndIndex forRange: 
(NSRange)aRange
{
	NSLog( @"getLineStartForRange startIndex: %d lineEndIndex: %d  
contentsEndIndex: %d range: %@", *startIndex, *lineEndIndex,  
*contentsEndIndex, NSStringFromRange(aRange));
	[self getLineStart: startIndex end: lineEndIndex contentsEnd:  
contentsEndIndex forRange: aRange];
}

- (void)getLineStart3:(NSRange)aRange end:(NSUInteger *)lineEndIndex  
contentsEnd:(NSUInteger *)contentsEndIndex forIndex:(NSUInteger  
*)startIndex
{
	NSLog( @"getLineStartForRange startIndex: %d lineEndIndex: %d  
contentsEndIndex: %d range: %@", *startIndex, *lineEndIndex,  
*contentsEndIndex, NSStringFromRange(aRange));
	[self getLineStart: startIndex end: lineEndIndex contentsEnd:  
contentsEndIndex forRange: aRange];
}

When calling them,  getLineStart3 with the range param as the first  
param works fine, but getLineStart2 mangles the range:


     endix = Pointer.new(:ulong_long)
     conix = Pointer.new(:ulong_long)
     ix = Pointer.new(:ulong_long)
     ix[0] = 5
     conix[0] = 6
     endix[0] = 7

     puts "selectedRange: #{selectedRange.inspect}"
     @diagramCode.getLineStart3(selectedRange, :end =>  
endix, :contentsEnd => conix, :forIndex => ix)
     puts "try old way"
     ix[0] = 5
     conix[0] = 6
     endix[0] = 7
     @diagramCode.getLineStart2(ix, :end => endix, :contentsEnd =>  
conix, :forRange => selectedRange)
     puts "ix: #{ix} endix: #{endix.inspect} conix: #{conix.inspect}"


selectedRange: #<NSRange location=3 length=0>
2009-12-09 14:22:11.487 seeqr[11372:10b] getLineStart3 startIndex: 5  
lineEndIndex: 7 contentsEndIndex: 6 range: {3, 0}
try old way
2009-12-09 14:22:11.489 seeqr[11372:10b] getLineStart2 startIndex: 5  
lineEndIndex: 7 contentsEndIndex: 6 range: {0, 4294995796}
2009-12-09 14:22:11.490 seeqr[11372:10b] *** -[NSBigMutableString  
_getBlockStart:end:contentsEnd:forRange:stopAtLineSeparators:]: Range  
or index out of bounds


Am I missing something obvious?

Thanks,

Michael Johnston
lastobelus at mac.com






More information about the MacRuby-devel mailing list