Hi Richard, Richard Frith-Macdonald <[EMAIL PROTECTED]> wrote: > > On 14 Jan 2008, at 07:35, Sebastian Reitenbach wrote: > > > Hi, > > > > Richard Frith-Macdonald <[EMAIL PROTECTED]> wrote: > >> > >> On 13 Jan 2008, at 21:20, Sebastian Reitenbach wrote: > >> > >>> Hi, > >>> > >>> after I got sope and sogo working with gnustep-make 2 and gnustep- > >>> base > >>> 1.14.1, I tried to compile against gnustep-base1.15.2. > >>> > >>> sope compilation ended in an error: > >>> Structure has no member named: _e_info > >>> there is a line: > >>> ASSIGN(self->_e_info, _userInfo); > >>> > >>> after a bit digging I figured out that it was removed not long ago > >>> from > >>> NSException.h: > >>> > >>> http://svn.gna.org/viewcvs/gnustep?rev=25681&view=rev > >>> after adding again: > >>> NSDictionary *_e_info; > >>> > >>> sope compiled again. > >>> > >>> I wonder why was it removed? or is it an error to set it, in the > >>> first > >>> place? > >> > >> It's an error to try to set it in the first place ... the leading > >> underscore in the name if the instance variable tells you that this > >> is a private instance variable intended for internal use only. In > >> 1.15.2 it has been replaced by _reserved (which is used only when > >> necessary to store additional information .... user info and/or > >> stacktrace ... in an exception). > > ah, thanks, understood. > > > >> NSException has no external instance variables ... I guess if the > >> sope code wants to store extra information in an exception it should > >> create a new exception based on the values returned by the methods of > >> the original one. > >> > > > > In sope I find this: > > > > #if GNUSTEP_BASE_LIBRARY > > /* FIXME: TODO: move someplace better (hh: NGExtensions...) */ > > @implementation NSException(setUserInfo) > > > > - (id)setUserInfo:(NSDictionary *)_userInfo { > > ASSIGN(self->_e_info, _userInfo); > > return self; > > } > > > > @end /* NSException(setUserInfo) */ > > #endif > > > > and then later in the file, setUserInfo is used. > > I took a quick look and found setUserInfo available in > > libFoundation, and > > there is no #if COCOOA, so I assume it is there available too, (I > > have no > > MAC to make sure). > > I checked the MacOS foundation headers ... no such method. > I then write a small test program: > > NSException *e; > > e = [NSException exceptionWithName: @"aaa" reason: @"bbb" userInfo: > nil]; > [e setUserInfo: [NSDictionary dictionary]]; > > Running this produced > > 2008-01-14 08:08:05.166 TestTool[2478] *** Uncaught exception: > <NSInvalidArgumentException> *** -[NSException setUserInfo:]: > selector not recognized [self = 0x303000] > > So the method definitely does not exist in Cocoa. thanks for testing this.
> > > In my eyes it would make most sense to add > > setUserInfo to NSException in gnustep-base, and then remove all the > > #if > > GNUSTEP_BASE_LIBRARY stuff from sope, or at least replace it for > > now with > > sth. that checks for the GNUSTEP_BASE version. > > > > Would that make sense, or is a too bad idea? > > Given that the method does not exist except in libFoundation, it > seems to me that the correct thing to do is to go through the sope > code and remove all uses of it. Actually if the code does not > contain an implementation for Cocoa, maybe sope does not actually use > it and all you need to do is remove the code which attempts to > implement it for GNUstep. Yes, then obviously a bit more work, but seems reasonable. I need to discuss this on the sope developer list. thanks a lot Sebastian _______________________________________________ Discuss-gnustep mailing list [email protected] http://lists.gnu.org/mailman/listinfo/discuss-gnustep
