On Monday, April 9, 2012 22:37 CEST, Fred Kiefer <[email protected]> wrote: > I just checked the code in base and Eric seems to be right here. The > type check code in NSUnarchiver (we aren't talking about keyed coding > here) has a lot of HACK warnings, but it seems to do what we need here, > allow for different integer types to be used interchangeable. > > Please go ahead and apply this change.
Argh, now I recognized, I seem to broke at least Fisicalab and Addresses on startup: 2012-04-10 17:05:54.485 FisicaLab[10884] Exception occured while loading model: expected unsigned int and got int 2012-04-10 17:05:54.508 FisicaLab[10884] Failed to load Gorm 2012-04-10 17:05:54.528 FisicaLab[10884] Cannot load the main model file 'Fisica.gorm' putting a breakpoint at NSException, I end up here: Breakpoint 2, -[NSException raise] (self=0x205b8f608, _cmd=0x20d881a50) at NSException.m:956 956 if (_reserved == 0) Current language: auto; currently minimal (gdb) bt #0 -[NSException raise] (self=0x205b8f608, _cmd=0x20d881a50) at NSException.m:956 #1 0x000000020d409b65 in +[NSException raise:format:] (self=0x20d8816a0, _cmd=Variable "_cmd" is not available. ) at NSException.m:835 #2 0x000000020d4c88c2 in -[NSUnarchiver decodeValueOfObjCType:at:] (self=0x206e20088, _cmd=0x20cf0dea0, type=0x20cd10b20 "I", address=0x20dc2fd70) at NSUnarchiver.m:247 #3 0x000000020cb2972b in -[NSTabView initWithCoder:] (self=Variable "self" is not available. ) at NSTabView.m:634 #4 0x000000020d4c8200 in -[NSUnarchiver decodeValueOfObjCType:at:] (self=0x206e20088, _cmd=0x20d8dda40, type=0x20d728790 "@", address=0x20dc2df70) at NSUnarchiver.m:662 #5 0x000000020d4c627d in -[NSUnarchiver decodeArrayOfObjCType:count:at:] (self=0x206e20088, _cmd=Variable "_cmd" is not available. ) at NSUnarchiver.m:574 #6 0x000000020d3459de in -[GSMutableArray initWithCoder:] (self=0x20721e648, _cmd=Variable "_cmd" is not available. ) at GSArray.m:553 #7 0x000000020d4c8200 in -[NSUnarchiver decodeValueOfObjCType:at:] (self=0x206e20088, _cmd=0x20cf42dd0, type=0x20cd157ca "@", address=0x7f7fffff8798) at NSUnarchiver.m:662 #8 0x000000020cb79dc3 in -[NSView initWithCoder:] (self=Variable "self" is not available. ) at NSView.m:4740 #9 0x000000020d4c8200 in -[NSUnarchiver decodeValueOfObjCType:at:] (self=0x206e20088, _cmd=0x20d8dda40, type=0x20d728790 "@", address=0x20dc2dc00) at NSUnarchiver.m:662 #10 0x000000020d4c627d in -[NSUnarchiver decodeArrayOfObjCType:count:at:] (self=0x206e20088, _cmd=Variable "_cmd" is not available. ) at NSUnarchiver.m:574 ... (gdb) frame 3 #3 0x000000020cb2972b in -[NSTabView initWithCoder:] (self=Variable "self" is not available. ) at NSTabView.m:634 634 [aDecoder decodeValueOfObjCType: "I" at: &_selected_item]; (gdb) list 629 } 630 } 631 [aDecoder decodeValueOfObjCType: @encode(BOOL) at: &_draws_background]; 632 [aDecoder decodeValueOfObjCType: @encode(BOOL) at: &_truncated_label]; 633 _delegate = [aDecoder decodeObject]; 634 [aDecoder decodeValueOfObjCType: "I" at: &_selected_item]; 635 _selected = [_items objectAtIndex: _selected_item]; 636 } 637 return self; 638 } but in AppKit/NSTabView.h: I have: NSUInteger _selected_item; so I don't really understand, why the decoder thinks its getting an int? Someone can help me understand how I broke that? Sebastian > > Fred > > On 09.04.2012 21:14, Eric Wasylishen wrote: > > Hi, > > What's safe is encoding with any supported integer type and decoding with > > another integer type, so you can write a keyed archive with @encode(long) > > and decode it as @encode(int), even if long is 64-bits and int is 32-bits. > > > > In other words it's safe to use @encode(NS[U]Integer). However, if the ivar > > is changed to NSUInteger, I think these: > > > >>> - [aCoder encodeValueOfObjCType: "i" at:&_selected_item]; > >>> + [aCoder encodeValueOfObjCType: "I" at:&_selected_item]; > > > >>> - [aDecoder decodeValueOfObjCType: "i" at:&_selected_item]; > >>> + [aDecoder decodeValueOfObjCType: "I" at:&_selected_item]; > > > > should actually use @encode(NSUInteger), not "l". Otherwise the patch looks > > good :-). > > > > Eric > > > > On 2012-04-09, at 11:08 AM, Fred Kiefer wrote: > > > >> Most of the patch is ok, but we have too ake a careful look at the coding > >> change. This may break backwards and forewards compatibility. Maybe > >> Richard is able to explain if this change is save or not. > >> > >> Fred > >> > >> On the road > >> > >> Am 09.04.2012 um 18:02 schrieb "Sebastian > >> Reitenbach"<[email protected]>: > >> > >>> Hi, > >>> > >>> while looking at compilation warnings from the latest releases, I found > >>> in -gui (svn) some parts in NSTableView that would need to be changed. > >>> First is easy, declare i as NSUInteger (was unsigned before). Further I > >>> think _selected_item declared in the header as NSInteger also should be a > >>> NSUInteger. > >>> > >>> is it OK when I commit the patch? > >>> > >>> Sebastian > >>> > >>> Index: Source/NSTabView.m > >>> =================================================================== > >>> --- Source/NSTabView.m (revision 35049) > >>> +++ Source/NSTabView.m (working copy) > >>> @@ -123,7 +123,7 @@ > >>> > >>> - (void) removeTabViewItem: (NSTabViewItem*)tabViewItem > >>> { > >>> - unsigned i = [_items indexOfObject: tabViewItem]; > >>> + NSUInteger i = [_items indexOfObject: tabViewItem]; > >>> > >>> if (i == NSNotFound) > >>> return; > >>> @@ -202,7 +202,7 @@ > >>> > >>> - (void) selectNextTabViewItem: (id)sender > >>> { > >>> - if ((_selected_item != NSNotFound)&& ((unsigned)(_selected_item + 1)< > >>> [_items count])) > >>> + if ((_selected_item != NSNotFound)&& ((_selected_item + 1)< [_items > >>> count])) > >>> { > >>> [self selectTabViewItemAtIndex: _selected_item + 1]; > >>> } > >>> @@ -550,7 +550,7 @@ > >>> [aCoder encodeValueOfObjCType: @encode(BOOL) at:&_draws_background]; > >>> [aCoder encodeValueOfObjCType: @encode(BOOL) at:&_truncated_label]; > >>> [aCoder encodeConditionalObject: _delegate]; > >>> - [aCoder encodeValueOfObjCType: "i" at:&_selected_item]; > >>> + [aCoder encodeValueOfObjCType: "I" at:&_selected_item]; > >>> } > >>> } > >>> > >>> @@ -631,7 +631,7 @@ > >>> [aDecoder decodeValueOfObjCType: @encode(BOOL) > >>> at:&_draws_background]; > >>> [aDecoder decodeValueOfObjCType: @encode(BOOL) > >>> at:&_truncated_label]; > >>> _delegate = [aDecoder decodeObject]; > >>> - [aDecoder decodeValueOfObjCType: "i" at:&_selected_item]; > >>> + [aDecoder decodeValueOfObjCType: "I" at:&_selected_item]; > >>> _selected = [_items objectAtIndex: _selected_item]; > >>> } > >>> return self; > >>> Index: Headers/AppKit/NSTabView.h > >>> =================================================================== > >>> --- Headers/AppKit/NSTabView.h (revision 35049) > >>> +++ Headers/AppKit/NSTabView.h (working copy) > >>> @@ -54,7 +54,7 @@ > >>> BOOL _draws_background; > >>> BOOL _truncated_label; > >>> id _delegate; > >>> - NSInteger _selected_item; > >>> + NSUInteger _selected_item; > >>> } > >>> - (void)addTabViewItem:(NSTabViewItem *)tabViewItem; > >>> - (void)insertTabViewItem:(NSTabViewItem *)tabViewItem > > > _______________________________________________ > Gnustep-dev mailing list > [email protected] > https://lists.gnu.org/mailman/listinfo/gnustep-dev _______________________________________________ Gnustep-dev mailing list [email protected] https://lists.gnu.org/mailman/listinfo/gnustep-dev
