summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJose Antonio Ortega Ruiz <jao@gnu.org>2014-06-05 06:14:44 +0200
committerJose Antonio Ortega Ruiz <jao@gnu.org>2014-06-05 06:14:44 +0200
commit0817d5bd4815a3d01536b2133f95e05be0a14fe8 (patch)
tree2e61c7f5c58e955f326f65a94950552c233aebe1
parentbd0bf6458bcbf983bba09e88a4a20da315044ae7 (diff)
downloadgeiser-0817d5bd4815a3d01536b2133f95e05be0a14fe8.tar.gz
geiser-0817d5bd4815a3d01536b2133f95e05be0a14fe8.tar.bz2
Possible fix for scanning problem
Apparently, the nesting level returned by emacs's syntax parser can be negative (presumably when it gets confused), and we were not avoiding calling backward-up-list when that happened. Could or could not address issue #41...
-rw-r--r--elisp/geiser-syntax.el9
1 files changed, 6 insertions, 3 deletions
diff --git a/elisp/geiser-syntax.el b/elisp/geiser-syntax.el
index b9a7174..9557f5e 100644
--- a/elisp/geiser-syntax.el
+++ b/elisp/geiser-syntax.el
@@ -255,6 +255,10 @@ implementation-specific entries for font-lock-keywords.")
(defsubst geiser-syntax--nesting-level ()
(or (nth 0 (syntax-ppss)) 0))
+(defun geiser-syntax--pop-to-top ()
+ (ignore-errors
+ (while (> (geiser-syntax--nesting-level) 0) (backward-up-list))))
+
(defsubst geiser-syntax--in-string-p ()
(nth 3 (syntax-ppss)))
@@ -287,7 +291,7 @@ implementation-specific entries for font-lock-keywords.")
(smth (or fst (not (looking-at-p "[\s \s)\s>\s<\n]"))))
(path (and fst `((,fst 0)))))
(save-excursion
- (while (not (zerop (geiser-syntax--nesting-level)))
+ (while (> (or (geiser-syntax--nesting-level) 0) 0)
(let ((boundary (point)))
(geiser-syntax--skip-comment/string)
(backward-up-list)
@@ -383,8 +387,7 @@ implementation-specific entries for font-lock-keywords.")
(skip-syntax-forward "->")
(let ((boundary (point))
(nesting (geiser-syntax--nesting-level)))
- (while (not (zerop (geiser-syntax--nesting-level)))
- (backward-up-list))
+ (geiser-syntax--pop-to-top)
(multiple-value-bind (form end)
(geiser-syntax--form-after-point boundary)
(delete sym