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
commit7cf34c0c92cac3039849b8be40b468d0c52d2472 (patch)
tree4cafd2872813a70f51d59a8ae3075d802357cc6a
parentf7c97ae42913e22df4532aa820a07751a5e8c71e (diff)
downloadgeiser-guile-7cf34c0c92cac3039849b8be40b468d0c52d2472.tar.gz
geiser-guile-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...
-rw-r--r--elisp/geiser-guile.el4
-rw-r--r--elisp/geiser-racket.el4
-rw-r--r--elisp/geiser-syntax.el9
3 files changed, 8 insertions, 9 deletions
diff --git a/elisp/geiser-guile.el b/elisp/geiser-guile.el
index fbe6075..e8eb11a 100644
--- a/elisp/geiser-guile.el
+++ b/elisp/geiser-guile.el
@@ -171,9 +171,7 @@ This function uses `geiser-guile-init-file' if it exists."
(defun geiser-guile--get-module (&optional module)
(cond ((null module)
(save-excursion
- (ignore-errors
- (while (not (zerop (geiser-syntax--nesting-level)))
- (backward-up-list)))
+ (geiser-syntax--pop-to-top)
(if (or (re-search-backward geiser-guile--module-re nil t)
(looking-at geiser-guile--library-re)
(re-search-forward geiser-guile--module-re nil t))
diff --git a/elisp/geiser-racket.el b/elisp/geiser-racket.el
index f2cec3a..8a0d46d 100644
--- a/elisp/geiser-racket.el
+++ b/elisp/geiser-racket.el
@@ -119,9 +119,7 @@ using start-geiser, a procedure in the geiser/server module."
(defun geiser-racket--explicit-module ()
(save-excursion
- (ignore-errors
- (while (not (zerop (geiser-syntax--nesting-level)))
- (backward-up-list)))
+ (geiser-syntax--pop-to-top)
(and (looking-at geiser-racket--module-re)
(let ((mod (match-string-no-properties 1))
(lang (match-string-no-properties 2)))
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