more lenient pass macro

main
Matthew Butterick 3 years ago
parent c6d5f2f188
commit a56ad07fd9

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

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