More FastCharSearch based on profiling results.
This commit is contained in:
parent
5a1e6e994d
commit
7360e85a3a
|
@ -836,10 +836,8 @@ final class Scanner
|
||||||
/// Scan and throw away all characters until next line break.
|
/// Scan and throw away all characters until next line break.
|
||||||
void scanToNextBreak() @safe pure nothrow @nogc
|
void scanToNextBreak() @safe pure nothrow @nogc
|
||||||
{
|
{
|
||||||
while(!"\0\n\r\u0085\u2028\u2029"d.canFind(reader_.peek()))
|
mixin FastCharSearch!"\0\n\r\u0085\u2028\u2029"d search;
|
||||||
{
|
while(!search.canFind(reader_.peek())) { reader_.forward(); }
|
||||||
reader_.forward();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Scan all characters until next line break.
|
/// Scan all characters until next line break.
|
||||||
|
@ -1137,6 +1135,7 @@ final class Scanner
|
||||||
// (slice) we will produce.
|
// (slice) we will produce.
|
||||||
uint handleEnd;
|
uint handleEnd;
|
||||||
|
|
||||||
|
mixin FastCharSearch!" \0\n\r\u0085\u2028\u2029"d search;
|
||||||
if(c == '<')
|
if(c == '<')
|
||||||
{
|
{
|
||||||
reader_.forward(2);
|
reader_.forward(2);
|
||||||
|
@ -1163,7 +1162,7 @@ final class Scanner
|
||||||
uint length = 1;
|
uint length = 1;
|
||||||
bool useHandle = false;
|
bool useHandle = false;
|
||||||
|
|
||||||
while(!" \0\n\r\u0085\u2028\u2029"d.canFind(c))
|
while(!search.canFind(c))
|
||||||
{
|
{
|
||||||
if(c == '!')
|
if(c == '!')
|
||||||
{
|
{
|
||||||
|
@ -1191,7 +1190,7 @@ final class Scanner
|
||||||
if(error_) { return Token.init; }
|
if(error_) { return Token.init; }
|
||||||
}
|
}
|
||||||
|
|
||||||
if(" \0\n\r\u0085\u2028\u2029"d.canFind(reader_.peek()))
|
if(search.canFind(reader_.peek()))
|
||||||
{
|
{
|
||||||
char[] slice = reader_.sliceBuilder.finish();
|
char[] slice = reader_.sliceBuilder.finish();
|
||||||
return tagToken(startMark, reader_.mark, slice, handleEnd);
|
return tagToken(startMark, reader_.mark, slice, handleEnd);
|
||||||
|
@ -1551,7 +1550,7 @@ final class Scanner
|
||||||
oldSliceLength = slice.length;
|
oldSliceLength = slice.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
reader_.sliceBuilder.write(reader_.get(length));
|
reader_.sliceBuilder.write(reader_.get(numCodePoints));
|
||||||
|
|
||||||
c = reader_.peek();
|
c = reader_.peek();
|
||||||
if(quotes == SingleQuoted && c == '\'' && reader_.peek(1) == '\'')
|
if(quotes == SingleQuoted && c == '\'' && reader_.peek(1) == '\'')
|
||||||
|
@ -1803,8 +1802,10 @@ final class Scanner
|
||||||
char[] whitespaces = reader_.get(length);
|
char[] whitespaces = reader_.get(length);
|
||||||
|
|
||||||
dchar c = reader_.peek();
|
dchar c = reader_.peek();
|
||||||
|
mixin FastCharSearch!" \n\r\u0085\u2028\u2029"d search;
|
||||||
// No newline after the spaces (if any)
|
// No newline after the spaces (if any)
|
||||||
if(!"\n\r\u0085\u2028\u2029"d.canFind(c))
|
// (Excluding ' ' so we can use the same FastCharSearch as below)
|
||||||
|
if(!search.canFind(c) && c != ' ')
|
||||||
{
|
{
|
||||||
// We have spaces, but no newline.
|
// We have spaces, but no newline.
|
||||||
if(whitespaces.length > 0) { reader_.sliceBuilder.write(whitespaces); }
|
if(whitespaces.length > 0) { reader_.sliceBuilder.write(whitespaces); }
|
||||||
|
@ -1828,7 +1829,7 @@ final class Scanner
|
||||||
alias Transaction = SliceBuilder.Transaction;
|
alias Transaction = SliceBuilder.Transaction;
|
||||||
auto transaction = Transaction(reader_.sliceBuilder);
|
auto transaction = Transaction(reader_.sliceBuilder);
|
||||||
if(lineBreak != '\n') { reader_.sliceBuilder.write(lineBreak); }
|
if(lineBreak != '\n') { reader_.sliceBuilder.write(lineBreak); }
|
||||||
while(" \n\r\u0085\u2028\u2029"d.canFind(reader_.peek()))
|
while(search.canFind(reader_.peek()))
|
||||||
{
|
{
|
||||||
if(reader_.peekByte() == ' ') { reader_.forward(); }
|
if(reader_.peekByte() == ' ') { reader_.forward(); }
|
||||||
else
|
else
|
||||||
|
@ -1898,7 +1899,8 @@ final class Scanner
|
||||||
const startLen = reader_.sliceBuilder.length;
|
const startLen = reader_.sliceBuilder.length;
|
||||||
{
|
{
|
||||||
uint length = 0;
|
uint length = 0;
|
||||||
while(c.isAlphaNum || "-;/?:@&=+$,_.!~*\'()[]%"d.canFind(c))
|
mixin FastCharSearch!"-;/?:@&=+$,_.!~*\'()[]%"d search;
|
||||||
|
while(c.isAlphaNum || search.canFind(c))
|
||||||
{
|
{
|
||||||
if(c == '%')
|
if(c == '%')
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue