Avoid creating intermediate strings in the PostScriptLexer
This commit is contained in:
parent
1e52c770d9
commit
4960af3a4c
@ -137,6 +137,8 @@ var PostScriptLexer = (function PostScriptLexerClosure() {
|
||||
function PostScriptLexer(stream) {
|
||||
this.stream = stream;
|
||||
this.nextChar();
|
||||
|
||||
this.strBuf = [];
|
||||
}
|
||||
PostScriptLexer.prototype = {
|
||||
nextChar: function PostScriptLexer_nextChar() {
|
||||
@ -177,11 +179,15 @@ var PostScriptLexer = (function PostScriptLexerClosure() {
|
||||
return PostScriptToken.RBRACE;
|
||||
}
|
||||
// operator
|
||||
var str = String.fromCharCode(ch);
|
||||
var strBuf = this.strBuf;
|
||||
strBuf.length = 0;
|
||||
strBuf[0] = String.fromCharCode(ch);
|
||||
|
||||
while ((ch = this.nextChar()) >= 0 && // and 'A'-'Z', 'a'-'z'
|
||||
((ch >= 0x41 && ch <= 0x5A) || (ch >= 0x61 && ch <= 0x7A))) {
|
||||
str += String.fromCharCode(ch);
|
||||
strBuf.push(String.fromCharCode(ch));
|
||||
}
|
||||
var str = strBuf.join('');
|
||||
switch (str.toLowerCase()) {
|
||||
case 'if':
|
||||
return PostScriptToken.IF;
|
||||
@ -193,16 +199,19 @@ var PostScriptLexer = (function PostScriptLexerClosure() {
|
||||
},
|
||||
getNumber: function PostScriptLexer_getNumber() {
|
||||
var ch = this.currentChar;
|
||||
var str = String.fromCharCode(ch);
|
||||
var strBuf = this.strBuf;
|
||||
strBuf.length = 0;
|
||||
strBuf[0] = String.fromCharCode(ch);
|
||||
|
||||
while ((ch = this.nextChar()) >= 0) {
|
||||
if ((ch >= 0x30 && ch <= 0x39) || // '0'-'9'
|
||||
ch === 0x2D || ch === 0x2E) { // '-', '.'
|
||||
str += String.fromCharCode(ch);
|
||||
strBuf.push(String.fromCharCode(ch));
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
var value = parseFloat(str);
|
||||
var value = parseFloat(strBuf.join(''));
|
||||
if (isNaN(value)) {
|
||||
error('Invalid floating point number: ' + value);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user