]> code.delx.au - gnu-emacs-elpa/commitdiff
Add tail-end optimization.
authorJackson Ray Hamilton <jackson@jacksonrayhamilton.com>
Fri, 21 Nov 2014 17:44:40 +0000 (09:44 -0800)
committerJackson Ray Hamilton <jackson@jacksonrayhamilton.com>
Fri, 21 Nov 2014 17:44:40 +0000 (09:44 -0800)
scopifier.js

index 29bdc85af3d6b677985d0104fdea1b25b8bcf253..c534ca7c2d7f49c715bb206da3ff23c6e89c532e 100644 (file)
@@ -21,6 +21,7 @@ process.stdin.on('end', function () {
         scopes = [],
         symbols = [],
         comments = [],
+        continuous,
         emacsified;
 
     // Gracefully handle parse errors by doing nothing.
@@ -111,7 +112,21 @@ process.stdin.on('end', function () {
         ]);
     });
 
-    emacsified = scopes.concat(symbols.concat(comments));
+    continuous = symbols.concat(comments).sort(function (a, b) {
+        return a[1] - b[1];
+    });
+
+    continuous = continuous.slice(1).reduce(function (soFar, token) {
+        var previous = soFar[soFar.length - 1];
+        if (previous[0] === token[0]) {
+            previous[2] = token[2];
+            return soFar;
+        }
+        soFar.push(token);
+        return soFar;
+    }, continuous.slice(0, 1));
+
+    emacsified = scopes.concat(continuous);
 
     emacsified.forEach(function (instruction) {
         // Emacs starts counting from 1.