> [Crossposted from bug-guile@ since my message isn't posting there. :-(] > > Hi there, > > I've been playing around with Guile's implementation of SRFI 45 (which > uses SRFI 9), and have noticed something interesting: if you run the > following code in the REPL, printing out the value of the promise will > cause a stack overflow: > > (use-modules (srfi srfi-45)) > (define promise (delay promise)) > (force promise) > > #<promise val: module/ice-9/format.scm:38:0: In procedure format: > module/ice-9/format.scm:38:0: Throw to key `vm-error' with args `(vm-run > "VM: Stack overflow" ())'. > > However, if I change the SRFI 45 code to use Guile's native records, > it prints correctly: > > #<promise val: #<value tag: eager proc: #-1#>> > > For reproducibility, I attached the diff to make SRFI 45 use Guile > native records. > > So, it seems like SRFI 9's record printer doesn't handle cycles in the > record data very well. Unfortunately I don't know how to fix this (I > tried looking at the printer for Guile's native records, but couldn't > figure out what made it special enough to handle cycles correctly), so > no fix is attached. > > Many thanks, > Chris.
Well, I got such a problem too. But some guy told be set-record-type-printer! is helpful. So I just write a new printer for my record for testing. I think it's unnecessary to change the module since the printer is always used in REPL. :) -- GNU Powered it GPL Protected it GOD Blessed it HFG - NalaGinrut --hacker key-- v4sw7CUSMhw6ln6pr8OSFck4ma9u8MLSOFw3WDXGm7g/l8Li6e7t4TNGSb8AGORTDLMen6g6RASZOGCHPa28s1MIr4p-x hackerkey.com ---end key---
