lib/keyword.c (kw_parseempty): Use correct variable scanning `kwval' list.
[sod] / src / frontend.lisp
index 10b2a6c..a00a8bb 100644 (file)
 (eval-when (:compile-toplevel :load-toplevel :execute)
   (handler-bind ((warning #'muffle-warning))
     (cl:defpackage #:sod-frontend
-      (:use #:common-lisp #:sod-utilities #:optparse #:sod #:sod-parser)
-      (:shadowing-import-from #:optparse #:int))))
+      (:use #:common-lisp #:sod-utilities #:optparse #:sod #:sod-parser))))
 
 (cl:in-package #:sod-frontend)
 
 ;;;--------------------------------------------------------------------------
-;;; Preparation for dumping.
-
-(clear-the-decks)
-(exercise)
-
-;;;--------------------------------------------------------------------------
 ;;; The main program.
 
 (defvar-unbound *option-parser*
                     ("Evaluate raw Lisp code.")
                     (lambda (lisp)
                       (handler-case
-                          (let ((*package* (find-package "SOD-USER")))
-                            (eval (read-from-string lisp)))
+                          (let ((*package* (find-package "SOD-USER"))
+                                (token (cons 'token nil)))
+                            (with-input-from-string (in lisp)
+                              (loop (let ((form (read in nil token)))
+                                      (when (eq form token) (return))
+                                      (eval form)))))
                         (error (error)
                           (option-parse-error "~A" error)))))
                (#\l "load" (:arg "FILE")
                                      ~[~:; ~:*~D error~:P~[~:; and~]~:*~]~
                                      ~[~:; ~:*~D warning~:P~]~%"
                      *program-name* nerror nwarn))
-           (exit (if (plusp nerror) 2 0)))))))
+           (uiop:quit (if (plusp nerror) 2 0)))))))
 
 ;;;----- That's all, folks --------------------------------------------------