X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=lispstrack.lisp;h=46c07c63d8fb3c586c8db0fe794e349587846346;hb=4f17b56fa136f97d11975d081a861351eb64db76;hp=b4adc1b2cc442fa7e4ee8c3ce9674b9c202d2aeb;hpb=3eb043e814a43ce8fcb12e4121225ad484f00671;p=jscl.git diff --git a/lispstrack.lisp b/lispstrack.lisp index b4adc1b..46c07c6 100644 --- a/lispstrack.lisp +++ b/lispstrack.lisp @@ -120,13 +120,15 @@ (skip-whitespaces-and-comments stream) (let ((ch (%peek-char stream))) (cond + ((null ch) + (error "Unspected EOF")) ((char= ch #\)) (%read-char stream) nil) ((char= ch #\.) (%read-char stream) - (skip-whitespaces-and-comments stream) (prog1 (ls-read stream) + (skip-whitespaces-and-comments stream) (unless (char= (%read-char stream) #\)) (error "')' was expected.")))) (t @@ -136,8 +138,10 @@ (let ((string "") (ch nil)) (setq ch (%read-char stream)) - (while (not (char= ch #\")) - (when (char= ch #\\) + (while (not (eql ch #\")) + (when (null ch) + (error "Unexpected EOF")) + (when (eql ch #\\) (setq ch (%read-char stream))) (setq string (concat string (string ch))) (setq ch (%read-char stream))) @@ -425,8 +429,8 @@ (define-transformation let (bindings &rest body) (let ((bindings (mapcar #'ensure-list bindings))) - `((lambda ,(mapcar 'car bindings) ,@body) - ,@(mapcar 'cadr bindings)))) + `((lambda ,(mapcar #'car bindings) ,@body) + ,@(mapcar #'cadr bindings)))) ;;; A little backquote implementation without optimizations of any ;;; kind for lispstrack. @@ -604,8 +608,7 @@ "})()" *newline*)))) (define-compilation js-eval (string) - (concat "eval(" (ls-compile string env fenv) ")")) - + (concat "eval.apply(window, [" (ls-compile string env fenv) "])")) (define-compilation error (string) (concat "(function (){ throw " (ls-compile string env fenv) ";" "return 0;})()"))