1 // RUN: rm -rf %t 2 // RUN: %clang_cc1 -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c -triple x86_64-apple-darwin11 3 // RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result 4 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c %s.result 5 6 typedef signed char BOOL; 7 #define nil ((void*) 0) 8 9 typedef const struct __CFString * CFStringRef; 10 11 @interface NSObject 12 + (id)alloc; 13 @end 14 15 @protocol NSCopying 16 @end 17 18 @interface NSString : NSObject 19 + (id)stringWithString:(NSString *)string; 20 - (id)initWithString:(NSString *)aString; 21 @end 22 23 @interface NSArray : NSObject 24 - (id)objectAtIndex:(unsigned long)index; 25 @end 26 27 @interface NSArray (NSExtendedArray) 28 - (id)objectAtIndexedSubscript:(unsigned)idx; 29 @end 30 31 @interface NSArray (NSArrayCreation) 32 + (id)array; 33 + (id)arrayWithObject:(id)anObject; 34 + (id)arrayWithObjects:(const id [])objects count:(unsigned long)cnt; 35 + (id)arrayWithObjects:(id)firstObj, ...; 36 + (id)arrayWithArray:(NSArray *)array; 37 38 - (id)initWithObjects:(const id [])objects count:(unsigned long)cnt; 39 - (id)initWithObjects:(id)firstObj, ...; 40 - (id)initWithArray:(NSArray *)array; 41 @end 42 43 @interface NSMutableArray : NSArray 44 - (void)replaceObjectAtIndex:(unsigned long)index withObject:(id)anObject; 45 @end 46 47 @interface NSMutableArray (NSExtendedMutableArray) 48 - (void)setObject:(id)obj atIndexedSubscript:(unsigned)idx; 49 @end 50 51 @interface NSDictionary : NSObject 52 - (id)objectForKey:(id)aKey; 53 @end 54 55 @interface NSDictionary (NSExtendedDictionary) 56 - (id)objectForKeyedSubscript:(id)key; 57 @end 58 59 @interface NSDictionary (NSDictionaryCreation) 60 + (id)dictionary; 61 + (id)dictionaryWithObject:(id)object forKey:(id)key; 62 + (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; 63 + (id)dictionaryWithObjectsAndKeys:(id)firstObject, ...; 64 + (id)dictionaryWithDictionary:(NSDictionary *)dict; 65 + (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; 66 67 - (id)initWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; 68 - (id)initWithObjectsAndKeys:(id)firstObject, ...; 69 - (id)initWithDictionary:(NSDictionary *)otherDictionary; 70 - (id)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; 71 @end 72 73 @interface NSMutableDictionary : NSDictionary 74 - (void)setObject:(id)anObject forKey:(id)aKey; 75 @end 76 77 @interface NSMutableDictionary (NSExtendedMutableDictionary) 78 - (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key; 79 @end 80 81 @interface NSNumber : NSObject 82 @end 83 84 @interface NSNumber (NSNumberCreation) 85 + (NSNumber *)numberWithInt:(int)value; 86 @end 87 88 #define M(x) (x) 89 #define PAIR(x) @#x, [NSNumber numberWithInt:(x)] 90 #define TWO(x) ((x), (x)) 91 92 @interface I { 93 NSArray *ivarArr; 94 } 95 @end 96 @implementation I 97 -(void) foo { 98 NSString *str; 99 NSArray *arr; 100 NSDictionary *dict; 101 102 arr = [NSArray array]; 103 arr = [NSArray arrayWithObject:str]; 104 arr = [NSArray arrayWithObjects:str, str, nil]; 105 dict = [NSDictionary dictionary]; 106 dict = [NSDictionary dictionaryWithObject:arr forKey:str]; 107 dict = [NSDictionary dictionaryWithObjectsAndKeys: @"value1", @"key1", @"value2", @"key2", nil]; 108 dict = [NSDictionary dictionaryWithObjectsAndKeys: PAIR(1), PAIR(2), nil]; 109 dict = [NSDictionary dictionaryWithObjectsAndKeys: 110 @"value1", @"key1", 111 #ifdef BLAH 112 @"value2", @"key2", 113 #else 114 @"value3", @"key3", 115 #endif 116 nil ]; 117 118 id o = [arr objectAtIndex:2]; 119 o = [dict objectForKey:@"key"]; 120 o = TWO([dict objectForKey:@"key"]); 121 o = [NSDictionary dictionaryWithObject:[NSDictionary dictionary] forKey:@"key"]; 122 NSMutableArray *marr = 0; 123 NSMutableDictionary *mdict = 0; 124 [marr replaceObjectAtIndex:2 withObject:@"val"]; 125 [mdict setObject:@"value" forKey:@"key"]; 126 [marr replaceObjectAtIndex:2 withObject:[arr objectAtIndex:4]]; 127 [mdict setObject:[dict objectForKey:@"key2"] forKey:@"key"]; 128 [mdict setObject:[dict objectForKey:@"key2"] forKey: 129 #if 1 130 @"key1" 131 #else 132 @"key2" 133 #endif 134 ]; 135 [mdict setObject:[dict objectForKey: 136 #if 2 137 @"key3" 138 #else 139 @"key4" 140 #endif 141 ] forKey:@"key"]; 142 [mdict setObject:@"value" forKey:[dict objectForKey: 143 #if 3 144 @"key5" 145 #else 146 @"key6" 147 #endif 148 ] ]; 149 [mdict setObject:@"val" forKey:[dict objectForKey:@"key2"]]; 150 [mdict setObject:[dict objectForKey:@"key1"] forKey:[dict objectForKey:[NSArray arrayWithObject:@"arrkey"]]]; 151 __strong NSArray **parr = 0; 152 o = [*parr objectAtIndex:2]; 153 void *hd; 154 o = [(NSArray*)hd objectAtIndex:2]; 155 o = [ivarArr objectAtIndex:2]; 156 157 dict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"1", [NSArray array], nil] forKeys:[NSArray arrayWithObjects:@"A", [arr objectAtIndex:2], nil]]; 158 dict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"1", @"2", nil] forKeys:arr]; 159 dict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"1", @"2", nil] forKeys:@[@"A", @"B"]]; 160 dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSArray array], @"A", [NSArray array], @"B", nil]; 161 } 162 @end 163 164 extern const CFStringRef globStr; 165 166 void test1(NSString *str) { 167 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: str, globStr, nil]; 168 dict = [NSDictionary dictionaryWithObjectsAndKeys: globStr, str, nil]; 169 dict = [NSDictionary dictionaryWithObject:str forKey:globStr]; 170 dict = [NSDictionary dictionaryWithObject:globStr forKey:str]; 171 172 NSArray *arr = [NSArray arrayWithObjects: globStr, globStr, nil]; 173 arr = [NSArray arrayWithObjects: str, globStr, nil]; 174 arr = [NSArray arrayWithObjects: globStr, str, nil]; 175 arr = [NSArray arrayWithObject:globStr]; 176 } 177 178 @interface Custom : NSObject 179 - (id)objectAtIndex:(unsigned long)index; 180 @end 181 182 @interface Custom (Extended) 183 - (id)objectAtIndexedSubscript:(unsigned)idx; 184 @end 185 186 @interface MutableCustom : Custom 187 - (void)replaceObjectAtIndex:(unsigned long)index withObject:(id)anObject; 188 @end 189 190 @interface MutableCustom (Extended) 191 - (void)setObject:(id)obj atIndexedSubscript:(unsigned)idx; 192 @end 193 194 @interface CustomUnavail : NSObject 195 - (id)objectAtIndex:(unsigned long)index; 196 @end 197 198 @interface CustomUnavail (Extended) 199 - (id)objectAtIndexedSubscript:(unsigned)idx __attribute__((unavailable)); 200 @end 201 202 @interface MutableCustomUnavail : CustomUnavail 203 - (void)replaceObjectAtIndex:(unsigned long)index withObject:(id)anObject; 204 @end 205 206 @interface MutableCustomUnavail (Extended) 207 - (void)setObject:(id)obj atIndexedSubscript:(unsigned)idx __attribute__((unavailable)); 208 @end 209 210 void test2() { 211 MutableCustom *mutc; 212 id o = [mutc objectAtIndex:4]; 213 [mutc replaceObjectAtIndex:2 withObject:@"val"]; 214 215 MutableCustomUnavail *mutcunaval; 216 o = [mutcunaval objectAtIndex:4]; 217 [mutcunaval replaceObjectAtIndex:2 withObject:@"val"]; 218 } 219 220 @interface NSLocale : NSObject 221 + (id)systemLocale; 222 + (id)currentLocale; 223 - (id)objectForKey:(id)key; 224 @end 225 226 void test3(id key) { 227 id o = [[NSLocale currentLocale] objectForKey:key]; 228 } 229