X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fread.lisp;h=3c352b33184e451b4470c6e81384ed69284914d4;hb=68cd2db6542fa3442d46b0331ecf8be8f86c09c2;hp=190ec79d3340a2f704787e98c49403ace6d33592;hpb=d607a4eeab9801e41de60c90e24c3c1b5074ba2c;p=jscl.git diff --git a/src/read.lisp b/src/read.lisp index 190ec79..3c352b3 100644 --- a/src/read.lisp +++ b/src/read.lisp @@ -148,7 +148,7 @@ (list 'function (ls-read stream))) (#\( (list-to-vector (%read-list stream))) (#\: (make-symbol - (unescape + (unescape-token (string-upcase-noescaped (read-escaped-until stream #'terminalp))))) (#\\ @@ -170,9 +170,12 @@ (ls-read stream) (ls-read stream eof-error-p eof-value)) (:jscl + (ls-read stream eof-error-p eof-value)) + (:nil + (ls-read stream) (ls-read stream eof-error-p eof-value))))))) -(defun unescape (x) +(defun unescape-token (x) (let ((result "")) (dotimes (i (length x)) (unless (char= (char x i) #\\) @@ -224,7 +227,7 @@ (setq name (subseq string index)))) ;; Canonalize symbol name and package (setq name (if (equal package "JS") - (setq name (unescape name)) + (setq name (unescape-token name)) (setq name (string-upcase-noescaped name)))) (setq package (find-package package)) (if (or internalp @@ -301,8 +304,7 @@ ;; Optional exponent part (when (< index size) ;; Exponent-marker - (unless (member (string-upcase (string (char string index))) - '("E" "S" "F" "D" "L")) + (unless (find (char-upcase (char string index)) "ESFDL") (return)) (incf index) (unless (< index size) (return)) @@ -322,7 +324,7 @@ (unless (= index size) (return)) ;; Everything went ok, we have a float ;; XXX: Use FLOAT when implemented. - (/ (* sign (expt 10.0 (* exponent-sign exponent)) number) divisor)))) + (/ (* sign (expt 10.0 (* exponent-sign exponent)) number) divisor 1.0)))) (defun !parse-integer (string junk-allow) (block nil