aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Gutov2019-02-01 03:01:39 +0300
committerDmitry Gutov2019-02-01 03:02:06 +0300
commitb01a4295c2f9bb58858880e4e28b05cc8396791c (patch)
tree0a2486d50106ea36222fdac2922b31fe0c75ab7f
parent47679e63230da94cffed568a4d5167ffc1baea96 (diff)
downloademacs-b01a4295c2f9bb58858880e4e28b05cc8396791c.tar.gz
emacs-b01a4295c2f9bb58858880e4e28b05cc8396791c.zip
js--re-search-backward-inner: Fix infloop
Fix JS indentation infloop reported in https://github.com/mooz/js2-mode/issues/513. * lisp/progmodes/js.el (js--re-search-backward-inner): Account for multiline string literals. * test/manual/indent/js.js: New test example.
-rw-r--r--lisp/progmodes/js.el9
-rw-r--r--test/manual/indent/js.js7
2 files changed, 8 insertions, 8 deletions
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index e55539c17f4..a94a2fe134e 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -785,7 +785,6 @@ macro as normal text."
785(defun js--re-search-backward-inner (regexp &optional bound count) 785(defun js--re-search-backward-inner (regexp &optional bound count)
786 "Auxiliary function for `js--re-search-backward'." 786 "Auxiliary function for `js--re-search-backward'."
787 (let ((parse) 787 (let ((parse)
788 str-terminator
789 (orig-macro-start 788 (orig-macro-start
790 (save-excursion 789 (save-excursion
791 (and (js--beginning-of-macro) 790 (and (js--beginning-of-macro)
@@ -796,13 +795,7 @@ macro as normal text."
796 (save-excursion (backward-char) (looking-at "/[/*]"))) 795 (save-excursion (backward-char) (looking-at "/[/*]")))
797 (forward-char)) 796 (forward-char))
798 (setq parse (syntax-ppss)) 797 (setq parse (syntax-ppss))
799 (cond ((setq str-terminator (nth 3 parse)) 798 (cond ((nth 8 parse)
800 (when (eq str-terminator t)
801 (setq str-terminator ?/))
802 (re-search-backward
803 (concat "\\([^\\]\\|^\\)" (string str-terminator))
804 (point-at-bol) t))
805 ((nth 7 parse)
806 (goto-char (nth 8 parse))) 799 (goto-char (nth 8 parse)))
807 ((or (nth 4 parse) 800 ((or (nth 4 parse)
808 (and (eq (char-before) ?/) (eq (char-after) ?*))) 801 (and (eq (char-before) ?/) (eq (char-after) ?*)))
diff --git a/test/manual/indent/js.js b/test/manual/indent/js.js
index b0d8bcabd20..df790986947 100644
--- a/test/manual/indent/js.js
+++ b/test/manual/indent/js.js
@@ -144,6 +144,13 @@ bar(
144 /abc/ 144 /abc/
145) 145)
146 146
147// No infloop inside js--re-search-backward-inner
148let b = {
149 a : `
150 //1
151 `
152}
153
147// Local Variables: 154// Local Variables:
148// indent-tabs-mode: nil 155// indent-tabs-mode: nil
149// js-indent-level: 2 156// js-indent-level: 2