diff options
| author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2014-06-05 06:14:44 +0200 | 
|---|---|---|
| committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2014-06-05 06:14:44 +0200 | 
| commit | 0817d5bd4815a3d01536b2133f95e05be0a14fe8 (patch) | |
| tree | 2e61c7f5c58e955f326f65a94950552c233aebe1 | |
| parent | bd0bf6458bcbf983bba09e88a4a20da315044ae7 (diff) | |
| download | geiser-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.el | 9 | 
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 | 
