]> git.eshelyaron.com Git - emacs.git/commitdiff
* emacs-lisp/smie.el (smie-next-sexp): Break inf-loop at BOB.
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 18 May 2010 19:24:24 +0000 (15:24 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 18 May 2010 19:24:24 +0000 (15:24 -0400)
(smie-backward-sexp, smie-forward-sexp): Remove boundary condition now
handled in smie-next-sexp.
(smie-indent-calculate): Provide a starting indentation (so the
recursion is well-founded ;-).

lisp/ChangeLog
lisp/emacs-lisp/smie.el

index 91265a15bbff2fc0dbb80c56325c786d5d801b60..cb0ca655188a86a4813f715da3feb21523b3d8e2 100644 (file)
@@ -1,5 +1,11 @@
 2010-05-18  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * emacs-lisp/smie.el (smie-next-sexp): Break inf-loop at BOB.
+       (smie-backward-sexp, smie-forward-sexp): Remove boundary condition now
+       handled in smie-next-sexp.
+       (smie-indent-calculate): Provide a starting indentation (so the
+       recursion is well-founded ;-).
+
        Fix handling of non-associative equal levels.
        * emacs-lisp/smie.el (smie-prec2-levels): Choose distinct levels even
        when it's not needed.
index 0e7b0dc19ca208a437aa5f64e5045460dd6a1258..9ea2cf56890c0e8325d32c804ce951b09e04e37e 100644 (file)
@@ -348,10 +348,13 @@ Possible return values:
 
             (cond
              ((null toklevels)
-              (if (equal token "")
+              (when (equal token "")
                   (condition-case err
                       (progn (goto-char pos) (funcall next-sexp 1) nil)
-                    (scan-error (throw 'return (list t (caddr err)))))))
+                  (scan-error (throw 'return (list t (caddr err)))))
+                (if (eq pos (point))
+                    ;; We did not move, so let's abort the loop.
+                    (throw 'return (list t (point))))))
              ((null (funcall op-back toklevels))
               ;; A token like a paren-close.
               (assert (funcall op-forw toklevels)) ;Otherwise, why mention it?
@@ -401,15 +404,13 @@ Possible return values:
   (t POS TOKEN): same thing but for an open-paren or the beginning of buffer.
   (nil POS TOKEN): we skipped over a paren-like pair.
   nil: we skipped over an identifier, matched parentheses, ..."
-  (if (bobp) (list t (point))
     (smie-next-sexp
      (lambda () (forward-comment (- (point-max))) (smie-backward-token))
      (indirect-function 'backward-sexp)
      (indirect-function 'smie-op-left)
      (indirect-function 'smie-op-right)
-     halfsexp)))
+   halfsexp))
 
-;; Mirror image, not used for indentation.
 (defun smie-forward-sexp (&optional halfsexp)
   "Skip over one sexp.
 HALFSEXP if non-nil, means skip over a partial sexp if needed.  I.e. if the
@@ -421,13 +422,12 @@ Possible return values:
   (t POS TOKEN): same thing but for an open-paren or the beginning of buffer.
   (nil POS TOKEN): we skipped over a paren-like pair.
   nil: we skipped over an identifier, matched parentheses, ..."
-  (if (eobp) (list t (point))
     (smie-next-sexp
      (lambda () (forward-comment (point-max)) (smie-forward-token))
      (indirect-function 'forward-sexp)
      (indirect-function 'smie-op-right)
      (indirect-function 'smie-op-left)
-     halfsexp)))
+   halfsexp))
 
 (defun smie-backward-sexp-command (&optional n)
   "Move backward through N logical elements."
@@ -514,6 +514,10 @@ VIRTUAL can take two different non-nil values:
    (and virtual
         (if (eq virtual :hanging) (not (smie-indent-hanging-p)) (smie-bolp))
         (current-column))
+   ;; Start the file at column 0.
+   (save-excursion
+     (forward-comment (- (point-max)))
+     (if (bobp) 0))
    ;; Align close paren with opening paren.
    (save-excursion
      ;; (forward-comment (point-max))