git » jacl.git » commit fb21db8

boot.lisp and first CL DEFUN! CL:SET

author Alan Dipert
2020-01-06 07:15:04 UTC
committer Alan Dipert
2020-01-06 07:15:04 UTC
parent ce3954f3f12ef6d1d6fa5973ae8ed5b3be79b4d6

boot.lisp and first CL DEFUN! CL:SET

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))
+