34 lines
1.5 KiB
Common Lisp
34 lines
1.5 KiB
Common Lisp
;; 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"))
|