   case run the fallback function insteaad."
   `(if (shm-in-comment)
        (call-interactively ',fallback)
-     (progn ,@body)))
+     (if debug-on-error
+         (progn ,@body)
+       (condition-case e
+           (progn ,@body)
+         (error
+          (message "Falling back to %S" ',fallback)
+          (call-interactively ',fallback))))))
 
  

otherwise it's regenerated. See the Internal AST section below
for more information."
  (let ((p (shm-decl-points)))
    (shm-get-decl-ast (car p)
                      (cdr p)
                      reparse)))

(defun shm-current-node ()
  "Return just the current node, without its index.

and that the rest is always indented by one space afterwards, so
Template Haskell uses with it all being at column zero are not
expected to work."
  (let ((point (point)))
    (save-excursion
      (let ((start (or (progn (goto-char (line-end-position))
                              (search-backward-regexp "^[^ \n]" nil t 1))
                       0))
            (end (progn (goto-char (1+ (point)))
                        (or (when (search-forward-regexp "[\n]+[^ \n]" nil t 1)
                              (forward-char -1)
                              (search-backward-regexp "[^\n ]" nil t)
                              (forward-char)
                              (point))
                            (when (search-forward "\n" nil t 1)
                              (1- (point)))
                            (point-max)))))
        (unless (< end point)
          (cons start end))))))


