1
0
mirror of https://github.com/gorhill/uBlock.git synced 2024-09-18 17:02:27 +02:00

avoid slicing, just store and use result from RegExp.exec

This commit is contained in:
gorhill 2014-09-21 17:29:48 -04:00
parent 1940321354
commit 7bccfcfc68

View File

@ -1237,6 +1237,7 @@ FilterParser.prototype.parse = function(s) {
var TokenEntry = function() { var TokenEntry = function() {
this.beg = 0; this.beg = 0;
this.end = 0; this.end = 0;
this.token = '';
}; };
/******************************************************************************/ /******************************************************************************/
@ -1600,6 +1601,10 @@ FilterContainer.prototype.addToCategory = function(category, tokenKey, filter) {
/******************************************************************************/ /******************************************************************************/
// Since the addition of the `important` evaluation, this means it is now
// likely that the url will have to be scanned more than once. So this is
// to ensure we do it once only, and reuse results.
FilterContainer.prototype.tokenize = function(url) { FilterContainer.prototype.tokenize = function(url) {
var tokens = this.tokens; var tokens = this.tokens;
var re = this.reAnyToken; var re = this.reAnyToken;
@ -1613,6 +1618,7 @@ FilterContainer.prototype.tokenize = function(url) {
} }
tokenEntry.beg = matches.index; tokenEntry.beg = matches.index;
tokenEntry.end = re.lastIndex; tokenEntry.end = re.lastIndex;
tokenEntry.token = matches[0];
i += 1; i += 1;
} }
// Sentinel // Sentinel
@ -1620,7 +1626,7 @@ FilterContainer.prototype.tokenize = function(url) {
if ( tokenEntry === undefined ) { if ( tokenEntry === undefined ) {
tokenEntry = tokens[i] = new TokenEntry(); tokenEntry = tokens[i] = new TokenEntry();
} }
tokenEntry.end = 0; tokenEntry.token = '';
}; };
/******************************************************************************/ /******************************************************************************/
@ -1633,16 +1639,15 @@ FilterContainer.prototype.matchTokens = function(url) {
var bucket3 = buckets[3]; var bucket3 = buckets[3];
var tokens = this.tokens; var tokens = this.tokens;
var tokenEntry, beg, end, token, f; var tokenEntry, beg, token, f;
var i = 0; var i = 0;
for (;;) { for (;;) {
tokenEntry = tokens[i++]; tokenEntry = tokens[i++];
end = tokenEntry.end; token = tokenEntry.token;
if ( end === 0 ) { if ( token === '' ) {
break; break;
} }
beg = tokenEntry.beg; beg = tokenEntry.beg;
token = url.slice(beg, end);
if ( bucket0 !== undefined ) { if ( bucket0 !== undefined ) {
f = bucket0[token]; f = bucket0[token];
if ( f !== undefined && f.match(url, beg) !== false ) { if ( f !== undefined && f.match(url, beg) !== false ) {