]> code.delx.au - gnu-emacs/blobdiff - lisp/progmodes/sh-script.el
* lisp/progmodes/sh-script.el (sh-smie--sh-keyword-in-p): Don't inf-loop
[gnu-emacs] / lisp / progmodes / sh-script.el
index 9f5486a08df49e5698358d2910fdf1dcdd048c67..2cc43419f2b7c898bece95fb1a51bb368a2fb87e 100644 (file)
@@ -1730,7 +1730,7 @@ A keyword position is one where if we're looking at something that looks
 like a keyword, then it is a keyword."
   (let ((prev (funcall smie-backward-token-function)))
     (if (zerop (length prev))
-        (looking-back "\\s(" (1- (point)))
+        (looking-back "\\`\\|\\s(" (1- (point)))
       (assoc prev smie-grammar))))
 
 (defun sh-smie--newline-semi-p (&optional tok)
@@ -1804,12 +1804,14 @@ Does not preserve point."
       (setq prev (funcall smie-backward-token-function))
       (cond
        ((zerop (length prev))
-        (if newline
-            (progn (cl-assert words) (setq res 'word))
+       (cond
+        (newline (cl-assert words) (setq res 'word))
+        ((bobp) (setq res 'word))
+        (t
           (setq words t)
           (condition-case nil
               (forward-sexp -1)
-            (scan-error (setq res 'unknown)))))
+            (scan-error (setq res 'unknown))))))
        ((equal prev ";")
         (if words (setq newline t)
           (setq res 'keyword)))