@@ -742,14 +742,14 @@ - (NSUInteger)count
742742- (void )getObjects : (id *)objectsPtr range : (NSRange )range
743743{
744744 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]; }
747747 memcpy (objectsPtr, objects + range.location , range.length * sizeof (id ));
748748}
749749
750750- (id )objectAtIndex : (NSUInteger )objectIndex
751751{
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]; }
753753 NSParameterAssert ((objects != NULL ) && (count <= capacity) && (objects[objectIndex] != NULL ));
754754 return (objects[objectIndex]);
755755}
@@ -770,7 +770,7 @@ - (void)insertObject:(id)anObject atIndex:(NSUInteger)objectIndex
770770{
771771 if (mutations == 0UL ) { [NSException raise: NSInternalInconsistencyException format: @" *** -[%@ %@ ]: mutating method sent to immutable object" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd )]; }
772772 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 ) ]; }
774774#ifdef __clang_analyzer__
775775 [anObject retain ]; // Stupid clang analyzer... Issue #19.
776776#else
@@ -783,7 +783,7 @@ - (void)insertObject:(id)anObject atIndex:(NSUInteger)objectIndex
783783- (void )removeObjectAtIndex : (NSUInteger )objectIndex
784784{
785785 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]; }
787787 _JKArrayRemoveObjectAtIndex (self, objectIndex);
788788 mutations = (mutations == NSUIntegerMax) ? 1UL : mutations + 1UL ;
789789}
@@ -792,7 +792,7 @@ - (void)replaceObjectAtIndex:(NSUInteger)objectIndex withObject:(id)anObject
792792{
793793 if (mutations == 0UL ) { [NSException raise: NSInternalInconsistencyException format: @" *** -[%@ %@ ]: mutating method sent to immutable object" , NSStringFromClass ([self class ]), NSStringFromSelector (_cmd )]; }
794794 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]; }
796796#ifdef __clang_analyzer__
797797 [anObject retain ]; // Stupid clang analyzer... Issue #19.
798798#else
@@ -896,7 +896,7 @@ + (id)allocWithZone:(NSZone *)zone
896896};
897897
898898static 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 ));
900900 while (top > bottom) { mid = (top + bottom) / 2UL ; if (jk_dictionaryCapacities[mid] < tableSize) { bottom = mid + 1UL ; } else { top = mid; } }
901901 return (jk_dictionaryCapacities[bottom]);
902902}
@@ -2592,21 +2592,23 @@ static int jk_encode_add_atom_to_buffer(JKEncodeState *encodeState, void *object
25922592 //
25932593 // XXX XXX XXX XXX
25942594
2595- BOOL workAroundMacOSXABIBreakingBug = NO ;
2596- if (JK_EXPECT_F (((NSUInteger )object) & 0x1 )) { workAroundMacOSXABIBreakingBug = YES ; goto slowClassLookup; }
25972595
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; }
26032605 else {
26042606 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; }
26102612 else {
26112613 if ((rerunningAfterClassFormatter == NO ) && (
26122614#ifdef __BLOCKS__
@@ -2788,7 +2790,8 @@ static int jk_encode_add_atom_to_buffer(JKEncodeState *encodeState, void *object
27882790 for (id keyObject in enumerateObject) {
27892791 if (JK_EXPECT_T (printComma)) { if (JK_EXPECT_F (jk_encode_write1 (encodeState, 0L , " ," ))) { return (1 ); } }
27902792 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 ); }
27922795 if (JK_EXPECT_F (jk_encode_add_atom_to_buffer (encodeState, keyObject))) { return (1 ); }
27932796 if (JK_EXPECT_F (jk_encode_write1 (encodeState, 0L , " :" ))) { return (1 ); }
27942797 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
27992802 for (idx = 0L ; idx < dictionaryCount; idx++) {
28002803 if (JK_EXPECT_T (printComma)) { if (JK_EXPECT_F (jk_encode_write1 (encodeState, 0L , " ," ))) { return (1 ); } }
28012804 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 ); }
28032807 if (JK_EXPECT_F (jk_encode_add_atom_to_buffer (encodeState, keys[idx]))) { return (1 ); }
28042808 if (JK_EXPECT_F (jk_encode_write1 (encodeState, 0L , " :" ))) { return (1 ); }
28052809 if (JK_EXPECT_F (jk_encode_add_atom_to_buffer (encodeState, objects[idx]))) { return (1 ); }
0 commit comments