Willem Rein Oudshoorn | 4 Feb 2003 18:18
Picon
Picon
Favicon

[PATCH] NSInvocation + tests

I mailed about a week ago about an incompatibility 
of NSInvocation in GNUstep and Apple's WebObjects.

This mail contains a few files

1 - A patch for gnustep-base.
        See ChangeLog below for what is changed.

2 - Patch for InvokeTarget in the tests project, to support new tests

3 - New file greg test file for the NSInvocation

PROBLEM DESCRIPTION
-------------------

A - NSInvocations in GNUstep do not retain their return values.
    In Apple's WebObjects they are retained.  
    This is usefull if you use NSInvocations to communicate between
    threads.   

B - The logic for the _validReturn flag logic is broken.  See the testcases.
    But basically the flag is set to YES after the first invocation and 
    never reset to NO.

The Patch below fixes both of them. 
Note that I have not tested the patch for GSFFIInvocation, because I 
use GSFFCallIncocation.

Changelog for these fixes:

2003-02-04  Willem Rein Oudshoorn  <woudshoo <at> xs4all.nl>

	* Headers/gnustep/base/GSInvocation.h (CLEAR_RETURN_VALUE_IF_OBJECT): New macro, 
	if invocation returns object release it.
	(RETAIN_RETURN_VALUE): New macro, if invocation returns object release it.

	* Source/NSInvocation.m ([NSInvocation -dealloc]): Implement RELEASE return object
	([NSInvocation -setReturnValue:]) Implement RETAIN/RELEASE on return object
	([NSInvocation -invokeWithTarget:]): Implement RETAIN/RELEASE on return object,
	fixed  _validReturn flag setting

	* Source/GSFFIInvocation.m ([GSFFIInvocation -invokeWithTarget:]): 
	Fix _validReturn flag setting, Implement RETAIN/RELEASE on return object.

	* Source/GSFFCallInvocation.m ([GSFFCallInvocation -invokeWithTarget:]): 
	Fix _validReturn flag setting.  Implement RETAIN/RELEASE on return object.

NEW TESTS
---------

Test the fixes above.  Without the patch I get 3 FAILS in the new tests. 
2 of those tests belong to the bug described in B above. 
1 is a new test for the situation described in A.

Changelog for the patch and the new file:

2003-02-04  Willem Rein Oudshoorn  <woudshoo <at> xs4all.nl>

	* Resources/InvokeProxy.m ([InvokeTarget -returnIdButThrowException]): New method
	* NSInvocation/test01.scm: New file, containing simple
	retain/release and getting return value test

Wim Oudshoorn.

Attachment (base-NSInvocation-diff.bz2): application/octet-stream, 1503 bytes
Attachment (tests-diff.bz2): application/octet-stream, 388 bytes
Attachment (test01.scm.bz2): application/octet-stream, 1642 bytes
_______________________________________________
Bug-gnustep mailing list
Bug-gnustep <at> gnu.org
http://mail.gnu.org/mailman/listinfo/bug-gnustep

Gmane