On 17 Dec 2010, at 13:42, Fred Kiefer wrote:

> First of all, Gorm is wrong in having all these methods return unsigned,
> it should be NSDragOperation. But this doesn't explain why libobjc2 has
> a problem here.
> David, could you please have a look at that and see what the difference
> between these two types is?


The method that is being called returns an unsigned int, but the selector 
returns a signed int (I vs i - difficult to see in some fonts).  libobjc2 
catches cases where you call a method with the wrong types and logs a message 
before calling the incorrectly-typed method.  

Eventually this will be a hard error, because calling a method with the wrong 
types can cause stack corruption[1].  It's probably safe in this specific case 
(although it can result in some weird bugs because you have an implicit integer 
cast that you may be unaware of), but in nontrivial cases (e.g. returning an 
integer, expecting an object) it can be a serious problem.  

There is a hook that can be called to perform fixup.  If you link against 
LanguageKit, then it automatically generates and inserts a method at run time 
that can box / unbox primitives as objects.

For more information, see these two blog posts:

http://etoileos.com/news/archive/2010/09/01/1228/
http://etoileos.com/news/archive/2010/09/01/1444/

David

-- Sent from my IBM 1620


_______________________________________________
Discuss-gnustep mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/discuss-gnustep

Reply via email to