Index: src/OFNumber.m ================================================================== --- src/OFNumber.m +++ src/OFNumber.m @@ -1389,11 +1389,21 @@ return [element autorelease]; } - (OFString*)JSONRepresentation { + double doubleValue; + if (type == OF_NUMBER_BOOL) return (value.bool_ ? @"true" : @"false"); + + doubleValue = [self doubleValue]; + if (isinf(doubleValue)) { + if (doubleValue > 0) + return @"Infinity"; + else + return @"-Infinity"; + } return [self description]; } @end Index: src/OFString+JSONValue.m ================================================================== --- src/OFString+JSONValue.m +++ src/OFString+JSONValue.m @@ -16,10 +16,12 @@ #include "config.h" #include #include + +#include #include #import "OFString+JSONValue.h" #import "OFArray.h" @@ -560,10 +562,14 @@ number = [OFNumber numberWithDouble: [string doubleValue]]; else if (isHex) number = [OFNumber numberWithIntMax: [string hexadecimalValue]]; + else if ([string isEqual: @"Infinity"]) + number = [OFNumber numberWithDouble: INFINITY]; + else if ([string isEqual: @"-Infinity"]) + number = [OFNumber numberWithDouble: -INFINITY]; else number = [OFNumber numberWithIntMax: [string decimalValue]]; } @finally { [string release]; @@ -627,12 +633,14 @@ case '5': case '6': case '7': case '8': case '9': + case '+': case '-': case '.': + case 'I': return parseNumber(pointer, stop, line); default: return nil; } }