(define-syntax define-scalar-accessor (ir-macro-transformer (lambda (e i c) (let ((accessor (cadr e)) (return-type (caddr e)) (attribute (cadddr e))) `(define ,accessor (foreign-lambda* ,return-type ((yaml_event_t event)) ,(sprintf "C_return(event->data.scalar.~S);" (strip-syntax attribute)))))))) ;; Example: (define-scalar-accessor scalar-len int length) ;; => (define scalar-len ;; (foreign-lambda* int ((yaml_event_t event)) ;; "C_return(event->data.scalar.length);"))