bug-gnustep
[Top][All Lists]
Advanced

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

[PATCH] NSInvocation + tests


From: Willem Rein Oudshoorn
Subject: [PATCH] NSInvocation + tests
Date: 04 Feb 2003 18:18:56 +0100
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2

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@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@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
Description: Patch for NSInvocation incompatibility

Attachment: tests-diff.bz2
Description: Diff for InvokeTarget to support new tests

Attachment: test01.scm.bz2
Description: New test cases for NSInvocation


reply via email to

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