[js] Improve readability and control flow of js date string parser.
parent
3dd6ea0a5d
commit
1b89a480bf
|
@ -21,6 +21,8 @@
|
||||||
#include "mozilla/FloatingPoint.h"
|
#include "mozilla/FloatingPoint.h"
|
||||||
#include "mozilla/Sprintf.h"
|
#include "mozilla/Sprintf.h"
|
||||||
|
|
||||||
|
#include "nsCRT.h"
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -958,11 +960,20 @@ ParseDate(const CharT* s, size_t length, ClippedTime* result)
|
||||||
while (i < length) {
|
while (i < length) {
|
||||||
int c = s[i];
|
int c = s[i];
|
||||||
i++;
|
i++;
|
||||||
if (c <= ' ' || c == ',' || c == '-') {
|
|
||||||
if (c == '-' && '0' <= s[i] && s[i] <= '9')
|
// Spaces, ASCII control characters, and commas are ignored.
|
||||||
|
if (c <= ' ' || c == ',')
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Dashes are delimiters if they're immediately followed by a number field.
|
||||||
|
// If they're not followed by a number field, they're simply ignored.
|
||||||
|
if (c == '-') {
|
||||||
|
if (i < length && nsCRT::IsAsciiDigit(s[i])) {
|
||||||
prevc = c;
|
prevc = c;
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c == '(') { /* comments) */
|
if (c == '(') { /* comments) */
|
||||||
int depth = 1;
|
int depth = 1;
|
||||||
while (i < length) {
|
while (i < length) {
|
||||||
|
@ -977,7 +988,9 @@ ParseDate(const CharT* s, size_t length, ClippedTime* result)
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ('0' <= c && c <= '9') {
|
|
||||||
|
// Parse a number field.
|
||||||
|
if (nsCRT::IsAsciiDigit(c)) {
|
||||||
int n = c - '0';
|
int n = c - '0';
|
||||||
while (i < length && '0' <= (c = s[i]) && c <= '9') {
|
while (i < length && '0' <= (c = s[i]) && c <= '9') {
|
||||||
n = n * 10 + c - '0';
|
n = n * 10 + c - '0';
|
||||||
|
|
Loading…
Reference in New Issue