;; You should have received a copy of the GNU General Public License
;; along with JSCL. If not, see <http://www.gnu.org/licenses/>.
+(defpackage :jscl
+ (:use :cl)
+ (:export #:bootstrap #:run-tests-in-host))
+
+(in-package :jscl)
+
(defvar *source*
'(("boot" :target)
("compat" :host)
(load (source-pathname (car input)))))
(defun read-whole-file (filename)
- (with-open-file (in filename :external-format :latin-1)
+ (with-open-file (in filename)
(let ((seq (make-array (file-length in) :element-type 'character)))
(read-sequence seq in)
seq)))
with eof-mark = (gensym)
for x = (ls-read in nil eof-mark)
until (eq x eof-mark)
- for compilation = (ls-compile-toplevel x)
- when (plusp (length compilation))
- do (write-string compilation out)))))
+ do (let ((compilation (ls-compile-toplevel x)))
+ (when (plusp (length compilation))
+ (write-string compilation out)))))))
(defun dump-global-environment (stream)
(defun bootstrap ()
- (setq *environment* (make-lexenv))
- (setq *literal-table* nil)
- (setq *variable-counter* 0
- *gensym-counter* 0
- *literal-counter* 0)
- (with-open-file (out "jscl.js" :direction :output :if-exists :supersede)
- (write-string (read-whole-file (source-pathname "prelude.js")) out)
- (dolist (input *source*)
- (when (member (cadr input) '(:target :both))
- (ls-compile-file (source-pathname (car input) :type "lisp") out)))
- (dump-global-environment out))
- ;; Tests
- (with-open-file (out "tests.js" :direction :output :if-exists :supersede)
- (dolist (input (append (directory "tests.lisp")
- (directory "tests/*.lisp")
- (directory "tests-report.lisp")))
- (ls-compile-file input out))))
+ (let ((*package* (find-package "JSCL")))
+ (setq *environment* (make-lexenv))
+ (setq *literal-table* nil)
+ (setq *variable-counter* 0
+ *gensym-counter* 0
+ *literal-counter* 0)
+ (with-open-file (out "jscl.js" :direction :output :if-exists :supersede)
+ (write-string (read-whole-file (source-pathname "prelude.js")) out)
+ (dolist (input *source*)
+ (when (member (cadr input) '(:target :both))
+ (ls-compile-file (source-pathname (car input) :type "lisp") out)))
+ (dump-global-environment out))
+ ;; Tests
+ (with-open-file (out "tests.js" :direction :output :if-exists :supersede)
+ (dolist (input (append (directory "tests.lisp")
+ (directory "tests/*.lisp")
+ (directory "tests-report.lisp")))
+ (ls-compile-file input out)))))
;;; Run the tests in the host Lisp implementation. It is a quick way
;;; to improve the level of trust of the tests.
(defun run-tests-in-host ()
- (load "tests.lisp")
- (let ((*use-html-output-p* nil))
- (declare (special *use-html-output-p*))
- (dolist (input (directory "tests/*.lisp"))
- (load input)))
- (load "tests-report.lisp"))
+ (let ((*package* (find-package "JSCL")))
+ (load "tests.lisp")
+ (let ((*use-html-output-p* nil))
+ (declare (special *use-html-output-p*))
+ (dolist (input (directory "tests/*.lisp"))
+ (load input)))
+ (load "tests-report.lisp")))