1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-22 16:18:08 +02:00

Merge pull request #4982 from nnethercote/use-null-for-zero-args

Use null instead of [] for ops with no args.
This commit is contained in:
Yury Delendik 2014-06-23 15:38:48 -05:00
commit 3ad58db7e8
2 changed files with 26 additions and 15 deletions

View file

@ -653,7 +653,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
var name = args[0].name;
if (imageCache.key === name) {
operatorList.addOp(imageCache.fn, imageCache.args);
args = [];
args = null;
continue;
}
@ -677,7 +677,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
} else if (type.name === 'Image') {
self.buildPaintImageXObject(resources, xobj, false,
operatorList, name, imageCache);
args = [];
args = null;
continue;
} else if (type.name === 'PS') {
// PostScript XObjects are unused when viewing documents.
@ -703,12 +703,12 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
var cacheKey = args[0].cacheKey;
if (cacheKey && imageCache.key === cacheKey) {
operatorList.addOp(imageCache.fn, imageCache.args);
args = [];
args = null;
continue;
}
self.buildPaintImageXObject(resources, args[0], true,
operatorList, cacheKey, imageCache);
args = [];
args = null;
continue;
case OPS.showText:
args[0] = self.handleText(args[0], stateManager.state);
@ -2099,7 +2099,9 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
},
read: function EvaluatorPreprocessor_read(operation) {
var args = [];
// We use an array to represent args, except we use |null| to represent
// no args because it's more compact than an empty array.
var args = null;
while (true) {
var obj = this.parser.getObj();
if (isEOF(obj)) {
@ -2108,6 +2110,9 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
if (!isCmd(obj)) {
// argument
if (obj !== null) {
if (!args) {
args = [];
}
args.push((obj instanceof Dict ? obj.getAll() : obj));
assert(args.length <= 33, 'Too many arguments');
}
@ -2127,28 +2132,34 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
if (!opSpec.variableArgs) {
// Some post script commands can be nested, e.g. /F2 /GS2 gs 5.711 Tf
if (args.length !== numArgs) {
var argsLength = args !== null ? args.length : 0;
if (argsLength !== numArgs) {
var nonProcessedArgs = this.nonProcessedArgs;
while (args.length > numArgs) {
while (argsLength > numArgs) {
nonProcessedArgs.push(args.shift());
argsLength--;
}
while (args.length < numArgs && nonProcessedArgs.length !== 0) {
while (argsLength < numArgs && nonProcessedArgs.length !== 0) {
if (!args) {
args = [];
}
args.unshift(nonProcessedArgs.pop());
argsLength++;
}
}
if (args.length < numArgs) {
if (argsLength < numArgs) {
// If we receive too few args, it's not possible to possible
// to execute the command, so skip the command
info('Command ' + fn + ': because expected ' +
numArgs + ' args, but received ' + args.length +
numArgs + ' args, but received ' + argsLength +
' args; skipping');
args = [];
args = null;
continue;
}
} else if (args.length > numArgs) {
} else if (argsLength > numArgs) {
info('Command ' + fn + ': expected [0,' + numArgs +
'] args, but received ' + args.length + ' args');
'] args, but received ' + argsLength + ' args');
}
// TODO figure out how to type-check vararg functions