more lenient pass macro

main
Matthew Butterick 2 years ago
parent c6d5f2f188
commit a56ad07fd9

@ -39,8 +39,7 @@
;; otherwise treat return value as new attr value ;; otherwise treat return value as new attr value
[new-av (hash-set! attrs ak new-av)])) [new-av (hash-set! attrs ak new-av)]))
(set-add! attrs-seen attrs)) (set-add! attrs-seen attrs))
(loop (quad-elems q))))) (loop (quad-elems q))))))
qs)
(define-pass (upgrade-attr-keys qs) (define-pass (upgrade-attr-keys qs)
;; convert attr keys from symbols to attr struct types ;; convert attr keys from symbols to attr struct types

@ -40,9 +40,15 @@
(when (current-use-preconditions?) (when (current-use-preconditions?)
(unless (PRECOND-PROC ARG) (unless (PRECOND-PROC ARG)
(raise-argument-error 'PASS-NAME (format "~a (as precondition)" 'PRECOND-PROC) ARG))) (raise-argument-error 'PASS-NAME (format "~a (as precondition)" 'PRECOND-PROC) ARG)))
(define res (let () EXPRS ...)) ;; a pass can be functional or mutational.
(when (current-use-postconditions?) ;; if it returns void, assume mutational
(unless (POSTCOND-PROC res) ;; and return the input item.
(raise-argument-error 'PASS-NAME (format "~a (as postcondition)" 'POSTCOND-PROC) res))) (define res (match (let () EXPRS ...)
res)) [(? void?) ARG]
[val val]))
(begin0
res
(when (current-use-postconditions?)
(unless (POSTCOND-PROC res)
(raise-argument-error 'PASS-NAME (format "~a (as postcondition)" 'POSTCOND-PROC) res))))))
'PASS-NAME))))])) 'PASS-NAME))))]))
Loading…
Cancel
Save