author | Alan Dipert
<alan@dipert.org> 2020-01-06 07:15:04 UTC |
committer | Alan Dipert
<alan@dipert.org> 2020-01-06 07:15:04 UTC |
parent | ce3954f3f12ef6d1d6fa5973ae8ed5b3be79b4d6 |
boot.lisp | +32 | -0 |
diff --git a/boot.lisp b/boot.lisp new file mode 100644 index 0000000..1b257b1 --- /dev/null +++ b/boot.lisp @@ -0,0 +1,32 @@ +;; in JACL package + +(\. cl:*package* (|exportSymbol| (\. '%defmacro |name|))) +(%js "(~{}.setMacro().fvalue = ~{})" + '%defmacro + (%lambda (env form name params &rest body) + ;; TODO Use %PROGN instead of %LET + `(jacl:%let () + (jacl:%js "(~{}.setMacro().fvalue = ~{})" + ',name + ;; TODO Macro lambda list parsing. Also, consider + ;; incorportating a symbol's package into the name of its + ;; generated local. + (jacl:%lambda (jacl::&environment jacl::&whole ,@params) + ,@body)) + ',name))) + +;; Use JACL from COMMON-LISP and switch to COMMON-LISP +(%let ((cl-pkg (\. (%js "Package") (|get| "COMMON-LISP")))) + (\. cl-pkg (|usePackage| cl:*package*)) + (%setq cl:*package* cl-pkg)) + +(%defmacro defun (name params &rest body) + `(jacl:%let () + (jacl:%js "(~{}.fvalue = ~{})" + ',name + (jacl:%lambda ,params ,@body)) + ',name)) + +(defun set (symbol value) + (%js "(~{}.value = ~{})" symbol value)) +