Record types are self-evaluating:

scheme@(guile-user)> (eval (make-record-type 'my-record '()) (current-module))
$1 = #<record-type my-record>

Yet, when a macro returns a record type, Guile fails
to byte-compile the code, even though the execution
(via the evaluator) works fine. Here is a simple example:


(define-macro (my-macro)
  (make-record-type 'my-record-2 '()))

(display (my-macro))
(newline)


Execution log:


$ guile --no-auto-compile test.scm
#<record-type my-record-2>

$ guile test.scm
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;;       or pass the --no-auto-compile argument to disable.
;;; compiling /home/jean/test.scm
;;; WARNING: compilation of /home/jean/test.scm failed:
;;; unhandled constant #<record-type my-record-2>
#<record-type my-record-2>

This is with Guile version 3.0.5.130-5a1e7.



Reply via email to