-(defun compile-function-argument-forms (arg-forms)
- "Compiles a bunch of Parenscript forms from a funcall form to an effective set of
-Javascript arguments. The only extra processing this does is makes :keyword arguments
-into a single options argument via CREATE."
- (let ((compiled-args (mapcar (lambda (arg) (compile-parenscript-form arg :expecting :expression))
- arg-forms)))
- (do ((effective-expressions nil)
- (expressions-subl compiled-args))
- ((not expressions-subl) (reverse effective-expressions))
- (let ((arg-expr (first expressions-subl)))
- (if (keywordp arg-expr)
- (progn (when (oddp (length expressions-subl))
- (error "Odd number of keyword arguments: ~A." arg-forms))
- (push (list 'js-object (loop for (name val) on expressions-subl by #'cddr
- collect (list (list 'js-variable name) val)))
- effective-expressions)
- (setf expressions-subl nil))
- (progn (push arg-expr effective-expressions)
- (setf expressions-subl (rest expressions-subl))))))))
+(defun compile-function-argument-forms (args)
+ (let ((remaining-args args))
+ (loop while remaining-args collecting
+ (if (keywordp (first remaining-args))
+ (prog2 (when (oddp (length remaining-args))
+ (error "Odd number of keyword arguments: ~A." args))
+ (compile-parenscript-form (cons 'create remaining-args) :expecting :expression)
+ (setf remaining-args nil))
+ (prog1 (compile-parenscript-form (first remaining-args) :expecting :expression)
+ (setf remaining-args (cdr remaining-args)))))))