(push (cons sexp jsvar) *literal-table*)
(toplevel-compilation `(var (,jsvar ,dumped)))
(when (keywordp sexp)
- (toplevel-compilation `(= ,(get jsvar "value") ,jsvar)))
+ (toplevel-compilation `(= (get ,jsvar "value") ,jsvar)))
jsvar)))))))
(when (find :compile-toplevel situations)
(eval (cons 'progn body)))
;; `load-toplevel' is given, then just compile the subforms as usual.
- (if (find :load-toplevel situations)
- (convert `(progn ,@body))))
+ (when (find :load-toplevel situations)
+ (convert-toplevel `(progn ,@body) *multiple-value-p*)))
((find :execute situations)
(convert `(progn ,@body) *multiple-value-p*))
(t
(convert nil))))
-(define-compilation eval-when-compile (&rest body)
- (if *compiling-file*
- (progn
- (eval (cons 'progn body))
- (convert 0))
- (convert `(progn ,@body))))
-
(defmacro define-transformation (name args form)
`(define-compilation ,name ,args
(convert ,form)))
,@(mapcar (lambda (key)
`(progn
(= obj (property obj (call |xstring| ,(convert key))))
- (if (=== object undefined)
+ (if (=== obj undefined)
(throw "Impossible to set object property."))))
(butlast keys))
(var (tmp
(subseq string 0 n)))
(defun convert-toplevel (sexp &optional multiple-value-p)
- (let ((*toplevel-compilations* nil))
+ ;; Macroexpand sexp as much as possible
+ (multiple-value-bind (sexp expandedp) (!macroexpand-1 sexp)
+ (when expandedp
+ (return-from convert-toplevel (convert-toplevel sexp multiple-value-p))))
+ ;; Process as toplevel
+ (let ((*convert-level* -1)
+ (*toplevel-compilations* nil))
(cond
;; Non-empty toplevel progn
((and (consp sexp)