Broken macro added by Zipheir on Fri Jul 27 04:19:33 2018

(define-syntax multiple-value-set!
  (syntax-rules ()
    ((multiple-value-set! vars vals-form)
     (gen-temps vars () vars vals-form))))

;; auxiliary macro for multiple-value-set!
(define-syntax emit-cwv-form
  (syntax-rules ()
    ((emit-cwv-form temps asgns vals-form)
     (call-with-values
      (lambda () vals-form)
      (lambda temps . asgns)))))

(define-syntax gen-temps
  (syntax-rules ()
    ((gen-temps () temps vars-for-gen-sets vals-form)
     (gen-sets temps
               temps
               vars-for-gen-sets
               ()
               vals-form))
    ((gen-temps (v . vs) temps vars-for-gen-sets vals-form)
     (gen-temps vs
                (temp . temps)
                vars-for-gen-sets
                vals-form))))

(define-syntax gen-sets
  (syntax-rules ()
    ((gen-sets temps () () asgns vals-form)
     (emit-cwv-form temps asgns vals-form))
    ((gen-sets temps (temp . temps*) (v . vs) asgns vals-form)
     (gen-sets temps
               temps*
               vs
               ((set! v temp) . asgns)
               vals-form))))