@@ -742,14 +742,14 @@ - (NSUInteger)count
742
742
- (void )getObjects : (id *)objectsPtr range : (NSRange )range
743
743
{
744
744
NSParameterAssert ((objects != NULL ) && (count <= capacity));
745
- if ((objectsPtr == NULL ) && (NSMaxRange (range) > 0UL )) { [NSException raise: NSRangeException format: @" *** -[%@ %@ ]: pointer to objects array is NULL but range length is %lu " , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd ), NSMaxRange (range)]; }
746
- if ((range.location > count) || (NSMaxRange (range) > count)) { [NSException raise: NSRangeException format: @" *** -[%@ %@ ]: index (%lu ) beyond bounds (%lu )" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd ), NSMaxRange (range), count]; }
745
+ if ((objectsPtr == NULL ) && (NSMaxRange (range) > 0UL )) { [NSException raise: NSRangeException format: @" *** -[%@ %@ ]: pointer to objects array is NULL but range length is %lu " , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd ), ( unsigned long ) NSMaxRange (range)]; }
746
+ if ((range.location > count) || (NSMaxRange (range) > count)) { [NSException raise: NSRangeException format: @" *** -[%@ %@ ]: index (%lu ) beyond bounds (%lu )" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd ), ( unsigned long ) NSMaxRange (range), ( unsigned long ) count]; }
747
747
memcpy (objectsPtr, objects + range.location , range.length * sizeof (id ));
748
748
}
749
749
750
750
- (id )objectAtIndex : (NSUInteger )objectIndex
751
751
{
752
- if (objectIndex >= count) { [NSException raise: NSRangeException format: @" *** -[%@ %@ ]: index (%lu ) beyond bounds (%lu )" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd ), objectIndex, count]; }
752
+ if (objectIndex >= count) { [NSException raise: NSRangeException format: @" *** -[%@ %@ ]: index (%lu ) beyond bounds (%lu )" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd ), ( unsigned long ) objectIndex, ( unsigned long ) count]; }
753
753
NSParameterAssert ((objects != NULL ) && (count <= capacity) && (objects[objectIndex] != NULL ));
754
754
return (objects[objectIndex]);
755
755
}
@@ -770,7 +770,7 @@ - (void)insertObject:(id)anObject atIndex:(NSUInteger)objectIndex
770
770
{
771
771
if (mutations == 0UL ) { [NSException raise: NSInternalInconsistencyException format: @" *** -[%@ %@ ]: mutating method sent to immutable object" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd )]; }
772
772
if (anObject == NULL ) { [NSException raise: NSInvalidArgumentException format: @" *** -[%@ %@ ]: attempt to insert nil" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd )]; }
773
- if (objectIndex > count) { [NSException raise: NSRangeException format: @" *** -[%@ %@ ]: index (%lu ) beyond bounds (%lu )" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd ), objectIndex, count + 1UL ]; }
773
+ if (objectIndex > count) { [NSException raise: NSRangeException format: @" *** -[%@ %@ ]: index (%lu ) beyond bounds (%lu )" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd ), ( unsigned long ) objectIndex, ( unsigned long )( count + 1UL ) ]; }
774
774
#ifdef __clang_analyzer__
775
775
[anObject retain ]; // Stupid clang analyzer... Issue #19.
776
776
#else
@@ -783,7 +783,7 @@ - (void)insertObject:(id)anObject atIndex:(NSUInteger)objectIndex
783
783
- (void )removeObjectAtIndex : (NSUInteger )objectIndex
784
784
{
785
785
if (mutations == 0UL ) { [NSException raise: NSInternalInconsistencyException format: @" *** -[%@ %@ ]: mutating method sent to immutable object" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd )]; }
786
- if (objectIndex >= count) { [NSException raise: NSRangeException format: @" *** -[%@ %@ ]: index (%lu ) beyond bounds (%lu )" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd ), objectIndex, count]; }
786
+ if (objectIndex >= count) { [NSException raise: NSRangeException format: @" *** -[%@ %@ ]: index (%lu ) beyond bounds (%lu )" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd ), ( unsigned long ) objectIndex, ( unsigned long ) count]; }
787
787
_JKArrayRemoveObjectAtIndex (self, objectIndex);
788
788
mutations = (mutations == NSUIntegerMax) ? 1UL : mutations + 1UL ;
789
789
}
@@ -792,7 +792,7 @@ - (void)replaceObjectAtIndex:(NSUInteger)objectIndex withObject:(id)anObject
792
792
{
793
793
if (mutations == 0UL ) { [NSException raise: NSInternalInconsistencyException format: @" *** -[%@ %@ ]: mutating method sent to immutable object" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd )]; }
794
794
if (anObject == NULL ) { [NSException raise: NSInvalidArgumentException format: @" *** -[%@ %@ ]: attempt to insert nil" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd )]; }
795
- if (objectIndex >= count) { [NSException raise: NSRangeException format: @" *** -[%@ %@ ]: index (%lu ) beyond bounds (%lu )" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd ), objectIndex, count]; }
795
+ if (objectIndex >= count) { [NSException raise: NSRangeException format: @" *** -[%@ %@ ]: index (%lu ) beyond bounds (%lu )" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd ), ( unsigned long ) objectIndex, ( unsigned long ) count]; }
796
796
#ifdef __clang_analyzer__
797
797
[anObject retain ]; // Stupid clang analyzer... Issue #19.
798
798
#else
@@ -896,7 +896,7 @@ + (id)allocWithZone:(NSZone *)zone
896
896
};
897
897
898
898
static NSUInteger _JKDictionaryCapacityForCount (NSUInteger count) {
899
- NSUInteger bottom = 0UL , top = sizeof (jk_dictionaryCapacities) / sizeof (NSUInteger ), mid = 0UL , tableSize = lround (floor ((count) * 1.33 ));
899
+ NSUInteger bottom = 0UL , top = sizeof (jk_dictionaryCapacities) / sizeof (NSUInteger ), mid = 0UL , tableSize = ( NSUInteger ) lround (floor ((( double ) count) * 1.33 ));
900
900
while (top > bottom) { mid = (top + bottom) / 2UL ; if (jk_dictionaryCapacities[mid] < tableSize) { bottom = mid + 1UL ; } else { top = mid; } }
901
901
return (jk_dictionaryCapacities[bottom]);
902
902
}
@@ -2592,21 +2592,23 @@ static int jk_encode_add_atom_to_buffer(JKEncodeState *encodeState, void *object
2592
2592
//
2593
2593
// XXX XXX XXX XXX
2594
2594
2595
- BOOL workAroundMacOSXABIBreakingBug = NO ;
2596
- if (JK_EXPECT_F (((NSUInteger )object) & 0x1 )) { workAroundMacOSXABIBreakingBug = YES ; goto slowClassLookup; }
2597
2595
2598
- if (JK_EXPECT_T (object->isa == encodeState->fastClassLookup .stringClass )) { isClass = JKClassString; }
2599
- else if (JK_EXPECT_T (object->isa == encodeState->fastClassLookup .numberClass )) { isClass = JKClassNumber; }
2600
- else if (JK_EXPECT_T (object->isa == encodeState->fastClassLookup .dictionaryClass )) { isClass = JKClassDictionary; }
2601
- else if (JK_EXPECT_T (object->isa == encodeState->fastClassLookup .arrayClass )) { isClass = JKClassArray; }
2602
- else if (JK_EXPECT_T (object->isa == encodeState->fastClassLookup .nullClass )) { isClass = JKClassNull; }
2596
+ BOOL workAroundMacOSXABIBreakingBug = (JK_EXPECT_F (((NSUInteger )object) & 0x1 )) ? YES : NO ;
2597
+ void *objectISA = (JK_EXPECT_F (workAroundMacOSXABIBreakingBug)) ? NULL : *((void **)objectPtr);
2598
+ if (JK_EXPECT_F (workAroundMacOSXABIBreakingBug)) { goto slowClassLookup; }
2599
+
2600
+ if (JK_EXPECT_T (objectISA == encodeState->fastClassLookup .stringClass )) { isClass = JKClassString; }
2601
+ else if (JK_EXPECT_T (objectISA == encodeState->fastClassLookup .numberClass )) { isClass = JKClassNumber; }
2602
+ else if (JK_EXPECT_T (objectISA == encodeState->fastClassLookup .dictionaryClass )) { isClass = JKClassDictionary; }
2603
+ else if (JK_EXPECT_T (objectISA == encodeState->fastClassLookup .arrayClass )) { isClass = JKClassArray; }
2604
+ else if (JK_EXPECT_T (objectISA == encodeState->fastClassLookup .nullClass )) { isClass = JKClassNull; }
2603
2605
else {
2604
2606
slowClassLookup:
2605
- if (JK_EXPECT_T ([object isKindOfClass: [NSString class ]])) { if (workAroundMacOSXABIBreakingBug == NO ) { encodeState->fastClassLookup .stringClass = object-> isa ; } isClass = JKClassString; }
2606
- else if (JK_EXPECT_T ([object isKindOfClass: [NSNumber class ]])) { if (workAroundMacOSXABIBreakingBug == NO ) { encodeState->fastClassLookup .numberClass = object-> isa ; } isClass = JKClassNumber; }
2607
- else if (JK_EXPECT_T ([object isKindOfClass: [NSDictionary class ]])) { if (workAroundMacOSXABIBreakingBug == NO ) { encodeState->fastClassLookup .dictionaryClass = object-> isa ; } isClass = JKClassDictionary; }
2608
- else if (JK_EXPECT_T ([object isKindOfClass: [NSArray class ]])) { if (workAroundMacOSXABIBreakingBug == NO ) { encodeState->fastClassLookup .arrayClass = object-> isa ; } isClass = JKClassArray; }
2609
- else if (JK_EXPECT_T ([object isKindOfClass: [NSNull class ]])) { if (workAroundMacOSXABIBreakingBug == NO ) { encodeState->fastClassLookup .nullClass = object-> isa ; } isClass = JKClassNull; }
2607
+ if (JK_EXPECT_T ([object isKindOfClass: [NSString class ]])) { if (workAroundMacOSXABIBreakingBug == NO ) { encodeState->fastClassLookup .stringClass = objectISA ; } isClass = JKClassString; }
2608
+ else if (JK_EXPECT_T ([object isKindOfClass: [NSNumber class ]])) { if (workAroundMacOSXABIBreakingBug == NO ) { encodeState->fastClassLookup .numberClass = objectISA ; } isClass = JKClassNumber; }
2609
+ else if (JK_EXPECT_T ([object isKindOfClass: [NSDictionary class ]])) { if (workAroundMacOSXABIBreakingBug == NO ) { encodeState->fastClassLookup .dictionaryClass = objectISA ; } isClass = JKClassDictionary; }
2610
+ else if (JK_EXPECT_T ([object isKindOfClass: [NSArray class ]])) { if (workAroundMacOSXABIBreakingBug == NO ) { encodeState->fastClassLookup .arrayClass = objectISA ; } isClass = JKClassArray; }
2611
+ else if (JK_EXPECT_T ([object isKindOfClass: [NSNull class ]])) { if (workAroundMacOSXABIBreakingBug == NO ) { encodeState->fastClassLookup .nullClass = objectISA ; } isClass = JKClassNull; }
2610
2612
else {
2611
2613
if ((rerunningAfterClassFormatter == NO ) && (
2612
2614
#ifdef __BLOCKS__
@@ -2788,7 +2790,8 @@ static int jk_encode_add_atom_to_buffer(JKEncodeState *encodeState, void *object
2788
2790
for (id keyObject in enumerateObject) {
2789
2791
if (JK_EXPECT_T (printComma)) { if (JK_EXPECT_F (jk_encode_write1 (encodeState, 0L , " ," ))) { return (1 ); } }
2790
2792
printComma = 1 ;
2791
- if (JK_EXPECT_F ((keyObject->isa != encodeState->fastClassLookup .stringClass )) && JK_EXPECT_F (([keyObject isKindOfClass: [NSString class ]] == NO ))) { jk_encode_error (encodeState, @" Key must be a string object." ); return (1 ); }
2793
+ void *keyObjectISA = *((void **)keyObject);
2794
+ if (JK_EXPECT_F ((keyObjectISA != encodeState->fastClassLookup .stringClass )) && JK_EXPECT_F (([keyObject isKindOfClass: [NSString class ]] == NO ))) { jk_encode_error (encodeState, @" Key must be a string object." ); return (1 ); }
2792
2795
if (JK_EXPECT_F (jk_encode_add_atom_to_buffer (encodeState, keyObject))) { return (1 ); }
2793
2796
if (JK_EXPECT_F (jk_encode_write1 (encodeState, 0L , " :" ))) { return (1 ); }
2794
2797
if (JK_EXPECT_F (jk_encode_add_atom_to_buffer (encodeState, (void *)CFDictionaryGetValue ((CFDictionaryRef)object, keyObject)))) { return (1 ); }
@@ -2799,7 +2802,8 @@ static int jk_encode_add_atom_to_buffer(JKEncodeState *encodeState, void *object
2799
2802
for (idx = 0L ; idx < dictionaryCount; idx++) {
2800
2803
if (JK_EXPECT_T (printComma)) { if (JK_EXPECT_F (jk_encode_write1 (encodeState, 0L , " ," ))) { return (1 ); } }
2801
2804
printComma = 1 ;
2802
- if (JK_EXPECT_F (((id )keys[idx])->isa != encodeState->fastClassLookup .stringClass ) && JK_EXPECT_F ([(id )keys[idx] isKindOfClass: [NSString class ]] == NO )) { jk_encode_error (encodeState, @" Key must be a string object." ); return (1 ); }
2805
+ void *keyObjectISA = *((void **)keys[idx]);
2806
+ if (JK_EXPECT_F (keyObjectISA != encodeState->fastClassLookup .stringClass ) && JK_EXPECT_F ([(id )keys[idx] isKindOfClass: [NSString class ]] == NO )) { jk_encode_error (encodeState, @" Key must be a string object." ); return (1 ); }
2803
2807
if (JK_EXPECT_F (jk_encode_add_atom_to_buffer (encodeState, keys[idx]))) { return (1 ); }
2804
2808
if (JK_EXPECT_F (jk_encode_write1 (encodeState, 0L , " :" ))) { return (1 ); }
2805
2809
if (JK_EXPECT_F (jk_encode_add_atom_to_buffer (encodeState, objects[idx]))) { return (1 ); }
0 commit comments