]> git.parisson.com Git - pdf.js.git/commitdiff
Updating PartialEvaluator.eval syntax for better performance
authorSaebekassebil <saebekassebil@gmail.com>
Mon, 18 Jul 2011 10:09:26 +0000 (12:09 +0200)
committerSaebekassebil <saebekassebil@gmail.com>
Mon, 18 Jul 2011 10:09:26 +0000 (12:09 +0200)
pdf.js

diff --git a/pdf.js b/pdf.js
index 05330db84c4502a84a774416d480453aaf545ef2..5e2aa87b165a6e6efac60a7d0eb94df2895145ad 100644 (file)
--- a/pdf.js
+++ b/pdf.js
@@ -3561,23 +3561,9 @@ var PartialEvaluator = (function() {
     eval: function(stream, xref, resources, fonts) {
       resources = xref.fetchIfRef(resources) || new Dict();
       var xobjs = xref.fetchIfRef(resources.get('XObject')) || new Dict();
-
       var parser = new Parser(new Lexer(stream), false);
-      var objpool = [];
-
-      function emitArg(arg) {
-        if (typeof arg == 'object' || typeof arg == 'string') {
-          var index = objpool.length;
-          objpool[index] = arg;
-          return 'objpool[' + index + ']';
-        }
-        return arg;
-      }
-
-      var src = '';
-
-      var args = [];
-      var obj;
+      var args = [], argsArray = [], fnArray = [], obj;
+      
       while (!IsEOF(obj = parser.getObj())) {
         if (IsCmd(obj)) {
           var cmd = obj.cmd;
@@ -3600,9 +3586,9 @@ var PartialEvaluator = (function() {
 
               if ('Form' == type.name) {
                 args[0].code = this.eval(xobj,
-                                         xref,
-                                         xobj.dict.get('Resources'),
-                                         fonts);
+                                            xref,
+                                            xobj.dict.get('Resources'),
+                                            fonts);
               }
             }
           } else if (cmd == 'Tf') { // eagerly collect all fonts
@@ -3622,21 +3608,20 @@ var PartialEvaluator = (function() {
             }
           }
 
-          src += 'this.';
-          src += fn;
-          src += '(';
-          src += args.map(emitArg).join(',');
-          src += ');\n';
-
-          args.length = 0;
+          fnArray.push(fn);
+          argsArray.push(args);
+          args = [];
         } else {
           assertWellFormed(args.length <= 33, 'Too many arguments');
           args.push(obj);
         }
       }
 
-      var fn = Function('objpool', src);
-      return function(gfx) { fn.call(gfx, objpool); };
+      return function(gfx) {
+        for(var i = 0, length = argsArray.length; i < length; i++) {
+          gfx[fnArray[i]].apply(gfx, argsArray[i]);
+        }
+      }
     },
 
     translateFont: function(fontDict, xref, resources) {