;; Compile input.lisp form-by-form to isolate bug 2 (load "~/quicklisp/setup.lisp") (ql:register-local-projects) (ql:quickload :cl-tty :silent t) (defun compile-forms-in-file (path) "Read each top-level form from PATH and compile-file each individually." (with-open-file (s path) (loop with form-num = 0 for form = (read s nil s) until (eq form s) do (incf form-num) (let ((tmp-path (format nil "/tmp/input-form-~d.lisp" form-num))) (with-open-file (out tmp-path :direction :output :if-exists :supersede) ;; Preserve the package (prin1 `(in-package ,(package-name *package*)) out) (terpri out) (prin1 form out) (terpri out)) (multiple-value-bind (fasl warn-p fail-p) (compile-file tmp-path :print nil :verbose nil) (format t "Form ~2d: warn=~a fail=~a~%" form-num warn-p fail-p) (when (or warn-p fail-p) (rename-file tmp-path (format nil "/tmp/input-bad-form-~d.lisp" form-num) :if-exists :supersede) (with-open-file (f (format nil "/tmp/input-bad-form-~d.txt" form-num) :direction :output :if-exists :supersede) (prin1 form f))) (when (and fasl (probe-file fasl)) (delete-file fasl)) (delete-file tmp-path)))))) (let ((*package* (find-package :cl-tty.input))) (compile-forms-in-file "src/components/input.lisp"))