GNU bug report logs -
#11196
missing constructor procedure in new srfi-9 records
Previous Next
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your message dated Tue, 10 Apr 2012 00:19:12 +0200
with message-id <87bon08s67.fsf <at> gnu.org>
and subject line Re: bug#11196: missing constructor procedure in new srfi-9 records
has caused the debbugs.gnu.org bug report #11196,
regarding missing constructor procedure in new srfi-9 records
to be marked as done.
(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)
--
11196: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=11196
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
Hi,
;;;; A short example script to describe the problem:
(use-modules (srfi srfi-9))
;; A simple record definition for example
(define-record-type my-record
(make-my-record one two)
my-record?
(one my-one)
(two my-two))
;; "Normal" construction is working well
(define r1 (make-my-record "1" "2"))
;; This should also work, but it doesn't!
(define r2 ((record-constructor my-record) "1" "2"))
=> ERROR
;; Where's the constructor procedure?
(display (record-constructor my-record)) (newline)
=> #f
The bug is located in the new srfi-9.scm which forgets to set the
record's constructor procedure.
The following patch may help (hoping not to introduce new problems):
--- srfi-9.scm 2012-04-06 16:52:02.000000000 +0200
+++ srfi-9.scm 2012-04-06 17:14:36.000000000 +0200
@@ -188,7 +188,9 @@
(let* ((fields (field-identifiers #'(field-spec ...)))
(field-count (length fields))
(layout (string-concatenate (make-list field-count
"pw")))
- (indices (field-indices (map syntax->datum fields))))
+ (indices (field-indices (map syntax->datum fields)))
+ (ctor-proc (syntax-case #'constructor-spec ()
+ ((func args ...) (syntax func)))))
#`(begin
(define type-name
(let ((rtd (make-struct/no-tail
@@ -204,7 +206,7 @@
(eq? (struct-vtable obj) type-name)))
#,(constructor #'type-name #'constructor-spec indices)
-
+ (struct-set! type-name (+ 2 vtable-offset-user) #,ctor-proc)
#,@(accessors #'type-name #'(field-spec ...) indices)))))))
;;; srfi-9.scm ends here
Cheers,
Klaus Stehle
----------------------------
guile --version
guile (GNU Guile) 2.0.5
uname -srm
Linux 2.6.32-5-amd64 x86_64
[Message part 3 (message/rfc822, inline)]
Hi Klaus,
Please forget my previous message. SRFI-9 in Guile 2.0 _is_ actually
implemented in terms of “Guile records”. So I applied a patch similar
to yours as commit 5ef102cc93a4f2eba0f5dad94a7306085b353000.
Thanks!
Ludo’.
This bug report was last modified 13 years and 41 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.