X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fread.lisp;h=1cbe13e50f2df7e0661ad16a031ce44927c6b13e;hb=03c4e7562141980da23902bd3176700569fff1d4;hp=c3cde1b150b7f1255d07576ead558b3a32270c10;hpb=ac57d5570ffb5fb9936ffca4e0d6c8d9fddc1e29;p=jscl.git diff --git a/src/read.lisp b/src/read.lisp index c3cde1b..1cbe13e 100644 --- a/src/read.lisp +++ b/src/read.lisp @@ -237,20 +237,17 @@ ((string= cname "tab") #\tab) ((string= cname "newline") #\newline) (t (char cname 0))))) - ((char= ch #\+) + ((or (char= ch #\+) + (char= ch #\-)) (let ((feature (let ((symbol (ls-read stream eof-error-p eof-value t))) (unless (symbolp symbol) (error "Invalid feature ~S" symbol)) (intern (string symbol) "KEYWORD")))) - (ecase feature - (:common-lisp - (ls-read stream) - (ls-read stream eof-error-p eof-value t)) - (:jscl - (ls-read stream eof-error-p eof-value t)) - (:nil - (ls-read stream) - (ls-read stream eof-error-p eof-value t))))) + (if (eql (char= ch #\+) + (and (find feature *features*) t)) + (ls-read stream eof-error-p eof-value t) + (prog2 (ls-read stream) + (ls-read stream eof-error-p eof-value t))))) ((and ch (digit-char-p ch)) (let ((id (digit-char-p ch))) (while (and (%peek-char stream) @@ -322,7 +319,7 @@ ;; No package prefix ((= index size) (setq name string) - (setq package *package*) + (setq package (package-name *package*)) (setq internalp t)) (t ;; Package prefix @@ -335,7 +332,7 @@ (incf index)) (setq name (subseq string index)))) ;; Canonalize symbol name and package - (setq name (if (equal package "JS") + (setq name (if (string= package "JS") (setq name (unescape-token name)) (setq name (string-upcase-noescaped name)))) (setq package (find-package package))