diff options
| author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2010-11-27 00:54:59 +0100 | 
|---|---|---|
| committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2010-11-27 00:54:59 +0100 | 
| commit | 1723f5365251519b7ef80671fa213f7d97293e29 (patch) | |
| tree | 3721e27328482df15d38a4a95f6e4c0a466095e0 | |
| parent | f5a22dec2bee961d852e242b8eed561c178a801f (diff) | |
| download | geiser-1723f5365251519b7ef80671fa213f7d97293e29.tar.gz geiser-1723f5365251519b7ef80671fa213f7d97293e29.tar.bz2 | |
No more interning in the scheme reader
We avoid using elisp's read for symbols, reading uninterned ones
instead. And then, we cannot use symbols as keys in responses from
scheme: we're using strings instead.
| -rw-r--r-- | elisp/geiser-autodoc.el | 14 | ||||
| -rw-r--r-- | elisp/geiser-doc.el | 16 | ||||
| -rw-r--r-- | elisp/geiser-edit.el | 10 | ||||
| -rw-r--r-- | elisp/geiser-syntax.el | 9 | ||||
| -rw-r--r-- | elisp/geiser-xref.el | 16 | 
5 files changed, 35 insertions, 30 deletions
| diff --git a/elisp/geiser-autodoc.el b/elisp/geiser-autodoc.el index 7c61b33..8222e0b 100644 --- a/elisp/geiser-autodoc.el +++ b/elisp/geiser-autodoc.el @@ -59,7 +59,7 @@ when `geiser-autodoc-display-module-p' is on."  (defun geiser-autodoc--get-signatures (funs &optional keep-cached)    (when funs -    (let ((fs (assq (car funs) geiser-autodoc--cached-signatures))) +    (let ((fs (assoc (car funs) geiser-autodoc--cached-signatures)))        (unless fs          (let ((missing) (cached))            (if (not geiser-autodoc--cached-signatures) @@ -127,11 +127,11 @@ when `geiser-autodoc-display-module-p' is on."  (defun geiser-autodoc--insert-args (args pos prev)    (let ((cpos 1) -        (reqs (cdr (assoc 'required args))) +        (reqs (cdr (assoc "required" args)))          (opts (mapcar (lambda (a)                          (if (and (symbolp a) (not (eq a '...))) (list a) a)) -                      (cdr (assoc 'optional args)))) -        (keys (cdr (assoc 'key args)))) +                      (cdr (assoc "optional" args)))) +        (keys (cdr (assoc "key" args))))      (setq cpos            (geiser-autodoc--insert-arg-group reqs                                              cpos @@ -155,10 +155,10 @@ when `geiser-autodoc-display-module-p' is on."  (defun geiser-autodoc--str (desc signature)    (let ((proc (car desc)) -        (args (cdr (assoc 'args signature))) -        (module (cdr (assoc 'module signature)))) +        (args (cdr (assoc "args" signature))) +        (module (cdr (assoc "module" signature))))      (if (not args) -      (geiser-autodoc--value-str proc module (cdr (assoc 'value signature))) +      (geiser-autodoc--value-str proc module (cdr (assoc "value" signature)))        (save-current-buffer          (set-buffer (geiser-syntax--font-lock-buffer))          (erase-buffer) diff --git a/elisp/geiser-doc.el b/elisp/geiser-doc.el index e975484..9182bab 100644 --- a/elisp/geiser-doc.el +++ b/elisp/geiser-doc.el @@ -236,8 +236,8 @@ help (e.g. browse an HTML page) implementing this method.")      (newline)      (dolist (w lst)        (let ((name (car w)) -            (signature (cdr (assoc 'signature w))) -            (info (cdr (assoc 'info w)))) +            (signature (cdr (assoc "signature" w))) +            (info (cdr (assoc "info" w))))          (insert "\t- ")          (if module              (geiser-doc--insert-button name module impl signature) @@ -294,9 +294,9 @@ help (e.g. browse an HTML page) implementing this method.")          (geiser-doc--with-buffer            (erase-buffer)            (geiser-doc--insert-title -           (geiser-autodoc--str* (cdr (assoc 'signature ds)))) +           (geiser-autodoc--str* (cdr (assoc "signature" ds))))            (newline) -          (insert (or (cdr (assoc 'docstring ds)) "")) +          (insert (or (cdr (assoc "docstring" ds)) ""))            (geiser-doc--buttonize-modules impl)            (setq geiser-doc--buffer-link                  (geiser-doc--history-push (geiser-doc--make-link symbol @@ -327,10 +327,10 @@ With prefix argument, ask for the lookup symbol (with completion)."                                 symbol                                 (geiser-eval--get-module)))) -(defconst geiser-doc--sections '(("Procedures:" procs) -                                 ("Syntax:" syntax) -                                 ("Variables:" vars) -                                 ("Submodules:" modules t))) +(defconst geiser-doc--sections '(("Procedures:" "procs") +                                 ("Syntax:" "syntax") +                                 ("Variables:" "vars") +                                 ("Submodules:" "modules" t)))  (defconst geiser-doc--sections-re    (format "^%s\n" (regexp-opt (mapcar 'car geiser-doc--sections)))) diff --git a/elisp/geiser-edit.el b/elisp/geiser-edit.el index 8fa979f..0fd3b89 100644 --- a/elisp/geiser-edit.el +++ b/elisp/geiser-edit.el @@ -47,23 +47,23 @@ or following links in error buffers.")          (t (find-file file))))  (defsubst geiser-edit--location-name (loc) -  (cdr (assoc 'name loc))) +  (cdr (assoc "name" loc)))  (defsubst geiser-edit--location-file (loc) -  (cdr (assoc 'file loc))) +  (cdr (assoc "file" loc)))  (defsubst geiser-edit--to-number (x)    (cond ((numberp x) x)          ((stringp x) (string-to-number x))))  (defsubst geiser-edit--location-line (loc) -  (geiser-edit--to-number (cdr (assoc 'line loc)))) +  (geiser-edit--to-number (cdr (assoc "line" loc))))  (defsubst geiser-edit--location-column (loc) -  (geiser-edit--to-number (cdr (assoc 'column loc)))) +  (geiser-edit--to-number (cdr (assoc "column" loc))))  (defsubst geiser-edit--make-location (name file line column) -  `((name . ,name) (file . ,file) (line . ,line) (column . ,column))) +  `(("name" . ,name) ("file" . ,file) ("line" . ,line) ("column" . ,column)))  (defconst geiser-edit--def-re    (regexp-opt '("define" diff --git a/elisp/geiser-syntax.el b/elisp/geiser-syntax.el index ae1c3dd..17e0999 100644 --- a/elisp/geiser-syntax.el +++ b/elisp/geiser-syntax.el @@ -122,6 +122,11 @@ implementation-specific entries for font-lock-keywords.")  (defsubst geiser-syntax--read/elisp ()    (ignore-errors (read (current-buffer)))) +(defun geiser-syntax--read/symbol () +  (with-syntax-table scheme-mode-syntax-table +    (when (re-search-forward "\\(\\sw\\|\\s_\\)+" nil t) +      (make-symbol (match-string 0))))) +  (defun geiser-syntax--read/matching (open close)    (let ((count 1)          (p (1+ (point)))) @@ -160,7 +165,7 @@ implementation-specific entries for font-lock-keywords.")               (?\( (geiser-syntax--read/token 'vectorb))               (?\< (geiser-syntax--read/unprintable))               ((?' ?` ?,) (geiser-syntax--read/next-token)) -             (t (let ((tok (geiser-syntax--read/elisp))) +             (t (let ((tok (geiser-syntax--read/symbol)))                    (if tok (cons 'atom (intern (format "#%s" tok)))                      (geiser-syntax--read/next-token))))))        (?\' (geiser-syntax--read/token '(quote . quote))) @@ -171,7 +176,7 @@ implementation-specific entries for font-lock-keywords.")                 `(splice . ,backquote-splice-symbol))              `(unquote . ,backquote-unquote-symbol)))        (?\" (cons 'string (geiser-syntax--read/elisp))) -      (t (cons 'atom (geiser-syntax--read/elisp)))))) +      (t (cons 'atom (geiser-syntax--read/symbol))))))  (defsubst geiser-syntax--read/match (&rest tks)    (let ((token (geiser-syntax--read/next-token))) diff --git a/elisp/geiser-xref.el b/elisp/geiser-xref.el index 661c625..d8b46d0 100644 --- a/elisp/geiser-xref.el +++ b/elisp/geiser-xref.el @@ -54,12 +54,12 @@                                        geiser-xref-follow-link-method))))  (defun geiser-xref--insert-button (xref) -  (let* ((location (cdr (assoc 'location xref))) +  (let* ((location (cdr (assoc "location" xref)))           (file (geiser-edit--location-file location)) -         (signature (cdr (assoc 'signature xref))) +         (signature (cdr (assoc "signature" xref)))           (signature-txt (and signature                               (geiser-autodoc--str* signature))) -         (module (cdr (assoc 'module xref))) +         (module (cdr (assoc "module" xref)))           (p (point)))      (when signature        (insert "   - ") @@ -76,11 +76,11 @@        (newline))))  (defun geiser-xref--module< (xr1 xr2) -  (let ((m1 (cdr (assoc 'module xr1))) -        (m2 (cdr (assoc 'module xr2)))) +  (let ((m1 (cdr (assoc "module" xr1))) +        (m2 (cdr (assoc "module" xr2))))      (cond ((equal m1 m2) -           (string< (format "%s" (cdr (assoc 'signature xr1))) -                    (format "%s" (cdr (assoc 'signature xr2))))) +           (string< (format "%s" (cdr (assoc "signature" xr1))) +                    (format "%s" (cdr (assoc "signature" xr2)))))            ((null m1) (not m2))            ((null m2))            (t (string< (format "%s" m1) (format "%s" m2)))))) @@ -92,7 +92,7 @@     (newline)     (let ((last-module))       (dolist (xref (sort xrefs 'geiser-xref--module<)) -       (let ((module (cdr (assoc 'module xref)))) +       (let ((module (cdr (assoc "module" xref))))           (when (not (equal module last-module))             (insert "\n  In module ")             (geiser--insert-with-face (format "%s" module) | 
