summaryrefslogtreecommitdiff
path: root/elisp/geiser-syntax.el
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
commit7cf34c0c92cac3039849b8be40b468d0c52d2472 (patch)
tree4cafd2872813a70f51d59a8ae3075d802357cc6a /elisp/geiser-syntax.el
parentf7c97ae42913e22df4532aa820a07751a5e8c71e (diff)
downloadgeiser-chez-7cf34c0c92cac3039849b8be40b468d0c52d2472.tar.gz
geiser-chez-7cf34c0c92cac3039849b8be40b468d0c52d2472.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...
Diffstat (limited to 'elisp/geiser-syntax.el')
-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