Changeset 24394 in webkit for trunk/JavaScriptCore/kjs/ustring.cpp
- Timestamp:
- Jul 17, 2007, 7:25:38 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/ustring.cpp
r20004 r24394 4 4 * Copyright (C) 1999-2000 Harri Porten ([email protected]) 5 5 * Copyright (C) 2004 Apple Computer, Inc. 6 * Copyright (C) 2007 Cameron Zwarich ([email protected]) 6 7 * 7 8 * This library is free software; you can redistribute it and/or … … 27 28 #include "JSLock.h" 28 29 #include "dtoa.h" 30 #include "function.h" 29 31 #include "identifier.h" 30 32 #include "operations.h" … … 889 891 // hex number ? 890 892 if (*c == '0' && (*(c+1) == 'x' || *(c+1) == 'X')) { 893 const char* firstDigitPosition = c + 2; 891 894 c++; 892 895 d = 0.0; … … 899 902 break; 900 903 } 904 905 if (d >= mantissaOverflowLowerBound) 906 d = parseIntOverflow(firstDigitPosition, c - firstDigitPosition, 16); 901 907 } else { 902 908 // regular number ? 903 909 char *end; 904 910 d = kjs_strtod(c, &end); 905 if ((d != 0.0 || end != c) && d != HUGE_VAL && d != -HUGE_VAL) {911 if ((d != 0.0 || end != c) && d != Inf && d != -Inf) { 906 912 c = end; 907 913 } else { 908 // infinity ?909 d = 1.0; 914 double sign = 1.0; 915 910 916 if (*c == '+') 911 917 c++; 912 918 else if (*c == '-') { 913 d= -1.0;919 sign = -1.0; 914 920 c++; 915 921 } 916 if (strncmp(c, "Infinity", 8) != 0) 922 923 // We used strtod() to do the conversion. However, strtod() handles 924 // infinite values slightly differently than JavaScript in that it 925 // converts the string "inf" with any capitalization to infinity, 926 // whereas the ECMA spec requires that it be converted to NaN. 927 928 if (strncmp(c, "Infinity", 8) == 0) { 929 d = sign * Inf; 930 c += 8; 931 } else if ((d == Inf || d == -Inf) && *c != 'I' && *c != 'i') 932 c = end; 933 else 917 934 return NaN; 918 d = d * Inf;919 c += 8;920 935 } 921 936 }
Note:
See TracChangeset
for help on using the changeset viewer.