perf: Simplify reading of tokens.
This avoids checking isIdentifierStart for every single token
This commit is contained in:
parent
e4b8cfc768
commit
8df0500f55
@ -1933,7 +1933,7 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ensure that inside flow types, we bypass the jsx parser plugin
|
// ensure that inside flow types, we bypass the jsx parser plugin
|
||||||
readToken(code: number): void {
|
getTokenFromCode(code: number): void {
|
||||||
const next = this.state.input.charCodeAt(this.state.pos + 1);
|
const next = this.state.input.charCodeAt(this.state.pos + 1);
|
||||||
if (
|
if (
|
||||||
this.state.inType &&
|
this.state.inType &&
|
||||||
@ -1944,7 +1944,7 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
|||||||
this.state.isIterator = true;
|
this.state.isIterator = true;
|
||||||
return super.readWord();
|
return super.readWord();
|
||||||
} else {
|
} else {
|
||||||
return super.readToken(code);
|
return super.getTokenFromCode(code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -93,7 +93,7 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
|||||||
++this.state.pos;
|
++this.state.pos;
|
||||||
return this.finishToken(tt.jsxTagStart);
|
return this.finishToken(tt.jsxTagStart);
|
||||||
}
|
}
|
||||||
return this.getTokenFromCode(ch);
|
return super.getTokenFromCode(ch);
|
||||||
}
|
}
|
||||||
out += this.state.input.slice(chunkStart, this.state.pos);
|
out += this.state.input.slice(chunkStart, this.state.pos);
|
||||||
return this.finishToken(tt.jsxText, out);
|
return this.finishToken(tt.jsxText, out);
|
||||||
@ -520,8 +520,8 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
readToken(code: number): void {
|
getTokenFromCode(code: number): void {
|
||||||
if (this.state.inPropertyName) return super.readToken(code);
|
if (this.state.inPropertyName) return super.getTokenFromCode(code);
|
||||||
|
|
||||||
const context = this.curContext();
|
const context = this.curContext();
|
||||||
|
|
||||||
@ -557,7 +557,7 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
|||||||
return this.finishToken(tt.jsxTagStart);
|
return this.finishToken(tt.jsxTagStart);
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.readToken(code);
|
return super.getTokenFromCode(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
updateContext(prevType: TokenType): void {
|
updateContext(prevType: TokenType): void {
|
||||||
|
|||||||
@ -2213,11 +2213,11 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ensure that inside types, we bypass the jsx parser plugin
|
// ensure that inside types, we bypass the jsx parser plugin
|
||||||
readToken(code: number): void {
|
getTokenFromCode(code: number): void {
|
||||||
if (this.state.inType && (code === 62 || code === 60)) {
|
if (this.state.inType && (code === 62 || code === 60)) {
|
||||||
return this.finishOp(tt.relational, 1);
|
return this.finishOp(tt.relational, 1);
|
||||||
} else {
|
} else {
|
||||||
return super.readToken(code);
|
return super.getTokenFromCode(code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -214,17 +214,7 @@ export default class Tokenizer extends LocationParser {
|
|||||||
if (curContext.override) {
|
if (curContext.override) {
|
||||||
curContext.override(this);
|
curContext.override(this);
|
||||||
} else {
|
} else {
|
||||||
this.readToken(this.state.input.codePointAt(this.state.pos));
|
this.getTokenFromCode(this.state.input.codePointAt(this.state.pos));
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
readToken(code: number): void {
|
|
||||||
// Identifier or keyword. '\uXXXX' sequences are allowed in
|
|
||||||
// identifiers, so '\' also dispatches to that.
|
|
||||||
if (isIdentifierStart(code) || code === charCodes.backslash) {
|
|
||||||
this.readWord();
|
|
||||||
} else {
|
|
||||||
this.getTokenFromCode(code);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -826,6 +816,16 @@ export default class Tokenizer extends LocationParser {
|
|||||||
case charCodes.numberSign:
|
case charCodes.numberSign:
|
||||||
this.readToken_numberSign();
|
this.readToken_numberSign();
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case charCodes.backslash:
|
||||||
|
this.readWord();
|
||||||
|
return;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if (isIdentifierStart(code)) {
|
||||||
|
this.readWord();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.raise(
|
this.raise(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user