зеркало из https://github.com/mozilla/gecko-dev.git
Bug 639420 - Speed up the scanner ten ways, part 6. r=brendan.
This commit is contained in:
Родитель
8d79a77d17
Коммит
7258795aa4
|
@ -775,15 +775,6 @@ TokenStream::newToken(ptrdiff_t adjust)
|
|||
return tp;
|
||||
}
|
||||
|
||||
static JS_ALWAYS_INLINE JSBool
|
||||
ScanAsSpace(jschar c)
|
||||
{
|
||||
/* Treat little- and big-endian BOMs as whitespace for compatibility. */
|
||||
if (JS_ISSPACE(c) || c == 0xfffe || c == 0xfeff)
|
||||
return JS_TRUE;
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
JS_ALWAYS_INLINE JSAtom *
|
||||
TokenStream::atomize(JSContext *cx, CharBuffer &cb)
|
||||
{
|
||||
|
@ -1017,7 +1008,7 @@ TokenStream::getTokenInternal()
|
|||
flags |= TSF_EOL;
|
||||
continue;
|
||||
}
|
||||
} while (ScanAsSpace((jschar)c));
|
||||
} while (JS_ISSPACE_OR_BOM((jschar)c));
|
||||
|
||||
if (c == EOF) {
|
||||
tp = newToken(0); /* no -1 here because userbuf.ptr isn't incremented for EOF */
|
||||
|
@ -1620,7 +1611,7 @@ TokenStream::getTokenInternal()
|
|||
cp[3] == 'n' &&
|
||||
cp[4] == 'e') {
|
||||
skipChars(5);
|
||||
while ((c = getChar()) != '\n' && ScanAsSpace((jschar)c))
|
||||
while ((c = getChar()) != '\n' && JS_ISSPACE_OR_BOM((jschar)c))
|
||||
continue;
|
||||
if (JS7_ISDEC(c)) {
|
||||
line = JS7_UNDEC(c);
|
||||
|
@ -1632,7 +1623,7 @@ TokenStream::getTokenInternal()
|
|||
}
|
||||
line = temp;
|
||||
}
|
||||
while (c != '\n' && ScanAsSpace((jschar)c))
|
||||
while (c != '\n' && JS_ISSPACE_OR_BOM((jschar)c))
|
||||
c = getChar();
|
||||
i = 0;
|
||||
if (c == '"') {
|
||||
|
@ -1647,7 +1638,7 @@ TokenStream::getTokenInternal()
|
|||
}
|
||||
if (c == '"') {
|
||||
while ((c = getChar()) != '\n' &&
|
||||
ScanAsSpace((jschar)c)) {
|
||||
JS_ISSPACE_OR_BOM((jschar)c)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5639,27 +5639,49 @@ const jschar js_uriUnescaped_ucstr[] =
|
|||
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
|
||||
'-', '_', '.', '!', '~', '*', '\'', '(', ')', 0};
|
||||
|
||||
#define ____ false
|
||||
|
||||
/*
|
||||
* This table allows efficient testing for the regular expression \w which is
|
||||
* defined by ECMA-262 15.10.2.6 to be [0-9A-Z_a-z].
|
||||
*/
|
||||
const bool js_alnum[] = {
|
||||
/* 0 1 2 3 4 5 5 7 8 9 */
|
||||
/* 0 */ false, false, false, false, false, false, false, false, false, false,
|
||||
/* 1 */ false, false, false, false, false, false, false, false, false, false,
|
||||
/* 2 */ false, false, false, false, false, false, false, false, false, false,
|
||||
/* 3 */ false, false, false, false, false, false, false, false, false, false,
|
||||
/* 4 */ false, false, false, false, false, false, false, false, true, true,
|
||||
/* 5 */ true, true, true, true, true, true, true, true, false, false,
|
||||
/* 6 */ false, false, false, false, false, true, true, true, true, true,
|
||||
/* 0 1 2 3 4 5 6 7 8 9 */
|
||||
/* 0 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
|
||||
/* 1 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
|
||||
/* 2 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
|
||||
/* 3 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
|
||||
/* 4 */ ____, ____, ____, ____, ____, ____, ____, ____, true, true,
|
||||
/* 5 */ true, true, true, true, true, true, true, true, ____, ____,
|
||||
/* 6 */ ____, ____, ____, ____, ____, true, true, true, true, true,
|
||||
/* 7 */ true, true, true, true, true, true, true, true, true, true,
|
||||
/* 8 */ true, true, true, true, true, true, true, true, true, true,
|
||||
/* 9 */ true, false, false, false, false, true, false, true, true, true,
|
||||
/* 9 */ true, ____, ____, ____, ____, true, ____, true, true, true,
|
||||
/* 10 */ true, true, true, true, true, true, true, true, true, true,
|
||||
/* 11 */ true, true, true, true, true, true, true, true, true, true,
|
||||
/* 12 */ true, true, true, false, false, false, false, false
|
||||
/* 12 */ true, true, true, ____, ____, ____, ____, ____
|
||||
};
|
||||
|
||||
/* Whitespace chars: '\t', '\n', '\v', '\f', '\r', ' '. */
|
||||
const bool js_isspace[] = {
|
||||
/* 0 1 2 3 4 5 6 7 8 9 */
|
||||
/* 0 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, true,
|
||||
/* 1 */ true, true, true, true, ____, ____, ____, ____, ____, ____,
|
||||
/* 2 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
|
||||
/* 3 */ ____, ____, true, ____, ____, ____, ____, ____, ____, ____,
|
||||
/* 4 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
|
||||
/* 5 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
|
||||
/* 6 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
|
||||
/* 7 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
|
||||
/* 8 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
|
||||
/* 9 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
|
||||
/* 10 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
|
||||
/* 11 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
|
||||
/* 12 */ ____, ____, ____, ____, ____, ____, ____, ____
|
||||
};
|
||||
|
||||
#undef ____
|
||||
|
||||
#define URI_CHUNK 64U
|
||||
|
||||
static inline bool
|
||||
|
@ -5669,7 +5691,7 @@ TransferBufferToString(JSContext *cx, StringBuffer &sb, Value *rval)
|
|||
if (!str)
|
||||
return false;
|
||||
rval->setString(str);
|
||||
return true;;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -732,15 +732,29 @@ extern const bool js_alnum[];
|
|||
const jschar BYTE_ORDER_MARK = 0xFEFF;
|
||||
const jschar NO_BREAK_SPACE = 0x00A0;
|
||||
|
||||
extern const bool js_isspace[];
|
||||
|
||||
static inline bool
|
||||
JS_ISSPACE(jschar c)
|
||||
JS_ISSPACE(int c)
|
||||
{
|
||||
unsigned w = c;
|
||||
|
||||
if (w < 256)
|
||||
return (w <= ' ' && (w == ' ' || (9 <= w && w <= 0xD))) || w == NO_BREAK_SPACE;
|
||||
return (w < 128)
|
||||
? js_isspace[w]
|
||||
: w == NO_BREAK_SPACE || w == BYTE_ORDER_MARK ||
|
||||
(JS_CCODE(w) & 0x00070000) == 0x00040000;
|
||||
}
|
||||
|
||||
return w == BYTE_ORDER_MARK || (JS_CCODE(w) & 0x00070000) == 0x00040000;
|
||||
static inline bool
|
||||
JS_ISSPACE_OR_BOM(int c)
|
||||
{
|
||||
unsigned w = c;
|
||||
|
||||
/* Treat little- and big-endian BOMs as whitespace for compatibility. */
|
||||
return (w < 128)
|
||||
? js_isspace[w]
|
||||
: w == NO_BREAK_SPACE || w == BYTE_ORDER_MARK ||
|
||||
(JS_CCODE(w) & 0x00070000) == 0x00040000 || w == 0xfffe || w == 0xfeff;
|
||||
}
|
||||
|
||||
#define JS_ISPRINT(c) ((c) < 128 && isprint(c))
|
||||
|
|
Загрузка…
Ссылка в новой задаче