From: David Vázquez Date: Fri, 3 May 2013 14:59:37 +0000 (+0100) Subject: Easier bootstrap X-Git-Url: http://repo.macrolet.net/gitweb/?p=jscl.git;a=commitdiff_plain;h=9f6eb9ed1efc6148cdd6a2408cfb3a3963fb17d8 Easier bootstrap --- diff --git a/jscl.lisp b/jscl.lisp index 6d907a3..7a31191 100644 --- a/jscl.lisp +++ b/jscl.lisp @@ -68,6 +68,22 @@ when (plusp (length compilation)) do (write-string compilation out))))) +(defun dump-global-environment (stream) + (flet ((late-compile (form) + (write-string (ls-compile-toplevel form) stream))) + ;; Set the initial global environment to be equal to the host global + ;; environment at this point of the compilation. + (late-compile `(setq *environment* ',*environment*)) + ;; Set some counter variable properly, so user compiled code will + ;; not collide with the compiler itself. + (late-compile + `(progn + ,@(mapcar (lambda (s) `(%intern-symbol (%js-vref ,(cdr s)))) *literal-table*) + (setq *literal-table* ',*literal-table*) + (setq *variable-counter* ,*variable-counter*) + (setq *gensym-counter* ,*gensym-counter*))) + (late-compile `(setq *literal-counter* ,*literal-counter*)))) + (defun bootstrap () (setq *environment* (make-lexenv)) (setq *literal-table* nil) @@ -78,7 +94,8 @@ (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)))) + (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") diff --git a/src/toplevel.lisp b/src/toplevel.lisp index d6f8cb4..1fb9d1b 100644 --- a/src/toplevel.lisp +++ b/src/toplevel.lisp @@ -79,6 +79,8 @@ (setq *package* *user-package*) +;;; Set some external entry point to the Lisp implementation to the +;;; console. It would not be necessary when FFI is finished. (js-eval "var lisp") (%js-vset "lisp" (new)) (%js-vset "lisp.read" #'ls-read-from-string) @@ -88,24 +90,3 @@ (%js-vset "lisp.evalString" (lambda (str) (eval (ls-read-from-string str)))) (%js-vset "lisp.evalInput" (lambda (str) (eval-interactive (ls-read-from-string str)))) (%js-vset "lisp.compileString" (lambda (str) (ls-compile-toplevel (ls-read-from-string str) t))) - -;; Set the initial global environment to be equal to the host global -;; environment at this point of the compilation. -(eval-when-compile - (toplevel-compilation - (ls-compile `(setq *environment* ',*environment*)))) - -(eval-when-compile - (toplevel-compilation - (ls-compile - `(progn - ,@(mapcar (lambda (s) `(%intern-symbol (%js-vref ,(cdr s)))) - *literal-table*) - (setq *literal-table* ',*literal-table*) - (setq *variable-counter* ,*variable-counter*) - (setq *gensym-counter* ,*gensym-counter*))))) - -(eval-when-compile - (toplevel-compilation - (ls-compile - `(setq *literal-counter* ,*literal-counter*))))