[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master f146f13 17/38: js2-define-destruct-symbols-internal: Stop
From: |
Dmitry Gutov |
Subject: |
[elpa] master f146f13 17/38: js2-define-destruct-symbols-internal: Stop growing NAME-NODES exponentially |
Date: |
Wed, 09 Sep 2015 18:41:42 +0000 |
branch: master
commit f146f13a26df8c1f4fb5f7520fc5e1be5734d017
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>
js2-define-destruct-symbols-internal: Stop growing NAME-NODES exponentially
Fixes #259
---
js2-mode.el | 61 ++++++++++++++++++++++++++++++-----------------------------
1 files changed, 31 insertions(+), 30 deletions(-)
diff --git a/js2-mode.el b/js2-mode.el
index 8c007fe..95f2967 100644
--- a/js2-mode.el
+++ b/js2-mode.el
@@ -7967,38 +7967,39 @@ Scanner should be initialized."
pn))
(defun js2-define-destruct-symbols-internal
- (node decl-type face &optional ignore-not-in-block name-nodes)
+ (node decl-type face &optional ignore-not-in-block)
"Internal version of `js2-define-destruct-symbols'. The only
difference is that NAME-NODES is passed down recursively."
- (cond
- ((js2-name-node-p node)
- (let (leftpos)
- (js2-define-symbol decl-type (js2-name-node-name node)
- node ignore-not-in-block)
- (when face
- (js2-set-face (setq leftpos (js2-node-abs-pos node))
- (+ leftpos (js2-node-len node))
- face 'record))
- (setq name-nodes (append name-nodes (list node)))))
- ((js2-object-node-p node)
- (dolist (elem (js2-object-node-elems node))
- (when (js2-object-prop-node-p elem)
- (setq name-nodes
- (append name-nodes
- (js2-define-destruct-symbols-internal
- ;; In abbreviated destructuring {a, b}, right == left.
- (js2-object-prop-node-right elem)
- decl-type face ignore-not-in-block name-nodes))))))
- ((js2-array-node-p node)
- (dolist (elem (js2-array-node-elems node))
- (when elem
- (setq name-nodes
- (append name-nodes
- (js2-define-destruct-symbols-internal
- elem decl-type face ignore-not-in-block name-nodes))))))
- (t (js2-report-error "msg.no.parm" nil (js2-node-abs-pos node)
- (js2-node-len node))))
- name-nodes)
+ (let (name-nodes)
+ (cond
+ ((js2-name-node-p node)
+ (let (leftpos)
+ (js2-define-symbol decl-type (js2-name-node-name node)
+ node ignore-not-in-block)
+ (when face
+ (js2-set-face (setq leftpos (js2-node-abs-pos node))
+ (+ leftpos (js2-node-len node))
+ face 'record))
+ (setq name-nodes (list node))))
+ ((js2-object-node-p node)
+ (dolist (elem (js2-object-node-elems node))
+ (when (js2-object-prop-node-p elem)
+ (setq name-nodes
+ (append name-nodes
+ (js2-define-destruct-symbols-internal
+ ;; In abbreviated destructuring {a, b}, right == left.
+ (js2-object-prop-node-right elem)
+ decl-type face ignore-not-in-block))))))
+ ((js2-array-node-p node)
+ (dolist (elem (js2-array-node-elems node))
+ (when elem
+ (setq name-nodes
+ (append name-nodes
+ (js2-define-destruct-symbols-internal
+ elem decl-type face ignore-not-in-block))))))
+ (t (js2-report-error "msg.no.parm" nil (js2-node-abs-pos node)
+ (js2-node-len node))))
+ name-nodes))
(defun js2-define-destruct-symbols (node decl-type face &optional
ignore-not-in-block)
"Declare and fontify destructuring parameters inside NODE.
- [elpa] master 4bd8df9 09/38: Revert the "containerized build" commits, because Travis still hasn't, (continued)
- [elpa] master 4bd8df9 09/38: Revert the "containerized build" commits, because Travis still hasn't, Dmitry Gutov, 2015/09/09
- [elpa] master 9cdd4c6 10/38: -L ., Dmitry Gutov, 2015/09/09
- [elpa] master c47a894 11/38: Fix #247, indentation inside block comments, Dmitry Gutov, 2015/09/09
- [elpa] master 242af01 14/38: Handle @property like @param, and handle aliases, Dmitry Gutov, 2015/09/09
- [elpa] master c68646a 12/38: Never enable js2-minor-mode in js2-mode, Dmitry Gutov, 2015/09/09
- [elpa] master 5beb8ea 13/38: Define js2-re-search-forward as an alias as well, Dmitry Gutov, 2015/09/09
- [elpa] master fc56c58 16/38: js2-define-destruct-symbols-internal: Anticipate js2-getter-setter-node, Dmitry Gutov, 2015/09/09
- [elpa] master c8b8e11 19/38: js2-define-destruct-symbols: Speed up, theoretically, Dmitry Gutov, 2015/09/09
- [elpa] master a6f2a94 15/38: Allow plain parameters after default, Dmitry Gutov, 2015/09/09
- [elpa] master d0686a0 18/38: js2-define-destruct-symbols-internal: Remove, don't need it anymore, Dmitry Gutov, 2015/09/09
- [elpa] master f146f13 17/38: js2-define-destruct-symbols-internal: Stop growing NAME-NODES exponentially,
Dmitry Gutov <=
- [elpa] master eba59c5 21/38: Added missing etags dependency, Dmitry Gutov, 2015/09/09
- [elpa] master 7184664 20/38: Add a jump to definition command bound to M-., Dmitry Gutov, 2015/09/09
- [elpa] master bc5cdb4 23/38: Simplified property name matching, Dmitry Gutov, 2015/09/09
- [elpa] master 1ee5c45 22/38: Return correct node when searching for the definition of a property., Dmitry Gutov, 2015/09/09
- [elpa] master 579aacb 24/38: Simplified method of searching for nodes based on scope, Dmitry Gutov, 2015/09/09
- [elpa] master f942b83 26/38: Support jumping to buffers of the same major mode, Dmitry Gutov, 2015/09/09
- [elpa] master 145c5d6 25/38: Fixed jumping to object properties, Dmitry Gutov, 2015/09/09
- [elpa] master bb0476c 29/38: Clarified js2-search-scope doc string, Dmitry Gutov, 2015/09/09
- [elpa] master c4f4095 28/38: Only jump if not already at var or function definition, Dmitry Gutov, 2015/09/09
- [elpa] master af85699 30/38: Clean up todo in js2-search-scope and fix year typo, Dmitry Gutov, 2015/09/09