Merge pull request #959 from jviereck/cache_cmds

Cache Cmd object to reduce number of created objects
This commit is contained in:
Julian Viereck 2011-12-19 07:40:08 -08:00
commit eaba65b5dc
2 changed files with 17 additions and 6 deletions

View File

@ -22,6 +22,17 @@ var Cmd = (function CmdClosure() {
Cmd.prototype = {
};
var cmdCache = {};
Cmd.get = function cmdGet(cmd) {
var cmdValue = cmdCache[cmd];
if (cmdValue)
return cmdValue;
return cmdCache[cmd] = new Cmd(cmd);
};
return Cmd;
})();

View File

@ -157,7 +157,7 @@ var Parser = (function ParserClosure() {
imageStream = this.filter(imageStream, dict, length);
imageStream.parameters = dict;
this.buf2 = new Cmd('EI');
this.buf2 = Cmd.get('EI');
this.shift();
return imageStream;
@ -496,14 +496,14 @@ var Lexer = (function LexerClosure() {
// array punctuation
case '[':
case ']':
return new Cmd(ch);
return Cmd.get(ch);
// hex string or dict punctuation
case '<':
ch = stream.lookChar();
if (ch == '<') {
// dict punctuation
stream.skip();
return new Cmd('<<');
return Cmd.get('<<');
}
return this.getHexString(ch);
// dict punctuation
@ -511,11 +511,11 @@ var Lexer = (function LexerClosure() {
ch = stream.lookChar();
if (ch == '>') {
stream.skip();
return new Cmd('>>');
return Cmd.get('>>');
}
case '{':
case '}':
return new Cmd(ch);
return Cmd.get(ch);
// fall through
case ')':
error('Illegal character: ' + ch);
@ -538,7 +538,7 @@ var Lexer = (function LexerClosure() {
return false;
if (str == 'null')
return null;
return new Cmd(str);
return Cmd.get(str);
},
skipToNextLine: function lexerSkipToNextLine() {
var stream = this.stream;