(format t "value-string-lists: ~S~%" value-string-lists)
;;; collect single value-string-lists until line full
-
+
(do* ((string-lists value-string-lists (cdr string-lists))
(string-list (car string-lists) (car string-lists))
(cur-elt start)
(when join-after
(unless (null (cdr string-lists))
(funcall append-to-last string-list join-after)))
-
+
(if (and collect (= (length string-list) 1))
(progn
#+nil
`(setf (gethash ,(symbol-name name) *js-macro-toplevel*)
#'(lambda (&rest ,lambda-list)
(destructuring-bind ,args ,lambda-list ,@body)))))
-
+
(defun js-expand-form (expr)
"Expand a javascript form."
(cond ((atom expr)
(js-expand-form (let ((*js-macro-env* macro-env))
(funcall js-macro)))
expr)))
-
+
((js-compiler-macro-form-p expr) expr)
-
+
((equal (first expr) 'quote) expr)
(t (let ((js-macro (lookup-macro (car expr))))
:stmts (nconc (when (var-names single-defvar) (list single-defvar))
defvars
(mapcar #'js-compile-to-statement body)))))
-
+
;;; iteration
(defjsclass js-for (statement)
"javascript:"
(string-join (js-to-statement-strings
(js-compile (cons 'progn body)) 0) " "))))
-
+
(defmacro js (&rest body)
`(js* '(progn ,@body)))