(define-foreign-record-type (date "struct ln_date") (constructor: %%make-date) (destructor: %free-date) (int years %date-years %date-years-set!) (int months %date-months %date-months-set!) (int days %date-days %date-days-set!) (int hours %date-hours %date-hours-set!) (int minutes %date-minutes %date-minutes-set!) (double seconds %date-seconds %date-seconds-set!)) (define-record date this) (define %make-date make-date) (define (date-years d) (%date-years (date-this d))) (define (date-months d) (%date-months (date-this d))) (define (date-days d) (%date-days (date-this d))) (define (date-hours d) (%date-hours (date-this d))) (define (date-minutes d) (%date-minutes (date-this d))) (define (date-seconds d) (%date-seconds (date-this d))) (define (date-years-set! d v) (%date-years-set! (date-this d) v)) (define (date-months-set! d v) (%date-months-set! (date-this d) v)) (define (date-days-set! d v) (%date-days-set! (date-this d) v)) (define (date-hours-set! d v) (%date-hours-set! (date-this d) v)) (define (date-minutes-set! d v) (%date-minutes-set! (date-this d) v)) (define (date-seconds-set! d v) (%date-seconds-set! (date-this d) v)) (define (make-date . args) (let ((d (apply %%make-date args))) (set-finalizer! d %free-date) (%make-date d)))