(use-for-syntax matchable) (define-syntax struct-member (ir-macro-transformer (lambda (e i c) (match e ((struct-member record accessor ret-type struct-name member-name) `(let ((record* (,(i accessor) ,(i record)))) (when record* ((foreign-lambda* ,(i ret-type) (((c-pointer (struct ,(i struct-name))) struct)) ,(format "C_return(struct->~a);" (i member-name))) record*))))))))