emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master 27db37a 202/271: Use a hash table as a scope level fast tr


From: Jackson Ray Hamilton
Subject: [elpa] master 27db37a 202/271: Use a hash table as a scope level fast track.
Date: Thu, 05 Feb 2015 18:31:12 +0000

branch: master
commit 27db37af12f27d6d989c2031b8d21cab1088347d
Author: Jackson Ray Hamilton <address@hidden>
Commit: Jackson Ray Hamilton <address@hidden>

    Use a hash table as a scope level fast track.
---
 context-coloring.el |   35 ++++++++++++++++++++++-------------
 1 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/context-coloring.el b/context-coloring.el
index 7005dcf..ac941db 100644
--- a/context-coloring.el
+++ b/context-coloring.el
@@ -227,21 +227,28 @@ END (exclusive) with the face corresponding to LEVEL."
 
 ;;; js2-mode colorization
 
+(defvar-local context-coloring-js2-scope-level-hash-table nil
+  "Associates `js2-scope' structures and with their scope
+  levels.")
+
 (defsubst context-coloring-js2-scope-level (scope)
   "Gets the level of SCOPE."
-  (let ((level 0)
-        enclosing-scope)
-    (while (and scope
-                (js2-node-parent scope)
-                (setq enclosing-scope (js2-node-get-enclosing-scope scope)))
-      (when (or context-coloring-js-block-scopes
-                (let ((type (js2-scope-type scope)))
-                  (or (= type js2-SCRIPT)
-                      (= type js2-FUNCTION)
-                      (= type js2-CATCH))))
-        (setq level (+ level 1)))
-      (setq scope enclosing-scope))
-    level))
+  (cond ((gethash scope context-coloring-js2-scope-level-hash-table))
+        (t
+         (let ((level 0)
+               (current-scope scope)
+               enclosing-scope)
+           (while (and current-scope
+                       (js2-node-parent current-scope)
+                       (setq enclosing-scope (js2-node-get-enclosing-scope 
current-scope)))
+             (when (or context-coloring-js-block-scopes
+                       (let ((type (js2-scope-type current-scope)))
+                         (or (= type js2-SCRIPT)
+                             (= type js2-FUNCTION)
+                             (= type js2-CATCH))))
+               (setq level (+ level 1)))
+             (setq current-scope enclosing-scope))
+           (puthash scope level 
context-coloring-js2-scope-level-hash-table)))))
 
 (defsubst context-coloring-js2-name-node-level (node)
   (cond ((js2-node-top-level-decl-p node)
@@ -274,6 +281,8 @@ variable."
 (defun context-coloring-js2-colorize ()
   "Colorizes the current buffer using the abstract syntax tree
 generated by js2-mode."
+  ;; Reset the hash table; the old one could be obsolete.
+  (setq context-coloring-js2-scope-level-hash-table (make-hash-table :test 
'eq))
   (with-silent-modifications
     (js2-visit-ast
      js2-mode-ast



reply via email to

[Prev in Thread] Current Thread [Next in Thread]