records: Make a couple of procedures available at expansion time.

* guix/records.scm (current-abi-identifier, abi-check): Wrap in
'eval-when'.
This commit is contained in:
Ludovic Courtès 2018-05-31 17:32:22 +02:00
parent b1059b38b2
commit 9768848af8
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -63,22 +63,25 @@ (define (print-record-abi-mismatch-error port key args
(set-exception-printer! 'record-abi-mismatch-error
print-record-abi-mismatch-error)
(define (current-abi-identifier type)
"Return an identifier unhygienically derived from TYPE for use as its
\"current ABI\" variable."
(let ((type-name (syntax->datum type)))
(datum->syntax
type
(string->symbol
(string-append "% " (symbol->string type-name)
" abi-cookie")))))
(eval-when (expand load eval)
;; The procedures below are needed both at run time and at expansion time.
(define (abi-check type cookie)
"Return syntax that checks that the current \"application binary
(define (current-abi-identifier type)
"Return an identifier unhygienically derived from TYPE for use as its
\"current ABI\" variable."
(let ((type-name (syntax->datum type)))
(datum->syntax
type
(string->symbol
(string-append "% " (symbol->string type-name)
" abi-cookie")))))
(define (abi-check type cookie)
"Return syntax that checks that the current \"application binary
interface\" (ABI) for TYPE is equal to COOKIE."
(with-syntax ((current-abi (current-abi-identifier type)))
#`(unless (eq? current-abi #,cookie)
(throw 'record-abi-mismatch-error #,type))))
(with-syntax ((current-abi (current-abi-identifier type)))
#`(unless (eq? current-abi #,cookie)
(throw 'record-abi-mismatch-error #,type)))))
(define-syntax make-syntactic-constructor
(syntax-rules ()