With.m
author Jens Alfke <jens@mooseyard.com>
Mon Apr 14 13:58:48 2008 -0700 (2008-04-14)
changeset 4 64823cdde6a5
child 11 e5976864dfe9
permissions -rw-r--r--
Minor improvements.
jens@0
     1
//
jens@0
     2
//  With.m
jens@0
     3
//  MYUtilities
jens@0
     4
//
jens@0
     5
//  Copyright 2008 Jens Alfke. All rights reserved.
jens@0
     6
//
jens@0
     7
jens@0
     8
#import "With.h"
jens@0
     9
#import "Logging.h"
jens@0
    10
jens@0
    11
jens@0
    12
@interface NSObject (With)
jens@0
    13
- (BOOL) endWith: (NSException*)x;
jens@0
    14
@end
jens@0
    15
jens@0
    16
jens@0
    17
void _catchWith( id with, NSException *x )
jens@0
    18
{
jens@0
    19
    Warn(@"Exception thrown from WITH(%@) block: %@",[with class],x);
jens@0
    20
    if( [with respondsToSelector: @selector(endWith:)] ) {
jens@0
    21
        if( ! [with endWith: x] )
jens@0
    22
            @throw x;                           // propagate the exception if -endWith: returns NO
jens@0
    23
    } else {
jens@0
    24
        [with endWith];
jens@0
    25
    }
jens@0
    26
}
jens@0
    27
jens@0
    28
jens@0
    29
jens@0
    30
@implementation NSAutoreleasePool (With)
jens@0
    31
+ (NSAutoreleasePool*) beginWith    {return [self new];}
jens@0
    32
- (void) endWith                    {[self drain];}
jens@0
    33
- (BOOL) endWith: (NSException*)x   {[self drain]; return YES;}
jens@0
    34
@end