diff options
| -rw-r--r-- | elisp/geiser-syntax.el | 20 | 
1 files changed, 10 insertions, 10 deletions
| diff --git a/elisp/geiser-syntax.el b/elisp/geiser-syntax.el index 8c90a7b..8662e37 100644 --- a/elisp/geiser-syntax.el +++ b/elisp/geiser-syntax.el @@ -327,14 +327,15 @@ implementation-specific entries for font-lock-keywords.")         (let ((f (symbol-name f)))           (or (member f '("define" "define*" "define-syntax"                           "syntax-rules" "lambda" "case-lambda" -                         "let" "let*" "letrec" "parameterize")) +                         "let" "let*" "let-values" "let*-values" +                         "letrec" "letrec*" "parameterize"))               (member f bfs)               (member f sbfs)))))  (defsubst geiser-syntax--binding-form*-p (sbfs f)    (and (symbolp f)         (let ((f (symbol-name f))) -         (or (member f '("let*")) +         (or (member f '("let*" "let*-values" "letrec" "letrec*"))               (member f sbfs)))))  (defsubst geiser-syntax--if-symbol (x) (and (symbolp x) x)) @@ -351,13 +352,13 @@ implementation-specific entries for font-lock-keywords.")  	((null form) nil)  	(t (cons (car form) (geiser-syntax--linearize (cdr form)))))) -(defun geiser-syntax--scan-locals (bfs sbfs form partial nesting locals) +(defun geiser-syntax--scan-locals (bfs sbfs form nesting locals)    (if (or (null form) (not (listp form)))        (geiser-syntax--normalize locals)      (if (not (geiser-syntax--binding-form-p bfs sbfs (car form)))  	(geiser-syntax--scan-locals bfs sbfs  				    (car (last form)) -                                    partial (1- nesting) locals) +                                    (1- nesting) locals)        (let* ((head (car form))  	     (name (geiser-syntax--if-symbol (cadr form)))  	     (names (if name (geiser-syntax--if-list (caddr form)) @@ -366,22 +367,23 @@ implementation-specific entries for font-lock-keywords.")                         (geiser-syntax--binding-form-p bfs sbfs (car names))))  	     (rest (if (and name (not bns)) (cdddr form) (cddr form)))  	     (use-names (and (or rest -                                 (not partial) +                                 (< nesting 1)                                   (geiser-syntax--binding-form*-p sbfs head))                               (not bns))))  	(when name (push name locals))          (when (geiser-syntax--symbol-eq head 'case-lambda)            (dolist (n (and (> nesting 0) (caar (last form))))              (when n (push n locals))) -          (setq rest (and partial (cdr form))) +          (setq rest (and (> nesting 0) (cdr form)))            (setq use-names nil))          (when (geiser-syntax--symbol-eq head 'syntax-rules)            (dolist (n (and (> nesting 0) (cdaar (last form))))              (when n (push n locals))) -          (setq rest (and partial (cdr form)))) +          (setq rest (and (> nesting 0) (cdr form))))  	(when use-names  	  (dolist (n (geiser-syntax--linearize names)) -	    (when n (push n locals)))) +            (let ((xs (if (and (listp n) (listp (car n))) (car n) (list n)))) +              (dolist (x xs) (when x (push x locals))))))  	(dolist (f (butlast rest))  	  (when (and (listp f)                       (geiser-syntax--symbol-eq (car f) 'define) @@ -389,7 +391,6 @@ implementation-specific entries for font-lock-keywords.")  	    (push (cadr f) locals)))  	(geiser-syntax--scan-locals bfs sbfs  				    (car (last (or rest names))) -				    partial                                      (1- nesting)  				    locals))))) @@ -409,7 +410,6 @@ implementation-specific entries for font-lock-keywords.")                      (geiser-syntax--scan-locals bfs                                                  sbfs                                                  form -                                                (> end boundary)                                                  (1- nesting)                                                  '())))))))) | 
