gnustep-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: some unsigned/NSInteger to NSUInteger changes in -gui


From: Sebastian Reitenbach
Subject: Re: some unsigned/NSInteger to NSUInteger changes in -gui
Date: Tue, 10 Apr 2012 17:13:37 +0200
User-agent: SOGoMail 1.3.14

 
On Monday, April 9, 2012 22:37 CEST, Fred Kiefer <address@hidden> 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"<address@hidden>:
> >>
> >>> 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
> address@hidden
> https://lists.gnu.org/mailman/listinfo/gnustep-dev
 
 
 
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]