34
34
#import " SBJsonStreamWriterState.h"
35
35
36
36
static NSDecimalNumber *kNotANumber ;
37
+ static NSNumber *kTrue ;
38
+ static NSNumber *kFalse ;
39
+ static NSNumber *kPositiveInfinity ;
40
+ static NSNumber *kNegativeInfinity ;
41
+
37
42
static id kStaticStringCache ;
38
43
39
44
@@ -48,6 +53,10 @@ @implementation SBJsonStreamWriter
48
53
49
54
+ (void )initialize {
50
55
kNotANumber = [NSDecimalNumber notANumber ];
56
+ kPositiveInfinity = [NSNumber numberWithDouble: +INFINITY];
57
+ kNegativeInfinity = [NSNumber numberWithDouble: -INFINITY];
58
+ kTrue = [NSNumber numberWithBool: YES ];
59
+ kFalse = [NSNumber numberWithBool: NO ];
51
60
52
61
Class cacheClass = NSClassFromString (@" NSCache" );
53
62
if (cacheClass) {
@@ -321,27 +330,23 @@ - (BOOL)writeString:(NSString*)string {
321
330
}
322
331
323
332
- (BOOL )writeNumber : (NSNumber *)number {
324
- if ((CFBooleanRef) number == kCFBooleanTrue || (CFBooleanRef) number == kCFBooleanFalse )
333
+ if (number == kTrue || number == kFalse )
325
334
return [self writeBool: [number boolValue ]];
326
335
327
336
if ([state isInvalidState: self ]) return NO ;
328
337
if ([state expectingKey: self ]) return NO ;
329
338
[state appendSeparator: self ];
330
339
if (humanReadable) [state appendWhitespace: self ];
331
340
332
- if ((CFNumberRef)number == kCFNumberPositiveInfinity ) {
341
+ if ([ kPositiveInfinity isEqualToNumber: number] ) {
333
342
self.error = @" +Infinity is not a valid number in JSON" ;
334
343
return NO ;
335
344
336
- } else if ((CFNumberRef)number == kCFNumberNegativeInfinity ) {
345
+ } else if ([ kNegativeInfinity isEqualToNumber: number] ) {
337
346
self.error = @" -Infinity is not a valid number in JSON" ;
338
347
return NO ;
339
348
340
- } else if ((CFNumberRef)number == kCFNumberNaN ) {
341
- self.error = @" NaN is not a valid number in JSON" ;
342
- return NO ;
343
-
344
- } else if (number == kNotANumber ) {
349
+ } else if ([kNotANumber isEqualToNumber: number]) {
345
350
self.error = @" NaN is not a valid number in JSON" ;
346
351
return NO ;
347
352
}
0 commit comments